Clay GTM Engine · Table-by-Table · Walkthrough for Naveen

One funnel, wired in Clay, that ends in a ready-set-go contact list.

This is the map I built. It starts as a wide TAM funnel and narrows through a stack of tables that each filter harder than the last, so the last table isn't a guess. It's the people who own the motion, each behind a validation check and a human approval gate before anything sends.

6 tables live in the GTM Engine workbook 32 parent accounts scored 137 buying-committee contacts · ~106 validated emails ~204 of the 5,000-credit allocation used Nothing sent · everything on HOLD
00 · How to think about it

The whole thing is one funnel that filters itself

Before the individual tables, here's the shape. Clay's power isn't any single table. It's that each table takes the output of the one before it and narrows it, eight hops deep, until what's left is only the contacts that survived every filter. A person doesn't hand-build a list. The engine surfaces it and keeps it current.

What I'd say

The way to think about Clay is the tables feeding each other. You start with a big funnel, the whole TAM for a motion. I rate, tier, and grade every account on how ready it is for us to reach out. The A and B accounts flow into the next table, which filters them further. You take a column of results from that table, feed it into the next, and that happens hop after hop depending on the motion, until you get to the final contacts.

So when Nate opens that last list, the argument is about weights, not names. They've been filtered enough times that we know they own the Stars portion of the business at that account, they're in our TAM, and the send gate only passes rows with a validated email. That list is ready, set, go, instead of him searching LinkedIn, building a Sales Nav list, guessing at emails, and only then thinking about a message.

01 · Where it stands today

What's actually standing, stated plainly

This is a head start, not a finished product. The core of the engine is built and validated on the Star Ratings new-logo motion. The outer layers are designed and next to stand up. Nothing has touched a prospect.

6
tables live in the GTM Engine workbook
32
Tier A+B parent accounts scored and graded
137
buying-committee contacts, ~106 with a validated email
~204
of the 5,000-credit allocation used to get here
Everything sits behind the HOLD gate. Every send-ready row is unchecked. Nothing goes out until a human approves it and until we've ratified scoring, ICP, and what "engine-sourced" means together.
What I'd say

I want to be precise about the state. Six tables are live: Accounts, Contacts, the CMS source, and three reference tables. All 137 contacts have been through ZeroBounce; around 106 carry a deliverable email, and the rest stay visible but can't pass the send gate. The signal automation, the delivery sync, and the reply loop are designed and specced, next to stand up. And to get all of this to where it is cost just over 200 of the 5,000-credit allocation, because the guardrails stop it from spending on anything out of window.

02 · The layer map

Sources to worklist, eight hops down

Each rung is a Clay table. Each arrow is a real column, a write or a lookup, that carries rows into the next table only if they pass that table's filter. The funnel narrows on purpose.

L0
SourcesCMS Stars file · install base · signal feeds→ writes qualifying rows to Accounts
L1
Accounts (Master)scored · enriched · graded→ pushes accounts above the grade line to Contacts
L2
SignalsStars + back-office intent triggers→ writes intent + top signal back to Accounts
L3
Contacts (Buying Committee)right personas · verified email→ feeds Message Gen + Send Queue
L4
Message Gen + reference tablespersonalized copy, on approved claims only→ writes drafts to Send Queue
L5
Send Queuecritic gate + human approval→ approved rows only pass
L6
Outreach Sync + Deliverabilityhands off to sequencer + Salesforce→ blocked unless inbox health is green
L7
Reply + Attributionreplies and meetings written back→ lights up the funnel dashboard
L8
AE Worklistwho to work today, per repthe human-facing end of the engine
What I'd say

Eight hops, and every arrow is a column doing the carrying. A row only moves to the next table if it clears that table's filter. That's why the bottom is narrow and trustworthy instead of wide and noisy.

03 · Table by table

Why each table exists and what it hands off

Click any layer to open its detail: the purpose, what feeds it, what it writes to, and the columns that do the work. Turn on the presenter script above for the line I'd actually say on each.

LIVEBuilt, validated, running on the Star Ratings motion today.
STAGEDDesigned and specced, held behind a go-live gate on purpose. The gate is named on each card. This is measurement before volume, not unfinished work.
Why not all live already: the staged layers can't be flipped before we align. Salesforce attribution fields depend on the integration ticket this meeting exists to scope. The sender stays off until deliverability is warm, weeks of runway. Reply and attribution can't produce data until sends flow. Signal monitoring waits on the credit plan, contacts before monitoring spend. And scoring weights and the back-office ICP are gated on your read and Scott's, which is the point of the "Your read" section below. Turning them on before that would invert the engine's own rule.
L0
Sources · CMS Import · Install-Base Import
The raw material · kept separate from the live list
CMS LIVE · 307 rows

Source tables land the raw universe so a re-import never clobbers enrichment downstream. The CMS table is live: the public 2026 Star Ratings universe, filtered to the plans that are actually in window, below 4.0 stars. The customer-exclusion wire is next, pending your flagged customer file, so the same filter can also drop anyone who's already ours. The Install-Base import is designed, not built; it waits on Salesforce access and will seed the back-office motion. Only rows that pass the window filter get written up into Accounts.

Feeds from: CMS public file · Salesforce accounts (next)Writes to: Accounts (only if in-window)
key columns → contract_id · company_name · qbp_avg_stars · in_window filter · customer_exclude (next, off your flagged file)
What I'd say

This is the top of the funnel. I keep the raw CMS file in its own table so re-importing October's release never wipes the work we did on the live accounts. The window filter means we only ever pay to enrich a plan that's genuinely a target. The piece I'm holding for your flagged customer file is the exclusion wire, so the filter also drops anyone who's already ours, and that's the same gate holding Wave 1.

L1
Accounts (Master) · the Golden List
Scored, enriched, graded, signal-aware
LIVE · 32 parents

This is the hub. Every account gets a fit score, an intent score, and a letter grade from those two. Grade is the gate: only accounts above the grade line push down into Contacts, and where that line sits is one of the dials we set together. This is where "who's worth our breath" gets decided, and it's config-driven, not hardcoded in.

Feeds from: L0 sources + write-back from SignalsWrites to: Contacts (only above the grade line)
key columns → fit_score · intent_score · grade · top_signal · qbp_avg_stars · vertical · last_refreshed
What I'd say

This is the funnel's first real narrowing. I rate and tier every account on how ready it is, and only the grades above the line earn a push to the contact layer. The scoring weights and where that line sits are the things I'd most want your read on, because that's the judgment call that shapes everything below it.

L2
Signals · Stars & Back Office
Intent monitoring that writes back into Accounts · gated on the credit plan
DESIGNED · next to stand up

This is what keeps the list alive instead of a dead snapshot. Each signal is one column that fires a point value when a trigger hits: Stars language in an SEC filing, an earnings-call mention, a new quality leader, a claims backlog. Those points flow back into the Accounts intent score and can lift an account's grade or, for the strongest triggers, fire it straight toward outreach. It's also what removes accounts that fixed their own Stars and don't need us anymore.

Feeds from: Accounts list + live web/API columnsWrites to: Accounts (intent_score, top_signal)
key columns → one point-valued column per signal · signal_fired_date · tier (1 fires / 2 raises priority)
What I'd say

This is the "why now" engine. It's designed and specced, and it's the layer that mirrors what our own product does, real-time signals triggering action. It's also self-cleaning: when a plan gets itself to four stars, Clay sees it and drops them off the list, so we're never reaching out to someone who no longer has the problem.

L3
Contacts (Buying Committee)
People, linked to accounts, carrying the attribution tags
LIVE · 137 rows · validated

This is the payoff table and the one that's most complete. Accounts push in, then a people-find pulls the right personas by title, a persona-key formula classifies each into the buying committee, and an email waterfall finds an address that ZeroBounce then validates. Anything without a valid mailbox can't pass the send gate. Three tags get stamped at creation and never change: engine-sourced, source motion, and sourced date. Those three are how we'll prove the engine's contribution later. Honest state: all 137 rows have been through ZeroBounce on the canonical email field; around 106 carry a deliverable email, and the invalid or email-less rows stay visible but gated.

Feeds from: Accounts (graded push)Writes to: Message Gen + Send Queue (valid email only)
key columns → persona_key · email + email_status · gtm_engine_sourced · source_motion · sourced_date · reply_status
What I'd say

This is the ready-set-go list. 137 contacts across the eligible Tier A and B parents, personas matched, and around 106 with an email we validated through ZeroBounce for under fourteen credits total. Invalid ones stay visible but the gate won't let them send. And every row carries the tags that let us build a shared scoreboard on what the engine actually surfaced.

L4
Message Gen + reference tables
Personalized copy that can only cite approved claims
REFERENCE LIVE · gen next

Message Gen writes a personalized variant per contact from the account's why-now and the right product angle. It's fenced by small reference tables: a Verified Metrics library so the copy can only use approved numbers, a Product-Angle map that routes a title to Queue Optimizer or Back Office Optimizer, and the locked ICP rubric. Those three are built; a fourth, the variant library for testing, comes with the generation column. That column is the next to wire, and the deeper personalization I'd run through Claude, not templates in Clay.

Feeds from: Contacts + account why-now + angleReads: Verified Metrics · Product-Angle · ICP · Variants (next)Writes to: Send Queue
key columns → variant copy per persona · variant_id · tone/persona rubric · claims pulled by lookup
What I'd say

Clay's job here is to surface accurate people and the why-now. The tailored writing lives in Claude, and the reference tables are the guardrail that keeps an unapproved number from ever reaching a payer. I'll show the full split two sections down, it answers the messaging-logic question from our call.

L5
Send Queue · the gate
Critic checks + human approval · the single egress
LIVE · all rows HOLD

Nothing sends from Clay directly. Every row that reaches here runs a critic check first. Today the critic checks email validity; the scope, claims, and length checks land with Message Gen. Then it waits on a human checkbox. That gate is built and every single row is held. This is the "human before send" rule made physical.

Feeds from: Contacts + Message GenWrites to: Outreach Sync (approved only)
key columns → critic_email_valid · critic_status · human_approved · send_ready (HOLD until checked)
What I'd say

This is the safety layer, and it's live. The critic catches the mechanical stuff, and then it physically cannot move without a person checking the box. Every row is held right now. That's deliberate, measurement and approval before any volume.

L6
Outreach Sync + Deliverability
Hand-off to the sequencer and Salesforce · gated on inbox health
DESIGNED · sender OFF

On approval, this hands the verified email and approved copy to Nate's sequencer and writes the source tags onto the Salesforce record. A parallel deliverability monitor watches warmup, inbox rotation, and bounce rate, and it gates the whole thing: the sender stays off until inbox health is green. This is the layer that stops spray-and-burn.

Feeds from: Send Queue (approved)Writes to: sequencer + Salesforce tags
key columns → webhook to sequencer · SF write (engine_sourced, motion, date) · domain-health gate
What I'd say

This is the tie to the Salesforce conversation. When Nate approves, the contact and its source tags land in Salesforce automatically, so there's no gap between what he's working and what leadership sees. And the send webhook stays off until deliverability is green, so we protect the domain from day one.

L7
Reply + Attribution
Closes the loop · the shared scoreboard · gated on sends flowing
DESIGNED

A reverse webhook writes reply and meeting status back onto the contact row, and the attribution table reads those tags to compute the two-motion funnel: enriched, sent, opened, replied, qualified, met. Because the source tags were stamped at creation, we can see what the engine surfaced without arguing about it after the fact. I'd frame this as a shared scoreboard we define together, not a credit claim.

Feeds from: sequencer / CRM reply dataWrites to: Contacts.reply_status + dashboards
key columns → reply_status (none/reply/qualified/meeting) · funnel counts · engine-sourced credit line
What I'd say

This is how we measure ourselves honestly. Surfaced and realized stay separate, never blended. I'd want us to co-define what "engine-sourced" means so it's a shared scoreboard, not me claiming credit. The tagging is already in place to make that clean.

L8
AE Worklist
The human-facing end · who to work today · gated on live signals + territory rules
DESIGNED

The last table turns everything above it into a daily view per rep: the A and B accounts with a fresh signal, their committee, the why-now line, and the suggested product angle, filtered to that rep's territory. This is what a seller opens each morning. It's the point of the whole engine, a human working a short, sharp list instead of researching from scratch.

Feeds from: Contacts + Accounts + territory rulesWrites to: the rep's daily view
key columns → account + committee · why_now · product_angle · owner/territory filter
What I'd say

Everything upstream exists to make this one screen good. Nate opens it and works a filtered, current list with the why-now already written. The research part is done for him, and that's the time we're buying back.

04 · How they connect

Three column types do all the connective work

When I say a table "feeds" another, this is the actual mechanism. There's no magic, just three kinds of columns chained together, hop after hop, and that chaining is where the depth comes from.

SEND TABLE DATA

The forward flow

Sends rows from one table into the next, filtered first so only the right rows go, only Grade A accounts, only valid-email contacts. This is the arrow that narrows the funnel at each hop.

LOOKUP

The write-back & reference

Reads a value from another table by a join key. It's how a signal writes intent back onto an account, and how Message Gen pulls only an approved stat from the Verified Metrics table.

CONDITIONAL RUN

The credit brake

Gates every enrichment: only-run-if-empty, only-if-in-window, only-if-in-ICP. This is what makes it cheap enough to run continuously instead of burning the budget in a week.

What I'd say

Chain those three and you get the depth. Accounts writes into Contacts if the grade clears, Contacts writes into the Send Queue if the email's valid, the Queue writes to sync if a human approved, and the reply comes back through a lookup. Clay only flows one direction, so any true write-back to source data goes through Salesforce or a webhook, not a table pointing at itself.

05 · Clay vs Claude

Facts run in Clay, words run in Claude

This is the design decision behind the whole messaging layer, and the answer to the question from our call. Clay never writes a sentence a prospect reads. Claude never touches a row of data directly. Everything they exchange passes through the Contacts table, where it stays visible, gated, and auditable.

Clay · the data layer

Finds, scores, and moves rows

Deterministic, per-row work that runs the same way every time and leaves a value in a column you can audit.

  • Sourcing: the CMS universe, persona pulls, the email waterfall, ZeroBounce validation.
  • Scoring and grading: fit, intent, tier. Formulas with dials we set, not judgment made up per row.
  • The gates: send_ready, human_approved, bdr_claimed, run conditions.
  • Plumbing: sequencer sync and, once the ticket lands, the Salesforce tag writes.
Claude · the language layer

Reads context, writes copy, weighs calls

Judgment work, packaged as skills that run the same for whoever invokes them. Nate runs the drafting himself; nothing routes through me. Each skill takes the row Clay assembled and turns it into something a person would actually send, fenced by the Value Repository so only approved claims appear.

  • The outreach copy: first touches, follow-ups, breakups, per contact, in the rep's voice.
  • Reply and objection handling: reasoned responses, not templates.
  • Briefs and prep: strike plans, call prep, the messaging one-pagers.
  • The claims gate: every number is checked against the verified-claims file before it ships.
What I'd say

The reason I split it this way instead of cramming the messaging into a Clay system prompt: an AI column in Clay is a black box that burns credits per row and can't be argued with. Keeping the writing in Claude means the copy logic is a document we can read, edit, and version together, the claims discipline is enforced in one place, and Clay stays cheap because it only does the deterministic work.

And the part I want to be unmissable: this is not a me-in-the-loop system. The skills are tools, and they write the same whether I invoke them or Nate does. He drafts, handles objections, and preps calls with the same tools I built them with. My job is keeping the tools sharp and the claims file current, not ghostwriting sends. If I'm out for a week, the engine doesn't slow down.

06 · The parts leadership asked about

Credits under control, Salesforce in the loop

Two things from our call worth making concrete: the spend guardrails, and why connecting to Salesforce closes the gap between what Nate works and what leadership sees.

Credit guardrails

It warns before it spends

~204

credits used of the 5,000-credit allocation to build and validate the whole Stars list.

  • Every enrichment is set to run only on empty rows, so nothing double-spends.
  • Conditional runs stop it enriching anything out of window or out of ICP.
  • It flags the estimate before a run, "this will cost 300 to 400 credits, yes or no," and warns before it nears the cap.
  • An append-only ledger tracks every spend by motion, so renewal is a receipts story.
Salesforce integration

Why everything should talk

The point of wiring Clay to Salesforce is that once a contact is surfaced, it becomes an account and contact in Salesforce automatically, with source tags attached. No one re-creates it. No gap between Nate's work and what execs can see.

  • Three attribution fields on the record: engine-sourced, source motion, sourced date.
  • They're stamped at creation and written to Salesforce on approval.
  • First build step is confirming those fields exist in Salesforce, that's the scoping ticket to nail down with the team.
  • Keeps the shared scoreboard honest without anyone doing manual data entry.
What I'd say

On credits, the guardrails are the reason I could build this whole thing for just over 200 of the 5,000 allocated. It won't run away because it asks before it spends and refuses to enrich anything out of window. On Salesforce, the case for getting everything talking is exactly what Cheryl said, it makes it easier for everyone when leadership asks how things are going. The tags flow in on their own, so there's never a gap between what Nate's doing and what the execs can see.

07 · Threads to shape together

Where I'd want your read

The engine is built to run on dials we set together, not on my assumptions. Three of those dials are worth a few minutes today.

01
The scoring weights on Accounts
Fit and intent are config, not hardcoded. What mix of Stars gap, contact-center scale, and persona presence should decide an A versus a B? That judgment shapes everything the funnel surfaces below it.
02
What "engine-sourced" means
I'd rather co-define the scoreboard than defend a credit claim. Where does the engine get credit, at the surfaced contact, the qualified reply, or the meeting? Defining it now keeps attribution clean and shared.
03
The back-office ICP, with Scott Kemme
The Stars committee is proven. The back-office buyer is still a hypothesis. I'd treat the first contacts there as ICP discovery, not volume, and I'd want Scott in that conversation before we source at scale.
What I'd say

None of these block progress, the Stars motion is ready to pace on today. But these are the three dials I'd rather set with you than guess at, because they're the judgment calls, and getting them right early is what keeps the whole thing pointed at the right people.