Migrate from the Clearbit Combined API
This guide maps Clearbit's Combined API (GET https://person.clearbit.com/v2/combined/find) to Tomba's GET /v1/combined/find, which returns a Clearbit-style person and company for an email address. Clearbit behavior checked on 2026-09-29 against the last public Clearbit API reference (September 2024).
Before you begin
- Get your API key (
ta_…) and secret (ts_…); see Authentication. - Check what a lookup costs in Credit costs and your plan's throttling in Limits by plan.
- Read Migrate from Clearbit for the changes shared by every Clearbit endpoint.
Endpoint mapping
| Clearbit | Tomba |
|---|---|
GET https://person.clearbit.com/v2/combined/find?email= | GET https://api.tomba.io/v1/combined/find?email= |
GET https://person-stream.clearbit.com/v2/combined/find?email= | GET https://api.tomba.io/v1/combined/find?email= |
Authentication changes
Clearbit takes the key as the basic auth username or as a bearer token. Tomba needs two headers, X-Tomba-Key and X-Tomba-Secret:
Code
Tomba API keys expire; plan their rotation with Key expiry.
Parameter mapping
| Clearbit | Tomba | Notes |
|---|---|---|
email | email | Required. |
webhook_url | webhook_url | Tomba still returns the result in the response, and also posts a copy when a person is found. See Per-request callbacks. |
webhook_id | No equivalent | |
given_name, family_name, ip_address, location, company, company_domain, linkedin, twitter, facebook | No equivalent | Tomba matches on the email address only. |
subscribe, suppression | No equivalent | |
API-Version header | No equivalent |
Response field mapping
| Clearbit | Tomba | Notes |
|---|---|---|
person | data.person | Always an object. When Tomba has no person for the address, the whole response is not_found; see Error mapping. |
company | data.company | When Tomba has no company for the person's domain, an object whose fields are all null, not null itself. Check data.company.domain. |
| No equivalent | meta.email | The address you looked up. An empty string when no company was found. |
Inside data.person and data.company, fields map as described in the Person and Company guides:
Status mapping
Clearbit's Combined API has no deliverability status. Tomba adds data.person.verification, with the date and status of the address's last verification. The status uses the verifier's values, described in Status values, and is null when the address hasn't been verified. Compare it case-insensitively.
Error mapping
| Clearbit | Tomba | What to do |
|---|---|---|
202 lookup queued | Not returned | Remove the retry-on-202 logic. |
200 with only company | 200 with an errors object: type not_found, code 404 | Tomba needs the person. To still get the company, call GET /v1/companies/find with the address's domain. |
404 neither found | 200 with an errors object: type not_found, code 404 | Check the body for errors, not only the status. |
422 validation error | 422 params_invalid for a malformed address. A disposable or webmail address returns 200 with an errors object: type params_invalid, code 422. | Send a work address. |
401 invalid API key | 400 authentication_failed (missing or malformed), 400 api_key_expired, 401 authentication_failed (wrong key or secret) | Check both headers; rotate an expired key. |
402 over quota | 402 quota_exceeded | Wait for your usage window to renew or add credits. |
429 rate limit | 429 rate_limit | Retry after the Retry-After delay; see Handle 429 responses. |
| No equivalent | 451 claimed_email | The owner of the address asked Tomba to stop processing it. Remove it from your data. |
50X | 500 api_error | Retry with backoff. |
Error responses don't consume credits. Every type is listed in Errors.
Bulk and async jobs
Tomba answers every combined lookup synchronously, so remove 202 retries. A webhook_url callback carries the same JSON as the response, without Clearbit's id, type, and status wrapper, and isn't signed.
There is no combined bulk type. For a list, run an enrich job for the addresses and a company job for their domains; see Email enrichment and Company enrichment. Each job is created, launched, polled, and downloaded as CSV; see Lifecycle.
Code example
This function replaces a Combined API lookup and returns Clearbit's {person, company} shape, with company set to null when Tomba has no company. It needs Node.js 18 or later.
Code
Cutover checklist
- Store the Tomba key and secret as
TOMBA_API_KEYandTOMBA_SECRET_KEY, and send them asX-Tomba-KeyandX-Tomba-Secretinstead of basic auth or a bearer token. - Call
https://api.tomba.io/v1/combined/findwith the email address only, and readdata.personanddata.company. - Treat a
200response with anerrorsobject as not found, and checkdata.company.domaininstead of testingcompanyfornull. - Where you relied on company-only results, add a fallback call to
/v1/companies/find. - Apply the person and company field changes from the Person and Company guides, and remove
202retries. - Handle
402, retry429afterRetry-After, and remove addresses that return451. - Look up the same sample of addresses with both services and compare the fields you use before you switch production traffic.