Clay
Sales IntelligencePush 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.
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
With FlowRunner
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 Capabilities
2 actionsTables
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.