integrationopen source · MIT

clay integration

Check every address in your Clay table.

Your waterfall finds addresses. This tells you which of them can actually receive mail, before a single one reaches a sequence. It is an HTTP API enrichment, so there is nothing to install, and the first 25 rows a day need no key at all.

setup, about two minutes
1

Add the enrichment

In your Clay table, click Add enrichment, search for HTTP API, and select it.

2

Point it at the endpoint

Method POST, and this URL:

https://tryverdict.org/api/enrich

Leave the headers empty for now. You get 25 enrichments a day without a key, which is enough to map the columns and run it down a test list before deciding anything.

3

Send the email column

In the Body field, type / to insert your email column, and wrap it in quotes so the JSON stays valid:

{ "email": "/Email" }

Replace /Email with whichever column holds the address.

4

Map the fields you want

Run it on one row first. Clay will show the response, and every field below is top-level, so each one maps straight to a column.

5

Add your key before you run the table

Past 25 rows a day the endpoint answers 429 instead of a verdict, which in Clay looks like an enrichment that silently stopped working. Add the header before you run a real table:

Authorization: Bearer vk_your_key_here

Keys live in your dashboard. The response carries remaining_today so you can see what is left without guessing.

What comes back

fieldmeaning
verdictDEAD, RISKY, PLAUSIBLE or UNKNOWN
sendablefalse only when the address is definitely dead
definitely_deadthe domain cannot receive mail at all
mailbox_confirmed_realthe mailbox itself was confirmed over HTTPS (no port 25 needed)
confirmed_bywhat confirmed it: gravatar or microsoft365
reasonwhy, in a sentence
looks_like_typoone character from a real provider
did_you_meanthe address it was probably meant to be
is_role_accountinfo@, sales@ and friends — a shared inbox
is_disposablea burner provider
behind_gatewayMimecast, Proofpoint and similar
domain_accepts_mailthe domain has a working mail server
has_spfthe domain publishes SPF
has_dmarcthe domain publishes DMARC
mxthe mail server that answered

A filter worth getting right

Filter on definitely_dead = false rather than on a positive signal. Only a domain that cannot receive mail at all is a definite no. Everything else is a spectrum, and treating “we could not confirm this” as “this is bad” deletes contacts you could have reached.

looks_like_typo is the one worth acting on immediately. A typosquatted domain has perfectly valid DNS, so every other signal says it is fine, while the mail goes to someone who registered the misspelling on purpose.

mailbox_confirmed_real is the opposite end: when it is true, the mailbox itself was confirmed, not just the domain, over HTTPS without a port-25 probe (the person has a Gravatar on the address, or the provider’s own API vouches for it). Treat those as your safest rows. It is confirmation-only, so a false here just means “not confirmed”, never “dead”.

What this cannot tell you

Whether a specific mailbox exists. That needs an SMTP conversation on port 25, and every cloud provider blocks it, so no hosted enrichment can do it — ours included, and neither can the ones that say otherwise. The response carries smtp_probed: false so a workflow cannot quietly assume a mailbox was contacted.

For a real probe, run the engine on your own machine. It is MIT licensed, and your list never leaves the machine it runs on.

git clone https://github.com/omm9846/verdict.git
cd verdict/backend && pip install -r requirements.txt

python -m engine verify someone@example.com

Running it on a real table

25 rows a day free, no signup, so you can decide whether the data is worth anything before you pay for it. Above that a key is $59 a month for 5,000 enrichments a day, which is more than most Clay tables will ever ask for.

Worth being plain about what that money is doing: it pays for a machine with outbound port 25, which is the only way anyone can confirm an individual mailbox. Until that machine exists this endpoint is DNS tier for everybody, subscribers included, and it says so in every response. When it does exist, the same key starts returning real SMTP results at no extra cost.

Works the same anywhere

The endpoint takes one address and returns flat fields, which is the shape Zapier, Make and n8n want too. Same URL, same body, same response.

curl -X POST https://tryverdict.org/api/enrich \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer vk_your_key_here" \
  -d '{"email":"someone@example.com"}'

Questions, or a field you need that is not here? Email hello@tryverdict.org.