Skip to main content
Integration

Connecting Expandi to Clay: setup, sync, and gotchas in 2026

August 2, 20266 min read

Clay enriches leads, Expandi runs LinkedIn outreach. Set them up via webhook in 2026 - field mapping, gotchas, and the 3 errors teams always hit first.

Expandi costs $99/month per LinkedIn seat. Clay starts at $149/month on the Starter plan. That's $250/month in infrastructure before you've sent a single message, and most teams misconfigure the webhook on the first try, burning their lead list on duplicate sends or null payloads. This guide covers the exact setup, field mapping, and three errors you'll hit before it works.

By Rishabh Ambasta, Founder, Modern Inbound.

How the Expandi-Clay Integration Works

Clay builds and enriches your prospecting table. Expandi executes LinkedIn outreach on each lead. Data moves one direction: Clay pushes enriched rows to Expandi via webhook, queuing each lead into your connection request or message sequence. There's no native connector in Clay's library, so this runs via Clay's webhook action column hitting Expandi's REST API directly.

The data flow is straightforward: enriched Clay row fires a webhook POST to Expandi's API endpoint, the lead appears in your campaign queue, and Expandi executes the connection request or message sequence. Sync is row-by-row and near-real-time, not batch. Errors surface one row at a time, which makes them easier to isolate once you know what to look for.

What transfers: LinkedIn profile URL, first name, last name, company name, and up to 10 custom variables for message personalization. What doesn't transfer: email addresses (Expandi doesn't use them for LinkedIn outreach), phone numbers, or engagement history from other tools. This is a LinkedIn-only handoff.

Step-by-Step Setup: Clay Webhook to Expandi API

The setup takes about 20 minutes if you have your Expandi API key and campaign ID ready. Most of the time is spent finding Expandi's API documentation, which isn't prominently surfaced in their UI. You don't need Zapier or Make as middleware - the direct webhook connection is faster, cheaper, and has fewer points of failure.

  1. Get your Expandi API key. Go to Settings > Integrations > API inside Expandi. Generate a new key and copy it for use as a Bearer token in every request header.
  2. Find your target campaign ID. Open the campaign in Expandi. The numeric ID appears in the URL: expandi.io/campaigns/[ID]/overview.
  3. Add a webhook action column in Clay. In your lead table, click the + column button, choose "Send to Webhook," and set the method to POST.
  4. Configure the endpoint and auth header. URL: https://api.expandi.io/api/lead. Header: Authorization: Bearer [your-api-key]. Content-Type: application/json.
  5. Map the required fields in the webhook body. At minimum: linkedin_url, first_name, last_name, company_name, and campaign_id. Add custom_variable_1 through custom_variable_10 for personalization tokens.
  6. Test with one row before running the full table. Check your Expandi campaign's leads section to confirm the entry appeared with the correct name and LinkedIn URL.

Field Mapping: Clay Columns to Expandi API Fields

Expandi's API is strict about field names. Clay column labels don't match Expandi's expected field names by default, and mismatches fail silently - Expandi returns a 200 OK but treats unmapped fields as null. Your personalization tokens arrive empty and you don't know why. Here's the complete mapping.

Clay ColumnExpandi API FieldRequiredNotes
LinkedIn URLlinkedin_urlYesFull profile URL only; no Sales Navigator URLs or query strings
First Namefirst_nameYesUse Clay's enriched Person First Name output
Last Namelast_nameNoAvailable as {{last_name}} in Expandi message templates
Companycompany_nameNoMust be company_name exactly, not organization or employer
[hardcoded]campaign_idYesHardcode this in the webhook body, not a table column
Any custom columncustom_variable_1 to _10NoExact naming required; maps to {{custom_variable_1}} in templates

The linkedin_url field breaks most often. Clay's LinkedIn enrichment returns https://www.linkedin.com/in/handle, which Expandi accepts. Problems appear when URLs come from other enrichment sources: Apollo URLs sometimes append query strings (?originalSubdomain=en), and Sales Navigator URLs (linkedin.com/sales/...) are rejected entirely. Add a formula column to strip query strings, then map the webhook to that clean column instead of the raw enrichment output.

3 Sync Errors You'll Hit (and How to Fix Them)

These aren't edge cases. They're close to universal for teams running this integration the first time. None of them are bugs in Clay or Expandi - they're configuration gaps neither platform documents prominently. Each is fixable in under 10 minutes once you know what to look for.

Error 1: Duplicate lead rejection with silent 200 OK. If a LinkedIn URL already exists anywhere in your Expandi workspace, the API returns a 200 OK but doesn't add the lead. Clay marks the row as successful. The lead never appears in your campaign. Fix: add a deduplication filter in Clay before the webhook fires, removing URLs already present in your Expandi leads export.

Error 2: LinkedIn URL format rejected. Apollo enrichment via Clay sometimes returns URLs with query strings appended (?originalSubdomain=en). Expandi rejects these silently. Fix: add a Clay formula column using SPLIT or SUBSTITUTE to extract just the base profile URL, then map the webhook to that clean column.

Error 3: Webhook fires on empty linkedin_url rows. If you trigger the webhook column on the same run that's still populating LinkedIn URLs, some rows fire with null values. Expandi returns a 400 for null required fields. Fix: run enrichment first, filter your table to rows where linkedin_url is not empty, then trigger the webhook as a separate action on that filtered view.

Which Plans Support This Integration

The webhook connection works on any paid Expandi plan and Clay's Starter plan or above. Clay's free tier doesn't include webhook action columns. Minimum realistic budget for one LinkedIn account is $250/month, covering about 2,000 Clay enrichment actions per month - enough for roughly 500 leads with a few enrichment columns per run.

ToolMinimum PlanMonthly CostKey Constraint
ExpandiBusiness$99/LinkedIn seatOne account per seat; new accounts need 2-4 week warm-up
ClayStarter$149/month2,000 credits/month; each enrichment action uses 1-3 credits
CombinedBoth above~$250/monthScales with seat count and enrichment volume

The honest take on Zapier: skip it for this connection. It adds $50-100/month in task charges at volume, introduces an extra failure point between Clay and Expandi, and makes debugging harder because errors can originate in three systems instead of two. Direct webhook is faster to set up and simpler to maintain. The only valid case for Zapier is bidirectional sync - pushing Expandi reply events back into Clay - which most teams don't need at the start.

If you'd rather not manage this setup yourself, that's the kind of outbound infrastructure Modern Inbound handles for clients.

Too Busy to Run Outbound Yourself?

Modern Inbound handles research, infrastructure, warm-up, account lists, copy tests, sending, replies, and routing. The system has booked 2,700+ B2B meetings and influenced $20M+ in pipeline.

FAQ: Expandi and Clay Integration

Does Clay have a native Expandi integration?
No. As of 2026, Clay doesn't list Expandi as a native integration. The connection runs via Clay's webhook action column POSTing data to Expandi's API directly. It works reliably but requires manual field mapping and auth header configuration.
Can Expandi send data back to Clay?
Not natively. To get Expandi engagement data into Clay, you'd need Expandi's Zapier integration to catch webhook events and write them to a Clay inbound webhook. Most teams skip this step.
What happens when Expandi rejects a lead sent from Clay?
Expandi often returns a 200 OK even for rejected leads, especially duplicates. Clay logs the action as successful. Always verify by checking the Expandi campaign leads section directly after a test run, not just Clay's action column status log.
Do I need Zapier to connect Clay and Expandi?
No. Clay's webhook action column connects directly to Expandi's API. Zapier adds per-task costs, latency, and an extra failure point. Use direct webhook. Only add Zapier if you need Expandi reply events pushed back into Clay.
Rishabh Ambasta

Rishabh Ambasta

Founder of Modern Inbound

I've worked across SaaS outbound teams from $1M to $50M ARR and now run a boutique cold outreach agency. I've generated millions in pipeline through creative, low-conflict outbound systems.

Get the outbound breakdown.

Real campaigns we ran this month. Numbers, copy, what worked, what didn't. Drop your work email.

Any email works.

Ready to fill your pipeline?

We build cold outbound systems that book 20-30 qualified meetings per month. No long-term contracts.

Apply to work with us