> ## Documentation Index
> Fetch the complete documentation index at: https://docs.b2bsignals.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Clay

> Send people from a Clay table to B2B Signals, with the reason you picked each one, after a safe test row.

Connect Clay when you build lists in Clay and want those people in B2B Signals, with the reason you picked them. Each row you send from Clay becomes a person in **People**.

Data moves one way: from Clay to B2B Signals. Nothing goes back to Clay.

## Before you start

* A Clay plan with the HTTP API column. Clay offers it on its Growth plan or higher.
* An API key for your workspace. "API keys come with a paid plan (Software or Custom)." See [API keys](https://docs.b2bsignals.ai/developers/api-keys.md).
* To turn Clay on, or to copy or make the key, you must be the workspace owner or an admin. Anyone can follow the other steps.

## How Clay starts safely

Until you turn Clay on, every row Clay sends is a test. Nobody is added and nothing changes. You see what would have happened, so you can check your table before real rows arrive.

## Connect Clay

**1. Open the Clay drawer**

Open **Sources**, then **Integrations**. On the **Clay** row, press **Connect**. You can also open it from **Settings** › **Integrations**, on the **Clay or Zapier** row.

**2. Add our columns in Clay**

Make a Clay table with our 8 columns, then add one HTTP API column with our settings. Press **Download columns (CSV)** to get the column names, and **Copy column settings** to get the settings to paste. See [The columns](#the-columns) and [The HTTP API column](#the-http-api-column).

If the drawer shows **Copy our template into Clay** instead, open the template, choose Use template, and Clay makes your own copy with the columns ready.

**3. Add your key in Clay**

Press **Copy your key** and paste it into the header account in Clay. Clay asks for it once. Keep it private.

**4. Send one row to test**

Run the HTTP API column on one row in Clay. Within a few seconds the drawer shows **Test received:** and what a real send would do. Until then it says "Waiting for a test row. Send one from Clay and it shows up here."

![Connect Clay drawer with three steps and a Test received line](https://mintcdn.com/b2-b-signals-llc/u5yYe4FZtFc5vtD_/images/integrations/clay-drawer.png?fit=max\&auto=format\&n=u5yYe4FZtFc5vtD_\&q=85\&s=006270db6f0ee9c9a0f7dfd3292de4bb)

The Clay drawer after a test row arrived. Nobody was added; Turn on is now available.

**5. Turn Clay on**

Press **Turn on**. You see "Clay is on. New rows from Clay are added from now on."

**Turn on** stays greyed out until a test row arrives. Members who aren't the owner or an admin see "Only an owner or admin can turn Clay on. Ask them."

## The columns

Name the columns exactly like this. The HTTP API column reads them by name.

| Column | What to put in it | Needed? |
| - | - | - |
| Full Name | The person's full name | Needed when there is no LinkedIn URL |
| Company Name | Their company | Needed with a name, when there is no LinkedIn URL |
| Company Domain | Their company website, such as `example.com` | Can stand in for the company name |
| LinkedIn URL | Their LinkedIn profile link, with `/in/` in it | Best way to identify the person |
| Job Title | Their title | Optional |
| Reason | Why you picked them. It shows as their reason in People. Up to 500 characters | Optional |
| Signal | A short label, such as "Website visit". Up to 120 characters | Optional |
| Evidence URL | A link that backs up the reason | Optional |

Every row needs a person: a LinkedIn URL, or a full name with a company. Rows with only a company are skipped.

## The HTTP API column

**Copy column settings** gives you these values to paste into Clay:

| Setting | Value |
| - | - |
| Column name | Send to B2B Signals |
| Method | POST |
| URL | Your address with `?source=clay` at the end. Copy it from the drawer |
| Header account | Select header account, then + Add account. Name: B2B Signals. Header: `X-API-Key`. Value: your key |
| Header | `Content-Type: application/json` |
| Body | The JSON body from **Copy column settings**. It refers to each column as `/Column Name` |
| Remove empty fields | On |
| Rate limit | 2 requests per 1000 ms |
| Auto-update | Off |

Keep `?source=clay` in the URL. It is what makes rows a test until you turn Clay on, and how we count them as Clay rows.

With **Auto-update** off, Clay sends only the rows you run.

## What the test tells you

| You see | What it means |
| - | - |
| **Test received:** with the name, "Nobody was added, it was only a test." | A real row would add this person |
| "...is already in People, a real row would update them." | This person is already in your workspace. A real row updates them, never duplicates them |
| "...They're on your do-not-contact list, so they'd never be contacted." | A real row would save them, but they'd never be contacted |
| "It would be skipped, so nobody would be added." | We couldn't identify a person. Check the name, company and LinkedIn URL columns |

A test never searches for a person by name. A row with no LinkedIn URL and a person we don't know yet shows as skipped in a test, even if a real row would find them.

## What happens to each real row

* A new person is added to **People**, with your reason as the reason they came up. See [Reason](https://docs.b2bsignals.ai/help/glossary.md#reason).
* A person already in your workspace is updated, not duplicated. We match on the LinkedIn profile.
* A person on [Do not contact](https://docs.b2bsignals.ai/people/do-not-contact.md) is saved, but never contacted.
* Nothing is sent to anyone. A Clay row doesn't start a campaign, and doesn't go to HeyReach or other tools on its own.

When a row has no LinkedIn URL, we look the person up by name and company. These lookups have limits: 150 per workspace per day, counted in UTC, and 20 in one request. Rows past the limit are refused, and Clay shows an error for them. Run them again after midnight UTC, or add the LinkedIn URL, which avoids the limit.

## Turn Clay off

Open the Clay drawer and press **Turn off** next to **Clay is on**. You see "Clay is off. Rows from Clay are tests again." People already added stay in People.

## Replace your key

We keep only a fingerprint of your key, so we can't show it again. If you need it, the owner or an admin presses **Copy your key**, then **Make a new key**.

> [!WARNING]
>
> A new key replaces the old one at once. Anything still using the old key, such as Clay, Zapier, your own code or an AI assistant, stops working until you paste the new key there.

> [accordion] Can I test again after Clay is on?
>
> Yes. Add `?test=true` to the URL, or send `"test": true` in the body. That row is a test even while Clay is on.

> [accordion] Does a Clay row send a message?
>
> A row from Clay sends no message. It starts a campaign only if the row names one with `workflow_id`.

> [accordion] Can a Clay row start a campaign?
>
> Yes, if the body includes a `workflow_id`, the id of a campaign. See [Zapier, Make and your own code](https://docs.b2bsignals.ai/integrations/api-intake.md#add-people-and-start-them-in-a-campaign).

> [card] [Zapier, Make and your own code](https://docs.b2bsignals.ai/integrations/api-intake.md)
>
> The same address, from any tool.

> [card] [API keys](https://docs.b2bsignals.ai/developers/api-keys.md)
>
> Make and replace your key.

> [card] [Sources](https://docs.b2bsignals.ai/sources/integrations.md)
>
> Every way people come in.

> [card] [Do not contact](https://docs.b2bsignals.ai/people/do-not-contact.md)
>
> People who are never contacted.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.