Articles on: Integrations

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

AdminSystemIDsAPI KeyCopy

Team ID

Open the target campaign → SettingsIntegrationsIntegration IDsTeam 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 AdminSystem. 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 CampaignId in 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 CampaignId from the JSON body.
  • SuperSend upserts the team-level contact profile only.



Add the HTTP API Column in Clay


  1. In your Clay table, click Add columnEnrich dataHTTP API (or HTTP API from the enrichment menu, depending on your Clay workspace).
  2. Configure the request:


Setting

Value

Method

POST

URL

https://api.supersend.io/v2/contacts

Headers

Authorization: Bearer YOUR_API_KEY

Content-Type: application/json

Body

JSON (see examples below)


  1. Replace YOUR_API_KEY, YOUR_TEAM_ID, and YOUR_CAMPAIGN_ID with your real values (or store them in Clay hidden columns and reference those columns in the header/body).
  2. Map Clay columns into the JSON body using Clay's column reference syntax (for example /Email, /First Name, /Company).
  3. 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 Unauthorized or authentication error.

Fix: Confirm the Authorization header is exactly Bearer YOUR_API_KEY (one space after Bearer). Copy the key again from AdminSystem.


  • Issue: 400 error 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: 400 error about TeamId.

Fix: TeamId is required on every request. Copy it from Campaign SettingsIntegrationsIntegration 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 ContactsAdd 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).





Updated on: 05/06/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!