Use filtrat in Clay

Updated Oct 20264 min read

Use filtrat inside a Clay table to verify emails or find work emails, row by row. You add an HTTP API column that calls filtrat with your API key. There are three ways to set it up: the ready-made template, a prompt Clay turns into the column, or by hand.

Before you start

Open API → Clay in the app. Create a key there (name it Clay) or pick one. The page shows the endpoint, header, body and prompt for the action you choose, already filled in with your key.

A new key starts with ak_ and is shown in full only right after you create it. If you pick an older key, replace the prefix shown in the snippets with your full key.

Fastest: the ready-made template

The filtrat Clay template has both columns set up with the right settings. Copy it into your workspace, replace YOUR_API_KEY in the column's header with your key, and run it on a few rows.

Or let Clay build the column

  1. In your Clay table, add an HTTP API column.
  2. On API → Clay, choose Verify email or Find email, then press Copy Clay prompt.
  3. Paste it into the column's Generate tab and let Clay create the request.
  4. Check the settings in Recommended column settings were applied, then run the column on a few rows.

The prompt includes the timeout, retries and rate limit, but Clay doesn't always apply them. Check them in the column's settings before a big run.

Or set it up by hand: verify emails

Your table needs a column with email addresses, named Email.

  1. Add an HTTP API column.
  2. Set the method to POST and the URL to https://api.filtrat.io/v1/verify/email.
  3. Add a header Authorization with the value Bearer, a space, and your key.
  4. Paste the body below. /Email refers to your Email column; map it if your column has another name.
  5. Apply the recommended settings, then run the column on a few rows.
Body (JSON)
{
  "email": "/Email",
  "resolve_catchall": true,
  "skip_cache": false
}

Send resolve_catchall as the boolean true, not the text "true". From the response, add these fields as columns:

FieldColumn
$.statusStatus: verified, invalid, catchall, risky or unknown
$.diagnosisWhy, when the address isn't verified
$.domain_intelligence.catch_allWhether the domain is catch-all
$.domain_intelligence.mx_providerThe domain's mail provider

Or set it up by hand: find emails

Your table needs First Name, Last Name and Domain columns, and optionally Company. Use the same steps with the URL https://api.filtrat.io/v1/finder/search and this body:

Body (JSON)
{
  "first_name": "/First Name",
  "last_name": "/Last Name",
  "domain_or_url": "/Domain",
  "company_name": "/Company"
}

company_name is optional, but include it if you have it: it finds 10–15% more emails when the website's domain doesn't receive mail. If your table has no Company column, remove that line. domain_or_url takes a domain (acme.com) or a website URL.

Add $.found_email, $.status (found or not_found) and $.confidence as columns.

Column settings

SettingValue
Response timeout90,000 ms (90 seconds)
Retry on failureOn
Max retries2
Status codes to retry429, 502, 503, 504
Rate limit60 requests per 60,000 ms
Important

Clay's default timeout is far too short for filtrat. Resolving a catch-all address can take up to 60 seconds, so set the timeout to 90 seconds or rows will fail.

What it costs

The same as in the app: 1 per verified or invalid result, 5 more when a catch-all is resolved, 20 per email found (25 when it needed catch-all resolution). Catch-all, risky, unknown and not-found results are free, and a row whose request failed isn't charged at all.

Finding an email behind a catch-all domain with resolve_catchall on (the default) costs 5 on top of the found email: 20 + 5 = 25. The 25 are held when the request starts. If the email isn't found, they're all given back, so a not-found costs nothing. If the email is found on a domain that didn't need resolution, the extra 5 are given back and you pay 20.

Re-running a column on rows that already have a result is free when the result is stored:

  • Find column: a row that already found an email gets the saved result back for free.
  • Verify column: an address checked in the last 180 days gets the stored result back for free, as long as the body keeps "skip_cache": false. This holds with resolve_catchall: true too: a catch-all resolved earlier comes back free. Only a catch-all that was never resolved is resolved now and charged 5.

Set skip_cache to true only when you want a fresh check: it ignores the stored result and charges for the new one.

Rows timing out or failing

  • Check the timeout is 90,000 ms.
  • Check retries are on, with the four status codes above.
  • Rerun only the failed rows.

More causes and fixes: Rows timing out or failing. Still stuck? Email support@filtrat.io with your Clay table URL and which setup you used.

Was this helpful?
Still stuck?

Email support@filtrat.io with the list or job name and what you expected to see.

Contact support
MYKHAILO BURIAK · NIP: 8982334042 · REGON: 544788490 · ul. Mieszczańska 18/40, 50-201 Wrocław, Poland© 2026 filtrat.io