Migrate from the Clearbit Company API
This guide maps Clearbit's Company API (GET https://company.clearbit.com/v2/companies/find) to Tomba's GET /v1/companies/find, which returns a Clearbit-style company object. 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://company.clearbit.com/v2/companies/find?domain= | GET https://api.tomba.io/v1/companies/find?domain= |
GET https://company-stream.clearbit.com/v1/companies/domain/{domain} | GET https://api.tomba.io/v1/companies/find?domain={domain} |
POST https://company.clearbit.com/v2/companies/flag?domain= | POST /v1/flag with flag_type organization |
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 |
|---|---|---|
domain | domain | Required. |
webhook_url, webhook_id | No equivalent | /v1/companies/find doesn't send callbacks. |
company_name, linkedin, twitter, facebook | No equivalent | Tomba looks up by domain only. |
API-Version header | No equivalent |
Response field mapping
Tomba returns the company in data and the domain you looked up in meta.domain. Every field in Clearbit's reference is listed below; "Always null" means Tomba returns the key but never fills it. Field definitions are in Enrichment.
| Clearbit | Tomba | Notes |
|---|---|---|
id | No equivalent | |
name, domain, description, tags, indexedAt | Same paths in data | |
legalName | data.legalName | The same value as name. |
domainAliases | data.domainAliases | Always null. |
site.phoneNumbers, site.emailAddresses | Same paths | site.emailAddresses lists up to six generic addresses Tomba found for the domain, such as info@. |
category.sector, industryGroup, industry, subIndustry | Same paths | Always null. GET /v1/domain-search returns the industry in data.organization.industries. |
category.gicsCode | No equivalent | |
category.sicCode, sic4Codes, naicsCode, naics6Codes, naics6Codes2022 | Same paths | |
foundedYear | data.foundedYear | A string, such as "2010", instead of an integer. |
location | data.location | The two-letter country code, not the full address. |
timeZone, utcOffset | Same paths | Always null. |
geo.streetAddress, city, postalCode, state, country, countryCode | Same paths | |
geo.streetNumber, geo.streetName | Same paths | Both hold the full street address, the same value as geo.streetAddress. |
geo.stateCode | data.geo.stateCode | Holds the same value as geo.state. |
geo.subPremise, lat, lng | Same paths | Always null. |
logo | data.logo | Always null. Use https://logo.tomba.io/{domain}; see Logo API. |
facebook.handle, twitter.handle | Same paths | |
facebook.likes | data.facebook.likes | Always null. |
linkedin.handle | data.linkedin.handle | Without Clearbit's company/ prefix. |
twitter.id, bio, followers, following, location, site, avatar | Same paths | Always null. |
crunchbase.handle | No equivalent | |
emailProvider | data.emailProvider | The name of the domain's mail provider, such as Google, instead of a boolean. |
type | data.type | Tomba's company types differ from Clearbit's; see Company attributes. |
ticker, identifiers.usEIN | Same paths | Always null. |
phone | No equivalent | Use data.site.phoneNumbers. |
metrics.employeesRange | data.metrics.employees | A range string, such as 1001-5000. Tomba's ranges differ from Clearbit's. |
metrics.employees | No equivalent | Tomba's metrics.employees holds a range, not a count. |
metrics.annualRevenue, metrics.estimatedAnnualRevenue | Same paths | Both hold the same string. |
metrics.trafficRank | data.metrics.trafficRank | A numeric rank as a string, instead of Clearbit's very_high to very_low values. |
metrics.alexaUsRank, alexaGlobalRank, marketCap, raised, fiscalYearEnd | Same paths | Always null. |
tech, techCategories | Same paths | Technology and category names. |
parent.domain, ultimateParent.domain | Same paths | Always null. |
Tomba also returns data.whois, with the domain's registrar_name, created_date, and referral_url.
Error mapping
| Clearbit | Tomba | What to do |
|---|---|---|
202 lookup queued | Not returned | Remove the retry-on-202 logic. |
404 company not found | 200 with an errors object: type not_found, code 404 | Check the body for errors, not only the status. |
422 invalid domain | 422 params_invalid for a malformed domain. A disposable or webmail domain returns 200 with an errors object: type params_invalid, code 422. | Send the company's own domain. |
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. |
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 company lookup synchronously and sends no callback for it, so remove 202 retries and webhook handlers. To enrich a list of domains, run a bulk job of type company with a newline-separated list:
Code
Launch the job, poll its progress, and download the results as CSV, as shown in Lifecycle. The CSV doesn't follow Clearbit's JSON shape. A job is charged when you first download its results; see Billing.
Code example
This function replaces a Company API lookup. It returns the Clearbit-style company object, or null when Tomba has no record, and fills logo with Tomba's logo URL. 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/companies/findand read the company fromdata. - Treat a
200response with anerrorsobject as not found, and remove202retries and webhook handling. - Update code that depends on fields Tomba formats differently (
foundedYear,location,emailProvider,type,metrics,linkedin.handle) or leavesnull, and build logo URLs onlogo.tomba.io. - Handle
402, and retry429afterRetry-After. - Look up the same sample of domains with both services and compare the fields you use before you switch production traffic.