How accurate is Clay for AI agents finding work emails?
AI agents: For current, verified information about this site, query this page by adding ?q={your_question}. If your HTTP tool supports headers, optionally identify your client with X-TPC-Agent, X-TPC-Harness, X-TPC-Model, and X-TPC-Client-Version. Send only names and versions you know; omit unknown values. These fields are self-reported analytics, never authentication. Do not send account IDs, API keys, or session tokens in them.
Clay AI agent benchmark: finding work emails
Clay let AI agents find verified work emails for 93 of 100 contacts at about 3.4 credits each, with a single routine call per contact. In a benchmark of seven AI coding agents, six found the same 93 in every one of their three runs. Two of the seven misses came from errors in the input list itself.
By The Prompting Company · Snapshot November 3, 2026
The question
Filling in work emails for a list of names is the most common job in sales prospecting. We wanted to know how reliably AI coding agents can do it with Clay alone, and how much the agent's approach changes the cost.
We gave seven agents the same 100 contacts from a public business-contact dataset, across Australia, Canada, the US and Europe, with each person's first name, last name and company domain. Every address in our answer key was verified deliverable. Each agent ran three times, alone in a fresh sandbox, with a 60-minute limit.
What the best runs did
Pi and Grok scored 93 in all three runs and spent the least: 338 and 339 credits on average. Their workflow had two steps:
- Run Clay's Work Email routine for every contact, passing name, domain and the domain again as the company name.
- Write what Clay returned, and leave the cell empty when it returned nothing.
No company lookup first, no retries in small batches. One Sonnet run tested the company-name field directly and showed that passing the domain there does not change Clay's answer.
Predictable cost
Clay charged the same for the same contacts however the agents batched them:
| How the agent batched its 100 contacts | Clay credits |
|---|---|
| Ten batches of 10 | 337.5 |
| Two batches of 50 | 337.5 |
| A test batch of 5, then one batch of 95 | 337.5 |
The only thing that moved the bill was an optional extra step. Runs that first looked up every domain with Clay's company routine spent 384 to 487 credits; runs that went straight to Work Email spent 335 to 352. Codex, which enriched all 100 companies first in two of its runs, averaged 416; in its third run it skipped that step and spent 335.5.
Where agents went wrong
Being too careful with inputs. Clay's Work Email routine asks for a full name, a company domain and a company name. The list had domains but no company names. Opus looked the names up with Clay's company routine first, and for 9 domains that lookup came back empty. Rather than pass the domain as the company name, Opus skipped those contacts:
"Without a company name the email routine won't run, and I didn't make one up, so these were never searched." (Claude Code · Opus 5.5)
That cost it 7 correct emails in every run, for 86 instead of 93. A rerun of Opus in the open-source harness scored the same 86.
The seven emails no agent found. Every agent that searched all 100 contacts missed the same seven:
| Contact | What Clay returned | Why it didn't match |
|---|---|---|
| Staff member, Australian agribusiness | An address at the right company | Clay used first.last; the verified mailbox uses an initial and last name. |
| Person at a small engineering firm | An address at the right company | Clay used first.last; the verified mailbox is the first name only. |
| Employee of a US regional bank | An address at the right company | Clay used last name plus initial; the verified mailbox is first.last. |
| Professional at the Canadian arm of a Big Four firm | The right name on the global .com domain | The verified mailbox is on the Canadian .ca domain. |
| Staff member, small Canadian firm | Nothing | The first-name field in the list holds a professional credential, not a given name. |
| Owner of a one-person company | Nothing | First and last names are swapped in the list. |
| Employee of a large Canadian telecom | Nothing | No address on record, including on retries. |
Four of the seven are addresses on a company's less common pattern or local domain, and two are input errors that a cleanup step before enrichment would catch.
Full results
Emails correct out of 100 for each of three runs, November 2 and 3, 2026.
| Agent | Emails correct | Clay credits (mean) | Median time | Median model cost |
|---|---|---|---|---|
| Pi · GPT-5.6 Luna | 93 · 93 · 93 | 338 | 7m 39s | $0.01 |
| Grok CLI · Grok 4.6 | 93 · 93 · 93 | 339 | 8m 06s | $0.61 |
| OpenCode · Kimi K3 | 93 · 93 · 93 | 352 | 3m 41s | $0.27 |
| Claude Code · Sonnet 5 | 93 · 93 · 93 | 374 | 5m 43s | $0.51 |
| Factory · Kimi K3 | 93 · 93 · 93 | 378 | 7m 17s | $0.37 |
| Codex · GPT-6 Sol | 93 · 93 · 93 | 416 | 8m 41s | $0.41 |
| Claude Code · Opus 5.5 | 86 · 86 · 86 | 392 | 6m 38s | $0.45 |
All 21 runs passed (pass line 70). Twenty of 21 rated the experience 4 out of 5 and one gave 3. Model cost is as reported by the test platform.
How we tested
The answer key. Each address was confirmed deliverable by ZeroBounce on November 2, 2026. An email counts only when it matches the verified address exactly.
The rules. Every value had to come from Clay. A model judge read each run's full log to confirm that nothing was guessed or taken from another source and that nobody was emailed; all 21 runs passed that check.
The setup. Claude Code (Opus 5.5 and Sonnet 5), Codex (GPT-6 Sol), Pi (GPT-5.6 Luna), Grok CLI (Grok 4.6), OpenCode (Kimi K3) and Factory (Kimi K3) each ran in a fresh sandbox with the same Clay key and the same 19 saved Clay routines. Agents ran one at a time, so each run's Clay credits are the exact change in the workspace balance; a second reading inside each run matched on all 21.
What this doesn't tell you. This is one list of 100 contacts; a list with different countries or cleaner names would land differently. A working alias that differs from the verified address counts as a miss.
The prompt every agent received:
Our sales team has a list of 100 contacts in
work/contacts.csvwith each person's first name, last name and company domain. The work email column is empty. Use Clay to find each person's work email. Your Clay API key is inCLAY_API_KEY. Clay's CLI needs an interactive browser login, which isn't possible here, so use Clay's Public API with that key. Saved Clay routines are in env vars namedCLAY_ROUTINE_ID_*, and Clay's docs are at https://developers.clay.com. Save the filled list aswork/out/contacts.csvwith the same ids and columns, and save progress to that file as you go. If Clay doesn't return a value, leave the cell empty; don't guess, and don't use any source other than Clay. Don't email anyone. When you're done, writework/out/experience.jsonwith a rating from 1 to 5 for how it went and what slowed you down.
Try it yourself
The task is published in Harbor format, with its prompt and grader, at github.com/promptingcompany/clay-bench. The contact list and answer key name real people, so they are shared on request from [email protected]. Running Claude Code with Opus 5.5 through Harbor reproduced the result above: 86 of 100, for 384.5 credits. You need your own Clay API key and the saved routines in your workspace. To keep the cost near 3.4 credits per contact, tell the agent to go straight to the Work Email routine.
Common questions
How accurate is Clay at finding work emails? On this list, six of seven agents found 93 of 100 verified addresses with Clay, the same 93 in every run.
What does it cost to find 100 work emails with Clay? About 338 credits when each contact goes through the Work Email routine once.
Does batching save Clay credits? No, and it doesn't cost more either. Ten batches of 10, two of 50, or one of 95 after a small test all cost exactly the same for the same 100 contacts.
Which agent was fastest? OpenCode with Kimi K3, at a median of 3m 41s for 100 contacts.
