Webhook Destination Quick-Start Library

Last updated: May 18, 2026

While Unify's webhooks allow you to send data to any of your tools, we've built these pre-built config templates for common destinations. Copy the URL, method, auth, and body into your Webhook node, then customize the body fields to match your data.

Note: All examples assume sensible defaults. Adjust the body fields to whatever data you want to send.

👉 CRM

Attio

Use webhook to Attio when your team manages relationships in Attio and wants Unify-sourced prospects automatically created as people records without manual import.

  • URL: https://api.attio.com/v2/objects/people/records

  • Method: POST

  • Auth: Bearer Token (Workspace Settings → Developers; needs record_permission:read-write, object_configuration:read)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "data": {
    "values": {
      "email_addresses": ["{{ person.email }}"],
      "name": [{
        "first_name": "{{ person.first_name }}",
        "last_name": "{{ person.last_name }}"
      }]
    }
  }
}
  • Gotcha: For upserts, swap to PUT /records?matching_attribute=email_addresses. Rate limit: 25 writes/sec.

Pipedrive

Use webhook to Pipedrive when you want Unify prospects pushed directly into your Pipedrive pipeline as persons, ready for your sales reps to action without any copy-paste.

  • URL: https://{company_domain}.pipedrive.com/api/v1/persons

  • Method: POST

  • Auth: API Key (Header) — x-api-token header (found in Settings → Personal preferences → API)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "name": "{{ person.first_name }} {{ person.last_name }}",
  "email": [{"value": "{{ person.email }}", "primary": true}],
  "phone": [{"value": "{{ person.phone }}", "primary": true}]
}
  • Gotcha: URL requires your company subdomain. Email and phone are arrays of objects.

Salesforce

Use webhook to Salesforce when your revenue team works out of Salesforce and you want Unify-sourced leads created automatically so reps can pick them up in their existing workflow.

  • URL: https://{instance}.my.salesforce.com/services/data/v59.0/sobjects/Lead

  • Method: POST

  • Auth: Bearer Token (OAuth 2.0 — obtain a Connected App access token)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "FirstName": "{{ person.first_name }}",
  "LastName": "{{ person.last_name }}",
  "Email": "{{ person.email }}",
  "Company": "{{ company.name }}",
  "Title": "{{ person.title }}",
  "Phone": "{{ person.phone }}"
}
  • Gotcha: The instance URL is org-specific. Object type (Lead, Contact, Account) is in the URL path — swap it for the object you want.

HubSpot

Use webhook to HubSpot when you want contacts from Unify sequences to flow into HubSpot so marketing can enroll them in nurture workflows or reps can track engagement in one place.

  • URL: https://api.hubapi.com/crm/v3/objects/contacts

  • Method: POST

  • Auth: Bearer Token (Private App access token — create in Settings → Integrations → Private Apps with crm.objects.contacts.write scope)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "properties": {
    "email": "{{ person.email }}",
    "firstname": "{{ person.first_name }}",
    "lastname": "{{ person.last_name }}",
    "company": "{{ company.name }}",
    "jobtitle": "{{ person.title }}",
    "phone": "{{ person.phone }}"
  }
}
  • Gotcha: Properties must be wrapped in a properties object. Rate limit is 500 req/10s with a Private App token.

👉 Enrichment

Clay

  • URL: Your unique Clay table webhook URL (from Clay's webhook source settings)

  • Method: POST

  • Auth: None (or optional Bearer token configured in Clay)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "email": "{{ person.email }}",
  "first_name": "{{ person.first_name }}",
  "last_name": "{{ person.last_name }}",
  "company_name": "{{ company.name }}",
  "company_domain": "{{ company.domain }}",
  "title": "{{ person.title }}"
}
  • Gotcha: Clay auto-maps JSON keys to table columns — the body schema is flexible. Webhook sources cap at 50k submissions unless on Enterprise.

👉 Marketing

Marketo

  • URL: https://{munchkin_id}.mktorest.com/rest/v1/leads.json

  • Method: POST

  • Auth: Bearer Token (OAuth client_credentials — refresh hourly)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "action": "createOrUpdate",
  "lookupField": "email",
  "input": [{
    "email": "{{ person.email }}",
    "firstName": "{{ person.first_name }}",
    "lastName": "{{ person.last_name }}",
    "company": "{{ company.name }}",
    "title": "{{ person.title }}"
  }]
}
  • Gotcha: Tokens expire ~1hr. Rate limit: 100 calls/20s. Can batch up to 300 records.

HubSpot Marketing (Lifecycle / Lead Status)

  • URL: https://api.hubapi.com/crm/v3/objects/contacts

  • Method: POST

  • Auth: Bearer Token (same as HubSpot CRM)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "properties": {
    "email": "{{ person.email }}",
    "firstname": "{{ person.first_name }}",
    "lastname": "{{ person.last_name }}",
    "company": "{{ company.name }}",
    "lifecyclestage": "lead",
    "hs_lead_status": "NEW"
  }
}

Customer.io

  • URL: https://track.customer.io/api/v1/customers/{{ person.email }}

  • Method: PUT

  • Auth: Basic Auth — Site ID as username, API Key as password

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "email": "{{ person.email }}",
  "first_name": "{{ person.first_name }}",
  "last_name": "{{ person.last_name }}",
  "company": "{{ company.name }}",
  "created_at": {{ timestamp }}
}
  • Gotcha: created_at expects a Unix timestamp. Max payload 32KB.

👉 Automation

Zapier

  • URL: Your unique Zapier "Catch Hook" URL (from a Zap with the Webhooks by Zapier trigger)

  • Method: POST

  • Auth: None

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "email": "{{ person.email }}",
  "first_name": "{{ person.first_name }}",
  "last_name": "{{ person.last_name }}",
  "company_name": "{{ company.name }}",
  "company_domain": "{{ company.domain }}",
  "title": "{{ person.title }}"
}
  • Gotcha: The URL itself is the secret. Zapier auto-detects fields from the first payload.

n8n

  • URL: Your unique n8n Webhook node URL

  • Method: POST

  • Auth: None (or Basic/Header Auth, configurable in n8n)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "email": "{{ person.email }}",
  "first_name": "{{ person.first_name }}",
  "last_name": "{{ person.last_name }}",
  "company_name": "{{ company.name }}",
  "company_domain": "{{ company.domain }}",
  "title": "{{ person.title }}"
}
  • Gotcha: Self-hosted or cloud — auth depends on the n8n Webhook node setup.

👉 Collaboration

Microsoft Teams

  • URL: Your Teams Incoming Webhook URL (from Teams Workflows / Power Automate)

  • Method: POST

  • Auth: None

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "type": "message",
  "attachments": [{
    "contentType": "application/vnd.microsoft.card.adaptive",
    "content": {
      "type": "AdaptiveCard",
      "version": "1.4",
      "body": [
        {"type": "TextBlock", "text": "New record from Unify", "weight": "Bolder"},
        {"type": "FactSet", "facts": [
          {"title": "Name", "value": "{{ person.first_name }} {{ person.last_name }}"},
          {"title": "Email", "value": "{{ person.email }}"},
          {"title": "Company", "value": "{{ company.name }}"}
        ]}
      ]
    }
  }]
}
  • Gotcha: Rate limit: 4 req/sec. Max message size 28KB.

👉 Product / CS

Intercom

  • URL: https://api.intercom.io/contacts

  • Method: POST

  • Auth: Bearer Token (Developer Hub → Your Apps → Authentication)

  • Headers: Content-Type: application/json, Intercom-Version: 2.11, Accept: application/json

  • Body (JSON):

{
  "role": "lead",
  "email": "{{ person.email }}",
  "name": "{{ person.first_name }} {{ person.last_name }}",
  "phone": "{{ person.phone }}",
  "custom_attributes": {
    "company_name": "{{ company.name }}"
  }
}
  • Gotcha: Custom attributes must be pre-created in Intercom.

Pylon

  • URL: https://api.usepylon.com/issues

  • Method: POST

  • Auth: Bearer Token (Pylon workspace settings)

  • Headers: Content-Type: application/json

  • Body (JSON):

{
  "title": "New lead: {{ person.first_name }} {{ person.last_name }}",
  "body": "Email: {{ person.email }}\\nCompany: {{ company.name }}\\nTitle: {{ person.title }}",
  "requester_email": "{{ person.email }}"
}

Don't see your tool? As long as the destination accepts an HTTP request, you can send to it. Use the Zapier or n8n routes as a universal bridge.