Skip to main content
There is no native app in any of these tools yet, and none is needed. All four speak plain HTTP, which is all the public API and webhooks need. Set up once:
1

Create an API key

Settings → API & webhooks → API keys. Give it the smallest role that works — member for most recipes. Copy it now; it is shown once.
2

Store it as a connection

In Zapier use a Webhooks by Zapier action with a header; in Make an HTTP module; in n8n a Header Auth credential; in Clay an HTTP API column. Never paste the key into a step your whole team can read.
3

Add an idempotency key to every write

All four tools retry on timeouts. Send Idempotency-Key with a value from your own data — a row id plus the step name works well — and a retry can never act twice.

1. New interested reply → Slack or your CRM

The one everyone builds first.
  • Trigger: a webhook subscribed to message.classified.
  • Filter: data.intent is interested.
  • Lookup: GET /v1/leads/{data.lead_id} for the name, company and LinkedIn URL.
  • Action: post to Slack, or create the contact or deal in your CRM.
Verify x-signature before trusting the payload — every tool can do an HMAC-SHA256 check — and use x-delivery-id to drop duplicates.
For a full CRM relationship rather than a one-way notification, use the native CRM sync instead. This recipe is for anything it doesn’t cover.

2. New row in a sheet → create the lead → enrol

  • Trigger: new row in Google Sheets, Airtable or a Clay table.
  • Step 1: POST /v1/leads with the LinkedIn URL or email. Existing people are updated, not duplicated, and fields you leave out are never blanked.
  • Step 2: POST /v1/enrollments/preview with the sequence and the new lead’s id.
  • Step 3: if eligible_ids is not empty, POST /v1/enrollments with "confirm": true.
Keeping the preview step means a suppressed or recently-replied lead is caught before anything is sent, exactly as in the app.

3. Found an email elsewhere → fill it on the lead

  • Trigger: your enrichment tool finds a work email (Clay’s waterfall, for example).
  • Action: PATCH /v1/leads/{id} with email_work.
The email is only written when the field is empty. A lead who already has a verified address keeps it, and the response lists the field under unchanged_fields so your flow can tell the difference.

4. Meeting booked → CRM deal

  • Trigger: a webhook subscribed to meeting.booked.
  • Payload: lead_id, sender_id, provider, starts_at, booking_id.
  • Action: create the deal, and optionally GET /v1/leads/{id}/timeline for the whole conversation history to attach to it.

Tool notes

Longer step-by-step versions of each recipe, with the exact JSON bodies, ship with the API reference.