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
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
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
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
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
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
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 itKeep going
Related playbooks
- RevOpsIntermediate
Build a Clay Waterfall to Find Verified Work Emails
A single data provider misses many contacts, so reps either work incomplete lists or pay for several tools and copy results between them by hand.
ClayApolloHunter or Prospeo+2Estimate: 4 hrs/week - RevOpsIntermediate
Keep CRM Data Clean with an AI Hygiene Agent
CRM records decay as people change jobs and reps type titles and industries in different formats, so segmentation, routing, and reporting quietly break.
ClayClaygentHubSpot or Salesforce+2Estimate: 4 hrs/week - RevOpsAdvanced
Prevent Duplicate Contacts Across HubSpot and Salesforce
Marketing creates contacts in HubSpot while sales creates them in Salesforce, leading to duplicates and broken reporting.
HubSpotSalesforceZapierEstimate: 5 hrs/week - InboundIntermediate
Automate Inbound Lead Routing with Enrichment and Fit Scoring
Inbound leads wait in a shared queue or get assigned round-robin regardless of fit, so the best leads reach a rep late and poor-fit leads take up AE time.
ClayHubSpot or SalesforceApollo+2Estimate: 4 hrs/week - RevOpsAdvanced
Run CRM-Writing AI Agents in Dry-Run Mode with Bulk Approvals
An AI agent that writes straight to Salesforce or HubSpot can change thousands of records before anyone notices a bad rule, and each change can trigger syncs, workflows, and sequences that are hard to trace and harder to reverse.
HubSpot or SalesforceClayGoogle Sheets+1Estimate: 2 hrs/week - OutboundAdvanced
Build Prospect Lists from Plain-English Requests in Slack
Reps and marketers wait days for RevOps to build a prospect list, or pull their own from Apollo with inconsistent filters, no CRM dedupe, and no check on how many credits the pull will burn.
SlackZapier or MakeOpenAI API+4Estimate: 4 hrs/week
Need help implementing a playbook?
Our team builds custom Clay workflows and AI automations for revenue teams.
Get it built for you