Clay enrichment workflows we use for B2B SaaS ICP building
A lot of the Clay credit burn we see at B2B SaaS companies happens before anyone writes a single email. Picture a hypothetical team that imports 5,000 accounts, turns on five enrichment columns, and finds out a week later that the budget went to contacts at companies that were never going to buy a $40K product. A fully enriched record can consume multiple Data Credits. Multiply that across a list nobody qualified, and the invoice gets ugly fast.
It gets worse when the data vendor, the outbound shop, and the team managing the paid-media budget allocation each build their own list. Your best account ends up getting three different pitches, and nobody can say which one worked.
Qualify the account first, spend on contacts second, and hand verified records to outbound and ads third. That order of operations is what keeps three teams working off one list instead of three. Below are the four Clay enrichment workflows we run for SaaS clients selling at $20K to $100K ACVs, the operating rules we hold each one to, and the parts that still don't work as well as the vendor pages suggest.
Write the ICP down before opening Clay
We start by pulling closed-won deals, finding the firmographic, technographic, and timing attributes they share, and checking those attributes against closed-lost before anyone builds a table. That gives paid media, outbound, and sales one definition of a best-fit account instead of three competing lists.
Our developer-tool ICP might include employee range, developer-team size, technical leadership, open engineering roles, remote-work policy, and funding. Every attribute maps to a field Clay can fill, so every attribute can be scored through the lead-scoring model.
Add one timing signal. A recent CRO hire, a funding round in the last 90 days, or a hiring surge in the buying team is what turns a fit account into a Tier 1 account. We ask for one and stop there. A timing signal breaks ties between fit accounts, and stacking three of them as hard requirements usually leaves a Tier 1 list too small to staff.
Workflow 1: Clay enrichment that qualifies accounts before contacts
The company-level sequence runs Source, Enrich, Research, Verify, and Route. This is where the data vendor and the outbound shop usually stop agreeing on who's Tier 1; one gate fixes that. We build the sequence in five stages:
- Source: Start with the domain and company social URL.
- Enrich: Give each firmographic field its own waterfall, ordered cheapest-coverage first.
- Research: Check technographic data to verify technology usage, and fall back to the website's own tech stack when coverage gaps show up.
- Verify: Use a compound ICP Match formula column to mark each row Pass or Fail. Every paid column downstream carries a run condition such as {{lead_score}} > 80 && {{industry}} == "SaaS".
- Route: Run Find People last, keyed on full name and contact social URL.
No contact column fires until an account passes. We never enrich contacts at accounts that failed the gate. Paying to find the VP at a company that fails the gate is the fastest way to burn a month of credits.
While you build, turn auto-run off because it is on by default and re-runs when an input changes. Test on 25 to 50 rows, and set "Only run if" conditions such as "Email is empty." Once the build works, save it as a Function so every later import runs the same gate.
Workflow 2: Email waterfall, cheapest confident provider first
When two vendors each run their own waterfall, you pay twice and get two different emails for the same buyer. Our rule is straightforward: put the cheapest confident answer first and the broadest source last. Billing applies only to the provider that returns the match.
The email workflow follows four operating rules:
- Start with the free option: Infer Email runs first.
- Cap the waterfall: We stop at four or five providers. In our builds, providers past the fifth rarely pay for themselves, so we pilot every new chain on a few hundred rows before scaling it.
- Validate before mailing: We validate every email before it reaches a sequencer and mail only rows marked valid. Catch-all addresses can't be validated without sending, and we don't mail coin flips.
- Recheck aging data: Contacts change jobs, so we re-verify anything older than 90 days before it reaches a sequencer. Google requires SPF, DKIM, and DMARC for high-volume senders, and we check all three before the first campaign launches.
These rules prevent duplicate spending without trading away deliverability.
Phones are the honest weak spot. We use two controls:
- Provider order: We run phone waterfalls through Prospeo and LeadMagic first, and fall back to a secondary provider only when both come back empty.
- Eligibility: We run them only for clients who actually cold call, and only on rows that already have a verified email.
Together, these controls keep us from spending an SDR afternoon on numbers that never connect, which costs more than the lookups did.
Workflow 3: Claygent for the questions no provider sells
Firmographics come from data providers. Questions like "does this company run security in-house?" or "is this product-led or sales-led?" need an agent. Whatever the agent finds becomes the personalization line in both the email and the ad, so a wrong answer shows up in two channels at once.
We enforce these requirements on every agent column:
- Force a structured schema.
- Require a source URL and explicitly permit "Not found."
Those constraints matter more than adding another paragraph to the prompt.
A working schema looks like in_house_security (yes/no/Not found), evidence (one sentence), and source_url, with the instruction "Do not guess, infer, or use prior knowledge about the company." Rows returning "Not found" route to a human or a second enrichment. Rows with a confident answer and no source are the ones that poison a sequence.
The product-led vs. sales-led classifier keeps output just as narrow, allowing only "Sales-led," "Product-led," or "both" and requiring a confident answer before returning product-led.
We preview in Sandbox Mode and hand-read 50 rows before any Claygent column runs on a full table, because bad answers tend to hide in the long tail of thin websites and recent rebrands. Each run costs an Action plus data credits, so the hand-read is also the cheapest place to catch a bad prompt.
Workflow 4: Score, tier, and route to every channel from one table
For allbound coordination, one scored table drives outbound, LinkedIn, and sales handoff. Understory's composite scoring model pulls from technographic, funding, and hiring-signal data sources, plus Apify for public-record scraping. The employee band awards 5 points above 300 employees, 3 above 100, and 1 above 50. Employee size is the smallest component; funding, tech-stack, and hiring signals carry most of the points. The composite is the sum, and accounts at 40 or above are Tier 1, while those at 20 or above are Tier 2.
Routing follows the tier field:
- Tier 1: Send the account to Instantly for email or HeyReach for LinkedIn outreach, and add it to a LinkedIn matched audience. In Instantly, map the validated work email column, never the raw one. HeyReach adds a lead to a campaign from a profile URL.
- Tier 2: Add the account to a LinkedIn matched audience only, through Clay Ads. LinkedIn won't serve a matched audience until it reaches the platform's minimum match threshold.
- Tier 3: Send the account to nurture with no prospecting.
- CRM handoff: Write the score, tier, and strongest signal to CRM custom fields keyed on each record's ID. In HubSpot, turn on the setting that skips blank values so a failed lookup never overwrites a field that's already populated.
We route only from the tier field, never from a rep's private spreadsheet.
CRM integrations and webhooks need Clay's Growth plan or higher. Inside Audiences, write-back works for both Salesforce and HubSpot; outside Audiences, write scores back through the Update action keyed on the record ID.
On our accounts, the same Tier 1 list feeds the Instantly sequence and the LinkedIn matched audience, so the ad a buyer sees and the email they get make the same pitch, and you can trace a booked meeting back to the score.
What we tell clients upfront
We set three expectations before a build starts:
- Credit spend needs an owner: Credit spend is hard to forecast, and the credit system can get messy. Clay offers Credit Spike Alerts and Credit Budgets, and bringing your own provider keys lowers Data Credit cost, but someone still has to watch the meter. On our accounts, that someone is us.
- Compliance still applies: UK GDPR applies in a business context, and the right to object to direct marketing is absolute. Objectors go on a suppression list rather than getting deleted. Under Clay's DPA, your company is the controller for the personal data you bring into Clay. For data sourced from Clay's own database, you and Clay are independent controllers. That means the legitimate-interest assessment is yours to document before you process the data.
- Channel mix follows buyer behavior: Some buyer groups rarely answer cold email. When a client's buyers ignore it, we shift Tier 1 weight to LinkedIn through HeyReach and say so before kickoff.
These constraints shape the workflow before credits are spent or campaigns launch.
Turn your Clay ICP into pipeline with Understory
If another Clay partner already runs your data, we can slot in alongside them. What we add is the rest of the loop: the same scored table feeding outbound marketing strategies, LinkedIn ads, and sales handoff, with one team watching credits, deliverability, and revenue attribution. We built Yofi's outbound system this way, generating so many qualified leads their sales team couldn't work through them all.
If you're coordinating a data vendor, an outbound shop, and a paid-media specialist who never see each other's lists, we take the coordination off your plate so one team owns the list, the sequence, and the ads.
Book a strategy call, and we'll walk through how your ICP should look inside Clay.
Related Articles

Qualified pipeline, handled
Signal-based outbound that fills the funnel while your team closes.





