Import Contacts from Clay
Import Contacts from Clay
Purpose
Push enriched leads from a Clay table into SuperSend using Clay's HTTP API column. Each row can create or update a contact in All Contacts or enroll someone directly into a campaign—without CSV exports or a separate automation tool.
Prerequisites
- A SuperSend account with at least one team.
- Permission to create contacts on that team.
- A Clay table with at least one identifier column: email or LinkedIn URL.
- Your SuperSend API key, Team ID, and (if enrolling) Campaign ID (see below).
Get Your SuperSend Credentials
You need three values for the Clay HTTP column:
Value | Where to find it |
|---|---|
API key | Admin → System → IDs → API Key → Copy |
Team ID | Open the target campaign → Settings → Integrations → Integration IDs → Team ID → copy |
Campaign ID | Same page → Campaign ID → copy (skip if you only want All Contacts, not campaign enrollment) |
Org admins can copy the API key from Admin → System. Team ID and Campaign ID always come from the campaign's Integrations tab so they match the team and campaign you intend to use.
Full API field reference: Contact API on docs.supersend.io.
Choose Your Destination
Enroll in a campaign (most common for outbound)
- Include
CampaignIdin the JSON body. - SuperSend upserts the contact profile and adds or updates their enrollment in that campaign.
Add to All Contacts only (no campaign enrollment)
- Omit
CampaignIdfrom the JSON body. - SuperSend upserts the team-level contact profile only.
Add the HTTP API Column in Clay
- In your Clay table, click Add column → Enrich data → HTTP API (or HTTP API from the enrichment menu, depending on your Clay workspace).
- Configure the request:
Setting | Value |
|---|---|
Method | |
URL | |
Headers | |
| |
Body | JSON (see examples below) |
- Replace
YOUR_API_KEY,YOUR_TEAM_ID, andYOUR_CAMPAIGN_IDwith your real values (or store them in Clay hidden columns and reference those columns in the header/body). - Map Clay columns into the JSON body using Clay's column reference syntax (for example
/Email,/First Name,/Company). - Run the column on one test row first, then on the full table when the response looks correct.
Example body — enroll in a campaign
{
"TeamId": "YOUR_TEAM_ID",
"CampaignId": "YOUR_CAMPAIGN_ID",
"email": "/Email",
"first_name": "/First Name",
"last_name": "/Last Name",
"company_name": "/Company",
"title": "/Title",
"linkedin_url": "/LinkedIn URL",
"custom": {
"clay_source": "/Source"
}
}
Replace /Email, /First Name, and other paths with the actual column names in your Clay table.
Example body — All Contacts only (no campaign)
{
"TeamId": "YOUR_TEAM_ID",
"email": "/Email",
"first_name": "/First Name",
"last_name": "/Last Name",
"company_name": "/Company"
}
Optional fields
You can also send standard fields such as phone, city, state, country, and company_url. Put anything that does not match a standard SuperSend field inside custom (object of key/value pairs)—those values become custom variables you can use in sequences.
To run SuperSend email validation when the contact is created, add "validate_emails": true (uses validation credits). Default is off.
Verify the Response
A successful create returns HTTP 201 with JSON like:
{
"success": true,
"data": {
"id": "contact-uuid",
"email": "jane@example.com",
"TeamId": "your-team-id",
"CampaignId": "your-campaign-id"
}
}
In Clay, inspect the HTTP column output for success: true and a contact id. Then confirm in SuperSend:
- Campaign enrollment: open the campaign → Contacts and find the row.
- All Contacts only: open Contacts in the sidebar for the correct team.
Expected Result
- Each Clay row that runs successfully creates or updates a contact in SuperSend (upsert by email or LinkedIn URL—same as CSV import).
- With
CampaignId, the contact is enrolled in that campaign and can enter the sequence when the campaign is active. - Without
CampaignId, the contact appears under All Contacts for that team only. - Re-running the Clay column on the same person updates existing data instead of creating duplicates.
Troubleshooting
- Issue:
401 Unauthorizedor authentication error.
Fix: Confirm the Authorization header is exactly Bearer YOUR_API_KEY (one space after Bearer). Copy the key again from Admin → System.
- Issue:
400error about missing identifier.
Fix: Send at least one of email or linkedin_url. Map a Clay column into that field and ensure the cell is not empty on that row.
- Issue:
400error aboutTeamId.
Fix: TeamId is required on every request. Copy it from Campaign Settings → Integrations → Integration IDs for the team that should own the contact.
- Issue: Contact appears in All Contacts but not in the campaign.
Fix: Include CampaignId in the JSON body and confirm the UUID matches the campaign you opened in SuperSend.
- Issue: Custom variables missing in the sequence.
Fix: Put non-standard fields under custom, not at the top level of the JSON (unless they are documented standard fields on docs.supersend.io).
- Issue: Many rows fail when running the full table.
Fix: Check Clay rate limits and SuperSend API rate limits. Run in smaller batches or add a Clay Only run if condition so empty identifier rows are skipped.
Alternative: Contact Import Webhook (No API Key)
If you prefer not to manage an API key in Clay, SuperSend also offers a team-scoped Import via Webhook flow under Contacts → Add Contact. That path uses a unique HTTPS URL and field mapping instead of the V2 API. See Contact Import Webhooks.
To verify an email only without creating a contact (for example, a separate Clay column before push), use the Email validation API (POST /v2/email-validation/verify).
Related Articles
- Integrations Overview
- Contacts Overview
- Upload Contacts via CSV
- Contact Import Webhooks
- Zapier and Make Setup
- Admin Overview
Updated on: 05/06/2026
Thank you!