Clay Integration
Push enriched contacts from Clay into crmzero via HTTP API
Use Clay's HTTP API integration to push enriched contacts directly into crmzero. Map your Clay columns to the crmzero contact schema, configure merge strategies, and keep your CRM automatically up to date as your Clay tables populate.
Prerequisites
API Key
Get a crmzero API key from Admin → API Keys
Clay Table
A Clay table with enriched contact data
Endpoint URL
https://crmzero.ai/api/v1/contacts
Setup Guide
Add HTTP API Action
In your Clay table, click + Add Enrichment or + Add Action and search for "HTTP API". Select it to add a new HTTP API column.
Name it something descriptive like "Push to crmzero" so your team knows what it does.
Configure Method & Endpoint
Method
POSTEndpoint
https://crmzero.ai/api/v1/contactsSet Headers
Expand the Headers section and add two key-value pairs:
| Header | Value |
|---|---|
| Authorization | Bearer crm_xxxxxxxxxx |
| Content-Type | application/json |
Replace crm_xxxxxxxxxx with your actual API key. Keep it secret — anyone with the key can create contacts in your CRM.
Configure the Request Body
In the Body section, build a JSON object that maps your Clay columns to crmzero fields. Use Clay's / shortcut to insert column values dynamically.
{
"firstName": "/first_name_merge",
"lastName": "/last_name_merge",
"email": "/Email Address",
"city": "",
"state": "",
"country": "/Country",
"location": "/Location",
"warmth": "engaged",
"contactStatus": "active",
"lifecycleStage": "prospect",
"company": {
"name": "/company_merge",
"domain": "/domain",
"jobTitle": "/Title"
},
"socials": [
{
"platform": "linkedin",
"profileName": "/LinkedIn Username",
"profileUrl": "/LinkedIn URL"
}
],
"tags": ["Clay Import"],
"mergeStrategy": {
"default": "fill_blanks"
}
}/first_name_merge are placeholders — Clay will replace them with the actual column value for each row. Use Clay's / autocomplete to insert your own column names.| crmzero Field | Type | Clay Column | Notes |
|---|---|---|---|
| firstName | string | /first_name_merge | Use Clay's merge column for best results |
| lastName | string | /last_name_merge | Use Clay's merge column |
| string | /Email Address | Required — used for deduplication | |
| city | string | Leave blank or map to a city column | |
| state | string | Auto-normalized (e.g. 'CA' → 'California') | |
| country | string | /Country | Auto-normalized (e.g. 'US' → 'United States') |
| location | string | /Location | Free-form location (e.g. 'Tiaret, Tiaret, Algeria') |
| warmth | string | "engaged" | Or 'cold'. Default: engaged |
| contactStatus | string | "active" | active, not_interested, do_not_contact, unsubscribed |
| lifecycleStage | string | "prospect" | prospect, customer, marketing_qualified, etc. |
| company.name | string | /company_merge | Auto-creates account if it doesn't exist |
| company.domain | string | /domain | Links contact to domain record |
| company.jobTitle | string | /Title | Contact's role at the company |
| socials[].platform | string | "linkedin" | linkedin, twitter, etc. |
| socials[].profileName | string | /LinkedIn Username | Handle or username |
| socials[].profileUrl | string | /LinkedIn URL | Full profile URL |
| tags | string[] | ["Clay Import"] | Tag names or IDs — additive only |
Enable "Remove empty values"
At the bottom of the HTTP API configuration, toggle Remove empty values to ON. This ensures Clay won't send blank fields to crmzero, which prevents accidentally overwriting existing data with empty strings.
This is especially important when using fill_blanks merge strategy. Without it, empty Clay columns could overwrite existing CRM data.
Test & Run
Click "Try on 5 rows" to test the integration with a small sample. Check the response for each row:
201CreatedNew contact was created in crmzero
200UpdatedExisting contact was merged with new data
Once satisfied, click "Save" and run the column on all rows.
Tips & Best Practices
Use Clay merge columns
Clay's merge columns (e.g. first_name_merge) combine data from multiple enrichment sources into a single clean value. Always prefer these over raw source columns.
Tag your imports
Add a tag like "Clay Import" or "Clay - Q1 List" to easily identify and track contacts that came from Clay.
Start with fill_blanks
The fill_blanks merge strategy is the safest default. It won't overwrite data your team has manually entered in the CRM.
Include domain when possible
Mapping company.domain helps crmzero link contacts to domain records and enables automatic domain enrichment.