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

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 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 column → Enrich data → HTTP 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 Admin → System.


  • 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 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).




Updated on: 05/06/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!