Search Docs…

Search Docs…

Integrations

Setup Clay - Send Lead Attributes, Lead Status & LinkedIn Status

Outreach Magic + Clay Webhook – Send Lead Attributes, Lead Status & LinkedIn Status

Use Clay to push enriched lead, company, and workspace attributes directly into Outreach Magic – including:

  • Lead attributes (name, title, seniority, function, location)

  • Lead status + sentiment (e.g. Interested, Not a fit)

  • Tags (e.g. warm_lead, demo_no_show)

  • Workspace-level ICP and exclusion reasons

  • LinkedIn connection level per sender

This guide shows you how to use the Clay → Outreach Magic webhook:

POST https://webhooks.outreachmagic.io/clay?token={{YOUR_TOKEN}}

…with a JSON payload that tells Outreach Magic which lead/company/workspace fields to update.

When You Should Use This (and When You Don’t Need It)

You should use this Clay webhook if:

  • You want to send enrichment from Clay (Apollo, ZoomInfo, Clearbit, Lusha, etc.) into Outreach Magic

  • You want to set or override lead status and map it into Outreach Magic’s normalized status/sentiment

  • You want to maintain workspace-wide attributes like:

    • import_name

    • list_source

    • exclusion_reason

    • icp

  • You want to set LinkedIn connection level for a specific sender → prospect pair

You don’t need this if you only rely on tools like HeyReach, Prosp, Aimfox, etc. to send LinkedIn attributes; those platforms already push most LinkedIn profile fields into Outreach Magic automatically.

Endpoint & Auth (Clay Webhook)

HTTP Method & URL

POST https://webhooks.outreachmagic.io/clay?token={{YOUR_TOKEN}}

Parameters

  • token (required, query): your Clay webhook token, generated inside Outreach Magic on the Clay integrations page.

Headers

  • content-type: application/json

No x-api-key header is required for this Clay-specific webhook. Authentication is handled via the token query parameter.

What This Webhook Does

Each request creates an internal update_attributes event in Outreach Magic.

That event can update:

Lead Attributes

Matched by:

  • lead_email

  • lead_linkedin_url

  • lead_sales_navigator_url

  • lead_linkedin_id

Include at least one of the lead identifier fields for a successful match.

Company Attributes

Matched by:

  • company_domain

  • company_linkedin_url

Workspace-Wide Attributes (Require workspace_id)

Applied across the workspace:

  • import_name

  • list_source

  • exclusion_reason

  • icp

  • tags

  • lead_status + derived fields (lead_status_status, lead_status_sentiment)

If you send tags / status / ICP / exclusion_reason, you must include workspace_id.

Minimal Example (Single Lead From Clay)

This is a simple Clay → Outreach Magic payload that:

  • identifies the lead by email

  • identifies the company by domain

  • tags the lead and sets a lead status

{
  "event_type": "update_attributes",
  "workspace_id": "656c1234567890abcdef0042",

  "lead_email": "[email protected]",
  "company_domain": "example.com",

  "tags": "warm_lead",
  "lead_status": "Interested"
}

Outreach Magic will:

  • Match the lead by lead_email

  • Match the company by company_domain

  • Normalize tags to lower_snake (e.g. warm_lead)

  • Use lead_status to infer lead_status_status and lead_status_sentiment if not explicitly provided

Full Example Payload – JSONC (Commented)

This version uses JSON with comments (jsonc) for documentation. In Clay, you must send pure JSON (no comments).

{
  "event_type": "update_attributes",            // required
  "workspace_id": "656c1234567890abcdef0042",  // required if you send tags/status/ICPs

  // Workspace-level attributes
  "import_name": "q3_outreach_list",           // normalized to lowercase
  "list_source": "apollo",                     // freeform workspace source label
  "exclusion_reason": "bad_fit",               // lower_snake; requires workspace_id
  "icp": "YES",                                // uppercased; requires workspace_id

  // Tags & lead status
  "tags": "warm_lead, demo_no_show",           // list or comma string; lower_snake
  "lead_status": "Interested",                 // workspace lead_status.raw_string
  "lead_status_status": "attempted",           // optional; if missing, inferred from lead_status
  "lead_status_sentiment": "neutral",          // optional; if missing, inferred from lead_status

  // LinkedIn connection level
  // sender is required to set the linkedin_connection_level
  "sender": "https://www.linkedin.com/in/alice-outbound",
  "linkedin_connection_level": 1,              // 1, 2, or 3

  // Lead identifiers (include at least one)
  "lead_email": "[email protected]",
  "lead_linkedin_url": "https://linkedin.com/in/prospect",
  "lead_sales_navigator_url": "https://linkedin.com/sales/people/123",
  "lead_linkedin_id": "abc123",

  // Lead profile fields (enrichment)
  "lead_first_name": "Jane",
  "lead_last_name": "Doe",
  "lead_full_name": "Jane Doe",
  "lead_job_title": "CTO",
  "lead_seniority": "C-Level",
  "lead_function": "Engineering",
  "lead_linkedin_headline": "CTO @ ExampleCo",
  "lead_address": "123 Market St, SF, CA",
  "lead_country": "US",
  "linkedin_bio": "Short bio about Jane...",
  "lead_normalized_job_title": "chief_technology_officer",
  "lead_normalized_first_name": "jane",
  "lead_location": "San Francisco, CA",
  "lead_job_title_normalized": "cto",
  "lead_first_name_normalized": "jane",

  // Company fields
  "company_domain": "example.com",
  "company_linkedin_url": "https://linkedin.com/company/example",
  "company_name": "Example Inc.",
  "company_country": "US",
  "company_employee_range": "51-200",          // supports a range or string value
  "company_employee_count": "120",             // should be a number (string or numeric)
  "company_industry": "Software",
  "company_description": "SaaS platform",
  "company_website": "https://example.com",
  "company_address": "123 Market St, SF, CA",
  "company_annual_revenue_range": "10M-50M",
  "company_normalized_name": "example",
  "company_normalized_industry": "software"
}

Full Example – Pure JSON (Clay-Ready)

This is the same as above, but with comments removed and valid JSON that Clay can send directly:

{
  "event_type": "update_attributes",
  "workspace_id": "656c1234567890abcdef0042",
  "import_name": "q3_outreach_list",
  "list_source": "apollo",
  "exclusion_reason": "bad_fit",
  "icp": "YES",
  "tags": "warm_lead, demo_no_show",
  "lead_status": "Interested",
  "lead_status_status": "attempted",
  "lead_status_sentiment": "neutral",
  "sender": "https://www.linkedin.com/in/alice-outbound",
  "linkedin_connection_level": 1,
  "lead_email": "[email protected]",
  "lead_linkedin_url": "https://linkedin.com/in/prospect",
  "lead_sales_navigator_url": "https://linkedin.com/sales/people/123",
  "lead_linkedin_id": "abc123",
  "lead_first_name": "Jane",
  "lead_last_name": "Doe",
  "lead_full_name": "Jane Doe",
  "lead_job_title": "CTO",
  "lead_seniority": "C-Level",
  "lead_function": "Engineering",
  "lead_linkedin_headline": "CTO @ ExampleCo",
  "lead_address": "123 Market St, SF, CA",
  "lead_country": "US",
  "linkedin_bio": "Short bio about Jane...",
  "lead_normalized_job_title": "chief_technology_officer",
  "lead_normalized_first_name": "jane",
  "lead_location": "San Francisco, CA",
  "lead_job_title_normalized": "cto",
  "lead_first_name_normalized": "jane",
  "company_domain": "example.com",
  "company_linkedin_url": "https://linkedin.com/company/example",
  "company_name": "Example Inc.",
  "company_country": "US",
  "company_employee_range": "51-200",
  "company_employee_count": "120",
  "company_industry": "Software",
  "company_description": "SaaS platform",
  "company_website": "https://example.com",
  "company_address": "123 Market St, SF, CA",
  "company_annual_revenue_range": "10M-50M",
  "company_normalized_name": "example",
  "company_normalized_industry": "software"
}

Field Behavior & Normalization Rules

Use this as a quick reference when mapping Clay columns to Outreach Magic fields.

Core

  • event_type (required)

    • Must be "update_attributes" for this integration.

  • workspace_id (required when sending workspace-level fields)

    • Needed whenever you send:

      • tags

      • lead_status, lead_status_status, lead_status_sentiment

      • import_name, list_source, exclusion_reason, icp

Workspace-Level Fields

  • import_name

    • Normalized to lowercase.

    • Good for grouping lists, tests, or campaigns (e.g. q3_outreach_list).

  • list_source

    • Freeform string (e.g. apollo, zoominfo, inbound_webform).

  • exclusion_reason

    • Normalized to lower_snake_case.

    • Examples: bad_fit, competitor, existing_customer.

  • icp

    • Uppercased.

    • Can map to ICP labels you use internally (YES, ICP 1, ICP 2, etc.).

Tags & Lead Status

  • tags

    • Accepts either:

      • JSON array: ["warm_lead", "demo_no_show"], or

      • Comma-separated string: "warm_lead, demo no show".

    • Normalized to lowercase and spaces → underscores:

      • "Demo No Show"demo_no_show.

  • lead_status

    • Raw workspace string (e.g. "Interested", "Not a fit", "No response").

    • Used as the source of truth.

  • lead_status_status (optional)

    • Normalized status label (e.g. attempted, interested, not_interested, disqualified).

    • If omitted, Outreach Magic will infer it from lead_status.

  • lead_status_sentiment (optional)

    • High-level sentiment (positive, neutral, negative).

    • If omitted, Outreach Magic will infer it from lead_status.

LinkedIn Connection Level

  • To set connection level, you must send both:

    • sender: LinkedIn profile URL of your sender e.g. "https://www.linkedin.com/in/alice-outbound"

    • linkedin_connection_level: 1, 2, or 3

This lets Outreach Magic know how closely connected the sender is to the prospect on LinkedIn.

Lead Identification & Attributes

Identification (include at least one)

  • lead_email

  • lead_linkedin_url

  • lead_sales_navigator_url

  • lead_linkedin_id

Best practice: always include lead_email and one LinkedIn identifier when available.

Attributes

  • lead_first_name, lead_last_name, lead_full_name

  • lead_job_title

  • lead_seniority (e.g. C-Level, VP, Director, Manager)

  • lead_function (e.g. Engineering, Marketing, Sales)

  • lead_linkedin_headline

  • lead_address, lead_country, lead_location

  • linkedin_bio

  • Normalized overrides:

    • lead_normalized_job_title

    • lead_normalized_first_name

    • lead_job_title_normalized

    • lead_first_name_normalized

Company Identification & Attributes

Identification

  • company_domain

  • company_linkedin_url

Attributes

  • company_name

  • company_country

  • company_employee_range (e.g. "51-200", "201-500")

  • company_employee_count (numeric-ish string, e.g. "120")

  • company_industry

  • company_description

  • company_website

  • company_address

  • company_annual_revenue_range (e.g. "10M-50M")

  • Normalized fields:

    • company_normalized_name

    • company_normalized_industry

How to Set This Up in Clay (High-Level Steps)

Exact UI labels in Clay may evolve, but the flow is always: build table → add HTTP/Webhook step → map columns → send JSON.

  1. Get your Clay Webhook URL from Outreach Magic

    • In Outreach Magic, go to your Clay integrations page.

    • Generate or copy your Clay webhook token.

    • Your URL will look like:

      https://webhooks.outreachmagic.io/clay?token={{YOUR_TOKEN}}
  2. Prepare your Clay table

    • Make sure your table has the columns you want to send:

      • Email (for lead_email)

      • Company Domain (for company_domain)

      • Any enrichment fields (title, location, ICP labels, etc.)

      • Any status or tags you want to push.

  3. Add a Webhook / HTTP Request step in Clay

    • Choose method: POST.

    • URL: paste your Outreach Magic Clay webhook URL (with the token param).

    • Body type: JSON (raw).

  4. Map Clay columns to JSON body

    • Example mapping:

      • "lead_email": "{{Email}}"

      • "company_domain": "{{Company Domain}}"

      • "lead_status": "{{Lead Status}}"

      • "tags": "{{Tags}}" (either string or array)

      • "import_name": "q3_outreach_list"

      • "list_source": "clay_apollo_enrichment"

    • Ensure event_type is hard-coded to "update_attributes".

  5. Test with a small batch

    • Run the webhook for 1–5 rows.

    • Confirm in Outreach Magic that:

      • Leads are matched correctly.

      • Status, tags, ICP, and other fields are updated as expected.

Common Validation Issues

Here are some typical mistakes and how to avoid them:

  1. Missing event_type

    • ✅ Must be "update_attributes".

  2. Sending workspace-level fields without workspace_id

    • If you include any of: tags, import_name, list_source, exclusion_reason, icp, lead_status* → you must include workspace_id.

  3. No lead identifier

    • At least one of:

      • lead_email

      • lead_linkedin_url

      • lead_sales_navigator_url

      • lead_linkedin_id

    • Without these, Outreach Magic can’t know which lead to update.

  4. Invalid linkedin_connection_level

    • Must be 1, 2, or 3.

    • And you must provide sender with a valid LinkedIn profile URL.