FlowRunner
PricingContact
Theme
Start Free

Push records into Clay for GTM enrichment. Agents post leads, signups, and CRM contacts as JSON rows to a table's webhook source so Clay's enrichment columns run against each record, with a generic passthrough for any other Clay endpoint.

2 actions API key available
Clay website ↗ Platform Documentation ↗ Capability data verified 2026-07-28
A new signup or inbound lead lands in the CRM
The agent assembles the record as a single JSON row: email, name, company domain, source
The flow's dedup memory confirms this domain has not already been pushed to the enrichment table this quarter
On bulk runs, the RevOps owner reviews the batch summary before rows start consuming enrichment credits
Push Record To Table posts the row to the Clay table's webhook source
Clay's enrichment columns run; the enriched output arrives back through Clay's own destinations
Net-new enriched records post to the sales channel with the fields that qualify them

What This Integration Enables

Clay is where GTM teams compose waterfall enrichment: one row goes in, and a stack of data providers fills in emails, firmographics, and social profiles column by column. The catch is that Clay is webhook-first, so everything depends on getting clean rows to the table's webhook URL at the right moment. That delivery job is what FlowRunner does. Agents post leads, signups, and CRM contacts as JSON rows the moment they appear, shape the keys so Clay maps them to columns cleanly, and route to different tables per use case through per-call URL overrides. - Push new leads and signups into an enrichment table the minute they are captured - Sync contacts and companies from a CRM or [Google Sheets](/integrations/google-sheets) into Clay for waterfall enrichment - Pre-enrich with [Apollo.io](/integrations/apollo-io) and hand the partially filled row to Clay for the remaining columns - Route different record types to different tables without reconfiguring anything - Reach any other Clay-provided HTTP URL through the generic passthrough when a workflow needs it - Stamp every pushed row with its source system and timestamp, so the table can always answer where a record came from FlowRunner's role is the orchestration around the push: deduping before rows hit the table, sequencing enrichment sources, and gating bulk runs, because in Clay every arriving row starts a chain of paid lookups. The shape of the row matters more than it looks. Clay maps incoming JSON keys to table columns, so an agent that sends consistent, well-named keys, email, first_name, company_domain, source, every time gives the table a stable schema to enrich against. Agents that normalize upstream data before the push, lowercasing domains, splitting full names, stamping the source system, save the downstream columns from cleaning up after them. That normalization is workflow logic, and it belongs in the orchestration layer, not in a spreadsheet formula someone maintains by hand.

Without FlowRunner

Enrichment is a CSV shuttle Leads get exported, uploaded to Clay, enriched, downloaded, and re-imported by hand
New signups wait for the batch The Tuesday upload means Monday's hot signup gets researched Thursday
Credits burn on duplicates The same companies get re-enriched every upload because nobody dedupes the CSV

With FlowRunner

Records flow in as they arrive Signups, form fills, and CRM contacts post to the table's webhook the minute they exist
Enrichment keeps pace with intent The row is enriched while the lead still remembers filling out your form
Every credit is spent once Flows dedupe before the push, and bulk runs get a human look before the meter starts

Use Case Scenarios

Signup to enriched record before the demo request cools

A product signup fires from the app. The agent shapes the row, email, name, company domain, plan, signup source, and calls Push Record To Table against the PLG-leads table's webhook. Clay's columns run the waterfall: verified email, headcount, funding, tech stack. When the enriched record flows out Clay's destination side into [HubSpot](/integrations/hubspot), the agent checks Search Contacts for duplicates, creates net-new contacts, and posts qualified ones to [Slack](/integrations/slack). Sales calls a lead that was a bare email address an hour ago.

The spreadsheet that stops being uploaded

The SDR team keeps a prospect list in [Google Sheets](/integrations/google-sheets). A scheduled flow finds rows added since the last run, dedupes them against the flow's own memory of previously pushed domains, and pushes each as a row to the prospecting table. The Tuesday CSV ritual disappears, and so does the double-enrichment of companies that were already in the table.

Two tables, two purposes, one flow

Inbound leads need contact-level enrichment; target accounts need firmographic depth. The same flow routes by record type: person-shaped records go to the contacts table's webhook, account-shaped records go to the accounts table via the Webhook URL Override, and one partner-supplied endpoint gets hit through Send To Clay Endpoint because it expects a PUT. One orchestration, three destinations, no service reconfiguration.

Human-in-Loop Highlight

Push Record To Table looks like the most harmless action imaginable, one JSON row over a webhook, but every row that lands in a Clay table sets the enrichment waterfall running, and waterfall providers bill by the lookup. Point a bulk flow at the wrong sheet tab and the agent will faithfully feed 2,000 stale records into a table where each one triggers the full column stack, spending the month's enrichment budget on companies the team disqualified in March. So FlowRunner treats volume as the trigger for review: single records flow straight through, but any batch beyond the flow's threshold stops and presents its docket first, source list, row count, sample records, which table. The RevOps owner glances, catches that the "new prospects" tab still contains the old import, and redirects. Send To Clay Endpoint sits behind the same judgment for a different reason: a generic passthrough that speaks PUT, PATCH, and DELETE should never improvise against a URL an agent was not explicitly handed.

Agent processes routinely
Detects exception requiring judgment
Clear match Continues automatically
Ambiguous Routes to human via preferred channel
Human decides
Agent resumes with decision

Agent Capabilities

2 actions

Tables

1
  • Push Record To Table Pushes a single record into a Clay table by POSTing a JSON body to the table's webhook source URL, Clay's primary and most reliable ingestion path. The object's keys become fields Clay maps to columns, and the table's enrichment columns run against each arriving row. Uses the configured webhook URL unless a per-call override targets a different table.

Advanced

1
  • Send To Clay Endpoint Sends a request to any Clay HTTP endpoint URL and returns the raw response, with a choice of POST, GET, PUT, PATCH, or DELETE, plus optional JSON body and query parameters. The escape hatch for webhook sources and custom Clay URLs the primary action does not cover, used deliberately and never pointed anywhere an agent guessed.

Frequently Asked Questions

What can FlowRunner do with Clay?

FlowRunner agents can run Push Record To Table and Send To Clay Endpoint in Clay.

Does connecting Clay to FlowRunner require OAuth?

No. Clay connects to FlowRunner with an API key, no OAuth flow required.

Can Clay trigger a FlowRunner workflow automatically?

Clay doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

Start building with Clay

$100 in credits. No card required. Connect in minutes.