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/recordsMethod:
POSTAuth: Bearer Token (Workspace Settings → Developers; needs
record_permission:read-write,object_configuration:read)Headers:
Content-Type: application/jsonBody (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/personsMethod:
POSTAuth: API Key (Header) —
x-api-tokenheader (found in Settings → Personal preferences → API)Headers:
Content-Type: application/jsonBody (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/LeadMethod:
POSTAuth: Bearer Token (OAuth 2.0 — obtain a Connected App access token)
Headers:
Content-Type: application/jsonBody (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/contactsMethod:
POSTAuth: Bearer Token (Private App access token — create in Settings → Integrations → Private Apps with
crm.objects.contacts.writescope)Headers:
Content-Type: application/jsonBody (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
propertiesobject. 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:
POSTAuth: None (or optional Bearer token configured in Clay)
Headers:
Content-Type: application/jsonBody (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.jsonMethod:
POSTAuth: Bearer Token (OAuth
client_credentials— refresh hourly)Headers:
Content-Type: application/jsonBody (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/contactsMethod:
POSTAuth: Bearer Token (same as HubSpot CRM)
Headers:
Content-Type: application/jsonBody (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:
PUTAuth: Basic Auth — Site ID as username, API Key as password
Headers:
Content-Type: application/jsonBody (JSON):
{
"email": "{{ person.email }}",
"first_name": "{{ person.first_name }}",
"last_name": "{{ person.last_name }}",
"company": "{{ company.name }}",
"created_at": {{ timestamp }}
}
Gotcha:
created_atexpects 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:
POSTAuth: None
Headers:
Content-Type: application/jsonBody (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:
POSTAuth: None (or Basic/Header Auth, configurable in n8n)
Headers:
Content-Type: application/jsonBody (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:
POSTAuth: None
Headers:
Content-Type: application/jsonBody (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/contactsMethod:
POSTAuth: Bearer Token (Developer Hub → Your Apps → Authentication)
Headers:
Content-Type: application/json,Intercom-Version: 2.11,Accept: application/jsonBody (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/issuesMethod:
POSTAuth: Bearer Token (Pylon workspace settings)
Headers:
Content-Type: application/jsonBody (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.