Schemas
RevealSearchRequest
queryNatural-language description of the companies you want, 8 to 100 characters. Filters are generated from it on every request, so use it for the first request and send the returned meta.filters as filters for the next pages.
Structured filters for company search. Every filter is optional, and a company must match all the filters you send. Most values are matched against Tomba's company data, which isn't normalized to a fixed list; size, founded, and revenue accept only the values listed for them and ignore any other value.
pagePage number. Each page has up to 50 companies. On the Free plan outside a workspace, any page after the first returns page 1.
RevealFilters
Company domains, such as stripe.com.
Two-letter country codes (ISO 3166-1 alpha-2), such as US.
City names, such as San Francisco.
State or region names, such as California.
Industries, such as financial services.
Employee count ranges: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, or 10001+.
Company types, such as private or public.
Keywords matched against each company's name, industry, keywords, and description.
Founding years, such as 2015, or ranges: before 1990, 1990-1999, 2000-2009, 2010-2019, or 2020+. exclude isn't supported.
Technology names, such as React.
Reference domains, such as stripe.com, to find similar companies. exclude isn't supported.
Annual revenue ranges: 0-1m, 1m-10m, 10m-50m, 50m-100m, or 100m+.
Four-digit SIC codes, such as 7372. See SIC codes.
Six-digit NAICS codes, 2017 or 2022 edition, such as 522320. See NAICS codes.
SearchFilter
includeValues to include.
excludeValues to exclude.
PremiumSearchFilter
includeValues to include. A company matches when it matches any of them.
excludeValues to exclude.
RevealSearchResponse
successAlways true.
One page of companies, up to 50.
Paging, and the filters the search used.
RevealMeta
totalNumber of companies that match.
pageThe page returned. 0 if the search fails.
limitCompanies per page. Always 50.
pagesNumber of pages.
The filters the search used: the ones you sent, or the ones generated from query. Only filters that were set appear. Send them as filters to get more pages of the same search.
RevealData
The companies on this page, most popular domain first, or most relevant first when you filter by keywords. null if the search fails.
Company
nameCompany name.
descriptionShort description of the company.
countryTwo-letter country code (ISO 3166-1 alpha-2) of the headquarters.
stateState or region.
cityCity.
street_addressStreet address.
postal_codePostal code.
industryIndustry. Free text; not a fixed list.
company_sizeEmployee count range, such as 51-200. Free text; not a fixed list.
typeCompany type. Currently always an empty string.
foundedYear the company was founded.
website_urlCompany domain, such as stripe.com.
total_emailsNumber of email addresses Tomba has for the domain.
revenueEstimated annual revenue range. Free text; not a fixed list.
phone_numberWhether Tomba has a phone number for the company. Currently always false.
linkedin_urlLinkedIn company page URL, such as https://linkedin.com/company/stripe.
facebook_urlFacebook page URL, such as https://facebook.com/StripeHQ.
twitter_urlTwitter (X) profile URL, such as https://x.com/stripe.
total_similarNumber of similar companies Tomba has for the domain.
DomainSearch
The company and its email addresses.
Paging for the email addresses, and the request as the API read it.
EmailFinder
The person and their email address.
EmailSource
uriURL of the page where the address was found.
website_urlHost name of that page, such as stripe.com.
extracted_onWhen Tomba first found the address on the page, in RFC 3339 format.
last_seen_onWhen Tomba last saw the address on the page, in RFC 3339 format.
still_on_pagetrue if the address was on the page when Tomba last checked it.
FinderVerification
dateWhen Tomba last checked the address, in RFC 3339 format.
statusResult of the last check: valid, accept_all, invalid, or unknown. See Status values.
PhoneData
validtrue if the number is valid in its country's numbering plan.
local_formatNational format, such as (415) 555-0132.
intl_formatInternational format, such as +1 415-555-0132.
e164_formatE.164 format, such as +14155550132.
rfc3966_formatRFC 3966 URI, such as tel:+1-415-555-0132.
country_codeTwo-letter country code (ISO 3166-1 alpha-2) of the number.
line_typeLine type. FIXED_LINE_OR_MOBILE means the numbering plan doesn't distinguish landlines from mobiles; for US, Canadian, and Mexican numbers Tomba replaces it with MOBILE, FIXED_LINE, VOIP, or TOLL_FREE when the number's block is classified. Voicemail numbers are reported as UNKNOWN. See Line types.
carrierCarrier the number was assigned to. Empty when unknown.
regionState or province of the number. null when the number doesn't identify one.
timezonesIANA time zones of the number, such as America/Los_Angeles.
emailPhone finder only. The email address the number was found for. Left out when empty.
domainPhone finder only. The domain the number was found for. Left out when empty.
linkedinPhone finder only. The LinkedIn profile URL the number was found for. Left out when empty.
EmailVerifier
The verification result.
EnrichmentPersonAPI
A person in Clearbit's field format. Fields Tomba doesn't fill are always null: timeZone, utcOffset, bio, site, avatar, fuzzy, emailProvider, activeAt, inactiveAt, geo.city, geo.state, geo.stateCode, geo.lat, geo.lng, employment.subRole, employment.seniority, facebook.handle, every github and gravatar field, and every twitter field except handle. See Clearbit-compatible enrichment.
The lookup.
EnrichmentCompanyAPI
A company in Clearbit's field format. Fields Tomba doesn't fill are always null: domainAliases, timeZone, utcOffset, logo, ticker, identifiers.usEIN, category.sector, category.industryGroup, category.industry, category.subIndustry, geo.subPremise, geo.lat, geo.lng, facebook.likes, every twitter field except handle, metrics.alexaUsRank, metrics.alexaGlobalRank, metrics.marketCap, metrics.raised, metrics.fiscalYearEnd, parent.domain, and ultimateParent.domain. See Clearbit-compatible enrichment.
The lookup.
EnrichmentCombinedAPI
The person and the company.
The lookup.
EmailCount
The counts.
website_idTomba's internal ID for the domain's company record. 0 when Tomba has no record of the domain.
Location
One entry per country, in no particular order. An empty array when Tomba has no location data for the domain.
EmailSources
The sources, at most 20. An empty array, with status 201, when Tomba has none.
emailThe address you asked about, trimmed and in lowercase.
EmailFormat
Up to 20 formats, in no particular order. An empty array when Tomba has no formats for the domain.
DomainSimilar
Similar companies. null when Tomba has none for the domain.
Paging.
DomainTechnology
One entry per technology. null when Tomba has no technology data for the domain.
domainThe domain you asked about. Left out when data is null.
PhoneFinder
One phone number, or an array of phone numbers. An empty array when nothing is found.
emailThe email you sent, in lowercase. Only in a response without results.
domainThe domain you sent, normalized. Only in a response without results.
linkedinThe linkedin profile you sent, reduced to its permalink, such as jane-doe. Only in a response without results.
Lead
idLead ID.
user_idUser who saved the lead.
emailEmail address, in lowercase. Empty when the lead was saved without one.
list_idID of the lead's list.
first_nameFirst name.
last_nameLast name.
countryTwo-letter country code, for example US.
website_urlCompany domain.
positionJob title.
twitterTwitter profile URL.
linkedinLinkedIn profile URL.
phone_numberPhone number.
companyCompany name.
notesNotes.
lead_sourceWhere the lead came from: domain (domain search), finder (email finder), verify (email verifier), or browser (browser extension).
scoreLead score, up to 100.
sync_statusState of the last sync to a connected app: pending, error, or success.
sync_airtableWhether the lead was synced to Airtable.
sync_hubspotWhether the lead was synced to HubSpot.
sync_mailchimpWhether the lead was synced to Mailchimp.
sync_pipedriveWhether the lead was synced to Pipedrive.
created_atWhen the lead was saved.
updated_atWhen the lead was last changed.
The lead's list. Every field is null when the lead isn't in a list you can see.
Custom attribute values, keyed by the attribute's identifier. Values are strings. Empty when the lead has none. At most 25 are returned.
LeadAttribute
idAttribute ID.
user_idUser who created the attribute.
nameAttribute name.
identifierKey for the attribute's values in a lead's attributes: the name as a lowercase slug, so Deal size becomes deal-size.
typeValue type: string, date, or number.
created_atWhen the attribute was created.
updated_atWhen the attribute was last changed.
LeadsList
idList ID.
user_idUser who created the list.
sizeNumber of leads in the list. It's a counter updated as leads are added, moved, and deleted, so it can differ from the number of leads GET /leads?list= returns.
nameList name.
favoriteWhether the list is marked as a favorite.
created_atWhen the list was created.
updated_atWhen the list was last changed.
typeList type. Lists created with this API have campaigns. Absent when empty.
APIKey
idKey ID.
user_idUser ID of the key's owner. A key authenticates as its owner, and its requests are charged to the owner.
keyThe key value, ta_ followed by 37 characters. Send it as X-Tomba-Key.
nameLabel for the key.
ipIP address the key was created or last rotated from.
created_atWhen the key was created.
updated_atWhen the key was last changed.
is_ownertrue when the key is yours, false when it belongs to a workspace teammate.
expiredWhether the key is past its expiry date.
expires_atWhen the key stops working. Requests with an expired key fail with 400 api_key_expired. Absent for the rare keys without an expiry date.
created_byUser ID of whoever created the key. Absent on older keys.
last_used_atLast time the key authenticated a request, updated at most once an hour. Absent if the key hasn't been used.
expires_in_daysWhole days until the key expires, negative once it has expired. Absent when expires_at is absent.
creator_nameName of whoever created the key, or their email address when they have no name. Absent when the creator is unknown.
creator_emailEmail address of whoever created the key. Absent when the creator is unknown.
creator_imageProfile image URL of whoever created the key. Absent when there's none.
Usage
One row per user and day with charged credits, oldest first. Days without charged credits have no row. The source_* counters split the day's credits, of every type, by where the requests came from. null when the range has no rows.
Sums over the rows in data. There's no email_count total.
Log
idLog row ID.
user_idUser who made the request.
urihttps://api.tomba.io plus the path for the lookup's type, without query parameters. It can differ from the path you called, which is in endpoint. Empty when the type isn't recognized.
The request's query parameters and top-level JSON body fields, as strings.
typeName of the lookup type, for example Domain Search, Email Finder, or Email Verification. Some bulk download rows show the credit type instead: search or verifier.
hashFingerprint of the request's parameters. Tomba uses it to recognize a repeat of a lookup already charged in the current usage window.
costCredits charged. 0 for a repeat of a lookup already charged in the current usage window.
sourceWhere the request came from: API, Website, Browser extension, Google Sheets add-on, Bulk API, or MCP Agent.
countryTwo-letter country code of the caller's IP address. Empty when unknown.
user_agentThe request's User-Agent header.
ip_addressThe caller's IP address.
created_atWhen the request was made.
route_nameInternal route name, for example domain-search, enrich-finder, or SearchCompanies. Absent on older rows.
http_methodHTTP method. Absent on older rows.
status_codeHTTP status of the response, always 200. Absent on older rows.
request_idRequest ID, on rows that recorded one. Rows logged by the current API don't record it, so the field is usually absent.
endpointPath you called, for example /v1/domain-search. Absent on older rows.
api_key_idID of the API key that made the request. Absent for requests made with an OAuth access token or from the dashboard.
duration_msTime Tomba took to handle the request, in milliseconds. Absent on older rows.
APIErrorResponse
Error details object used in reusable error responses.
BulkCreate
nameJob name, 3 to 200 characters. Required, except for a domain export, which is named after its domain.
listOne value per line, or a JSON array of values. Tomba trims, lowercases, and de-duplicates the values, drops the invalid ones, and keeps the first ones up to the type's row limit. Not accepted by finder.
dataRows of cells, for input with several columns. The first row is a header unless has_header is false. In a multipart form, send it as a JSON-encoded string.
has_headerWhether the first row of data or of the file is a header. A list has no header.
delimiterColumn separator of the uploaded file: ,, ;, |, or tab. Any other value is read as ,.
domainThe domain to export. Required for export, and used by no other type.
domain_field_indexZero-based column of the domain or website. Used by search, similar, company, finder, and phone-finder.
company_name_field_indexZero-based column of the company name. Used by search, similar, company, and finder.
first_name_field_indexZero-based column of the first name. Used by finder.
last_name_field_indexZero-based column of the last name. Used by finder.
full_name_field_indexZero-based column of the full name. Used by finder.
email_field_indexZero-based column of the email address. Used by enrich, verifier, and phone-finder.
linkedin_url_field_indexZero-based column of the LinkedIn profile URL. Used by linkedin and phone-finder.
url_field_indexZero-based column of the article URL. Used by author.
phone_field_indexZero-based column of the phone number. Used by phone-validator.
country_field_indexZero-based column of the country code. Used by phone-validator.
technology_field_indexZero-based column of the technology slug. Used by technology.
input_typeUsed by search, similar, and company: whether the input is domains or company names. Defaults to company when the input has a company name column and no domain column, and to domain otherwise.
max_emails_per_domainUsed by search and similar. Addresses returned per domain.
email_typeUsed by search. With email_type_mode only, only addresses of this type are returned.
email_type_modeonly returns only the addresses of email_type; priority returns every type.
departmentsUsed by search. With departments_mode only, only addresses in these departments are returned.
departments_modeonly returns only the addresses in departments; priority returns every department.
verify_emailsUsed by search: verifies the addresses found. It is turned off, without an error, when max_emails_per_domain is above 10 or the input has more than 2,000 rows. similar, company, finder, enrich, linkedin, and author accept it, but it only adds verification credits there; see Billing.
find_phonesAdds phone numbers, at an extra cost. Used by search, company, finder, enrich, linkedin, verifier, and export.
include_sourcesAdds the web pages where each address was found. Used by search, finder, enrich, linkedin, author, verifier, and export.
boost_score_from_sourcesUsed by search. Adds 10 points, up to 90, to the score of an address that couldn't be verified but was found on at least 5 web pages.
skip_rows_with_emailUsed by finder. Skips the rows that already have a value in a column named email.
find_all_phonesUsed by phone-finder. Returns every phone number found instead of one.
filterUsed by export. The addresses to export, by type or by department.
notifyEmails you when the job finishes with at least one result.
launchLaunches the job right after creating it. If it can't start, it stays pending and data.message in the response says why. A domain export always starts.
webhook_urlAn https:// URL that receives an event when the job completes, fails, or is cancelled. At most 2,048 characters, without a username or password, on a host with a public IP address. See Bulk job events.
BulkJob
bulk_idJob ID.
user_idID of the user who created the job.
bulk_typeThe job's type. Phone finder jobs are phone.
namestatuspending until launched, then running. completed, failed, and cancelled are final.
archivedprogressPercentage of the rows processed.
processedRows processed.
billedWhether the results were downloaded, which charges the job, once.
error_messageWhy the job failed.
retry_countHow many times the job was retried.
created_atstarted_atcompleted_atcancelled_atexpiredWhether expired_at has passed. An expired job can no longer be downloaded, launched, or retried.
expired_at180 days after created_at. Download the results before this date.
The job's input and options, as set when it was created.
The job's results. They are updated while the job runs (partial is true) and final once it completes.
The first rows of the results, once billed is true; an empty array before. Their fields depend on the type.
BulkConfig
vVersion of this document. Currently 1.
The options, with their defaults filled in. See POST /bulk/{type} for each one.
notifyWhether an email is sent when the job finishes with results.
Where job events are sent. Absent without webhook_url.
technology only: your search balance when the job was created, which caps the websites returned per technology.
BulkMetrics
vVersion of this document. Currently 1.
partialtrue while the job is running.
Only the distributions that apply to the type are present.
Types that return email addresses only.
Types that return phone numbers only.
Credits of a job. Phone data is billed as search credits: phone is included in search, and total is search plus verify.
BulkCredits
searchverifyphonetotalBulkProgress
statuspending until the job is launched. completed, failed, and cancelled are final.
progressPercentage of the rows processed.
processedRows processed so far.
error_messageWhy the job failed.
rows_per_minuteProcessing speed. null until enough rows are processed.
eta_secondsEstimated seconds until the job completes. null until enough rows are processed.
The job's results. They are updated while the job runs (partial is true) and final once it completes.
BulkEstimate
bulk_idstatusbasisupper_bound before the job completes, exact after.
billedWhether the job was already charged. Later downloads are free.
rowsRows to process.
Credits of a job. Phone data is billed as search credits: phone is included in search, and total is search plus verify.
Your remaining search and verification credits.
sufficientWhether your remaining credits cover credits. Always true once billed.
noteBulkEvent
iduser_idThe user who acted, or null for Tomba.
eventactormessageWhy the job failed, for failed events.
Details of the event, such as the row counts of created, the file and whether it was billed for downloaded, or the attempt and HTTP status of a webhook delivery.
created_atBulkTypeInfo
typeThe bulk_type of its jobs.
pathThe {type} in its URLs.
labeldescriptionapp_pathIts page in the web app, under https://app.tomba.io/bulk/.
storageallows_uploadWhether it accepts a file.
file_requiredWhether it needs data or file, and refuses a list.
primary_fieldThe field a list or a single column is read as.
optionsThe options it accepts.
max_rowscreates_per_daydownloads_per_job_per_dayauto_launchWhether its jobs start when created.
downloadsThe result files it can have.
distributionsThe metrics.distribution keys it fills.
phone_credits_per_phoneSearch credits per phone number found.
BulkStats
fromtoJobs created in the period, by status.
rows_processedfoundemails_foundhit_rateCredits of a job. Phone data is billed as search credits: phone is included in search, and total is search plus verify.
BulkWebhookSecret
secretwhsec_ followed by the base64-encoded key.
created_atrotated_atBulkActionResult
statusAlways true.
messageWhat was done.
codeAlways 200.
BulkPutRename
nameNew name of the job, 3 to 200 characters.
PaginationMeta
totalTotal number of items
pageSizeItems per page
currentCurrent page number
total_pagesTotal number of pages
APIError
typeMachine-readable error type.
messageHuman-readable error message.
codeHTTP status code associated with the error.
DomainSuggestionsResponse
Suggested companies. An empty array when nothing matches, null if the lookup fails.
The query and the maximum number of suggestions.
DomainSuggestion
nameCompany name.
domainCompany domain.
email_countNumber of email addresses Tomba has for the domain.
SuggestionsMeta
queryYour query, trimmed and in lowercase. Empty if the lookup fails.
limitMaximum number of suggestions. Always 5, or 0 if the lookup fails.
LinkedinFinder
One result, or an array of results with full=true.
LinkedinFinderData
emailThe email address. null when no address is found.
first_nameFirst name.
last_nameLast name.
full_nameFirst and last name.
website_urlCompany domain, such as stripe.com.
companyCompany name.
patternFormat of the address, such as {first}.{last}. null with full=true. See Patterns.
departmentDepartment, such as engineering. Empty when unknown, null with full=true. See Departments.
typepersonal for an address that belongs to one person, generic for a role address. null with full=true.
positionJob title.
countryTwo-letter country code (ISO 3166-1 alpha-2).
gendermale or female.
twitterTwitter (X) profile URL.
linkedinLinkedIn profile URL.
scoreConfidence from 0 to 100 that the address is correct, based on its last verification result and the number of public sources that list it. 0 when no address is found.
accept_alltrue when the domain's mail server accepts mail for any address (catch-all).
phone_numbertrue when Tomba has a phone number for the person. Set enrich_mobile=true to get it in phone_data.
Public pages where the address appears. null when no address is found.
Result of Tomba's last check of the address. Both fields are null when Tomba hasn't checked it.
Phone numbers for the person when you set enrich_mobile=true, otherwise an empty array. Left out when no address is found, with full=true, and for an address found by a live check.
LinkedinFinderSource
uriURL of the page where the address was found.
website_urlHost name of that page, such as stripe.com.
extracted_onWhen Tomba first found the address on the page, in RFC 3339 format.
last_seen_onWhen Tomba last saw the address on the page, in RFC 3339 format.
still_on_pagetrue if the address was on the page when Tomba last checked it.
LinkedinFinderVerification
dateWhen Tomba last checked the address, in RFC 3339 format.
statusResult of the last check.
AuthorFinder
The article's author and their email address.
AuthorInfo
urlThe article URL.
titleArticle title.
og_imageURL of the article's Open Graph image.
descriptionArticle description.
article_domainDomain that hosts the article.
publisher_nameName of the publication.
publish_datePublication date, as it appears on the page.
People named as the author on the page, best match first. null when none were found.
FlagCreateRequest
flag_typeWhat you're reporting.
valueThe item you're reporting, such as the email address, domain, phone number, or URL.
reasonWhy the data is wrong. Each flag_type accepts its own reasons, and any other combination fails with 422:
email:hard_bounce,invalid_email,wrong_person,outdated,otherorganization:wrong_company,outdated,otherphone:wrong_phone,outdated,otherauthor_url:broken_url,wrong_person,outdated,otherwebsite:broken_url,wrong_company,outdated,other
Only an email report with hard_bounce can return a credit, once Tomba confirms it.
commentDetails that help Tomba review the report, such as the bounce message your mail server received.
FlagItem
idReport ID.
flag_typeWhat was reported.
valueThe reported item.
reasonWhy the data was reported.
statusReview status. A new report is pending until Tomba confirms or rejects it.
credits_refundedCredits returned for the report: 1 when Tomba confirmed an email report with the reason hard_bounce and returned a search credit, otherwise 0.
created_atWhen you submitted the report.
commentYour comment. Absent when you didn't send one.
resolved_atWhen Tomba reviewed the report. Absent until then.
FlagResponse
FlagListResponse
Your reports, one page at a time.
RateLimits
One entry per route name. The response always has these 21 keys: domain-search, email-finder, email-verifier, email-count, email-sources, email-format, author-finder, enrich, linkedin, phone, phone-validator, similar, technology, domain-suggestions, me, searches, location, enrich-email, enrich-company, enrich-combined, and reveal.
Most keys match the endpoint path. The others:
phonecovers/phone-finder.enrich-email,enrich-company, andenrich-combinedcover/people/find,/companies/find, and/combined/find.searchescovers searches made in the Tomba dashboard.revealis listed but not enforced, so its usage is always0./reveal/searchhas a fixed limit instead.
RouteLimits
rpsRequests per second.
rpmRequests per minute.
dailyRequests per day. The day runs from 00:00 UTC.
PhoneValidator
The number's details, or an empty array when the number isn't valid.
phoneThe phone you sent. Only in the response for a number that isn't valid.
EnrichmentPersonData
The person's name.
emailThe email address.
locationTwo-letter country code (ISO 3166-1 alpha-2). Clearbit returns a full location here.
gendermale or female.
timeZoneAlways null.
utcOffsetAlways null.
Location. Only country and countryCode are filled.
bioAlways null.
siteAlways null.
avatarAlways null.
Current employer and job.
Facebook profile. handle is always null.
Every field is always null.
Twitter (X) profile. Only handle is filled.
LinkedIn profile.
Every field is always null.
phonetrue when Tomba has a phone number for the person.
fuzzyAlways null.
emailProviderAlways null.
indexedAtWhen Tomba last updated the record, in RFC 3339 format.
activeAtAlways null.
inactiveAtAlways null.
Result of Tomba's last check of the address. Both fields are null when Tomba hasn't checked it.
EnrichmentCompanyData
nameCompany name.
legalNameSame value as name.
domainThe domain.
domainAliasesAlways null.
Contact details found on the website.
Industry codes. sector, industryGroup, industry, and subIndustry are always null.
tagsKeywords that describe the company.
descriptionShort description of the company.
foundedYearYear the company was founded, as a string.
locationTwo-letter country code (ISO 3166-1 alpha-2) of the headquarters.
timeZoneAlways null.
utcOffsetAlways null.
Headquarters address.
logoAlways null. Use the Logo API.
Facebook page.
LinkedIn company page.
Twitter (X) profile. Only handle is filled.
Domain registration from the WHOIS record, with snake_case keys. Not a Clearbit field.
emailProviderMail provider detected from the domain's MX records, such as Google. Clearbit returns a boolean here.
typeCompany type, such as private. Free text; not a fixed list.
tickerAlways null.
Business identifiers. usEIN is always null.
Size and traffic. Only trafficRank, employees, annualRevenue, and estimatedAnnualRevenue are filled.
indexedAtWhen Tomba last updated the record, in RFC 3339 format.
techNames of the technologies detected on the website.
techCategoriesCategories of those technologies.
Parent company. domain is always null.
Ultimate parent company. domain is always null.