GTM Playbooks
RevOpsIntermediate

Keep Clay Credit Spend Predictable on Enrichment Tables

The problem

Clay tables that enrich every row, re-run on every edit, and call providers in no particular order burn through credits faster than planned, and the overspend usually shows up only when the monthly balance runs low.

Implementation steps

  1. 1

    Open Clay's credit usage dashboard, which breaks spend down by table, integration, and run, and pick the table that spent the most last month to fix first

  2. 2

    Remove rows before anything paid runs: normalize the record key with a formula (lowercase domain without protocol, www, or path, or a clean LinkedIn URL), turn on auto-dedupe rows on that column, and add CRM lookup columns so contacts and accounts you already have data for, current customers, and open deals are flagged instead of enriched again

  3. 3

    Add a Qualified formula column built from free data (country, headcount from the source, personal email domains, the CRM flags), then set an "Only run if" run condition on every paid enrichment, waterfall, Claygent, and AI column, for example Qualified is true and Work Email is empty, and keep Claygent and AI columns at the end of the table

  4. 4

    Order each waterfall cheapest first, since Clay runs providers in your sequence and stops at the first validated result: start the work email waterfall with the free Infer Email step, then providers connected with your own API keys, then the lower-cost Clay providers, with expensive specialists last, and toggle off providers you do not need

  5. 5

    Test before scaling: switch the table to Manual, run each new or changed column on 10 rows, check the outputs and the AI prompt results, and read the credit estimate Clay shows before a run that triggers dependent columns, then run the full column

  6. 6

    Set auto-run on purpose for large and scheduled tables: keep table auto-run off until launch, turn on "Keep existing results" when you enable it so only new, empty, or errored cells run, switch off column auto-run on expensive columns that should not re-run when an input changes, and set scheduled CRM imports to update net new records only unless you need a refresh

Template outline

The structure to recreate in your own workspace. Field names and thresholds are starting points.

Clay Table Order (left to right, free before paid):
1. Source: CRM import, CSV, or Find People / Find Companies
2. Formula: record_key = normalized domain (companies) or LinkedIn URL / email (people)
3. Table setting: auto-dedupe rows on record_key, keep oldest row for static lists
4. CRM lookups (HubSpot or Salesforce): existing email, is_customer, has_open_deal
5. Formula: Qualified = country IN {{your_countries}} AND headcount BETWEEN {{min}} AND {{max}} AND NOT is_customer AND NOT has_open_deal AND NOT personal email domain
6. Paid enrichment columns: Only run if Qualified
7. Work email waterfall: Infer Email > providers on your own API keys > lower-cost Clay providers > specialists
   - Only run if Qualified AND existing email is empty
8. Claygent and AI columns (last): Only run if Qualified AND their inputs are not empty

Run Settings:
- Table auto-run: Manual while building; on at launch with "Keep existing results"
- Column auto-run: off on expensive columns that should not re-run on input edits
- New or changed column: run on 10 rows, check, then run the full column
- Scheduled CRM import: update net new only unless you need a refresh

Monthly Review:
- Credit usage dashboard by table and integration; fix the top table first
Output: credits go to qualified rows that need the data, once, through the cheapest provider that returns it

Keep going

View all RevOps

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you