// bulk operations
Bulk Domain Search
Upload a CSV of company domains and find all associated email addresses at once.
- 01pending
POST /v1/bulk/search201 · { "data": { "id": 1042 } } - 02running
launch: trueprogress polled with GET /v1/bulk/search/1042/progress - 03completed
bulk.completedsigned webhook delivered to your webhook_url
GET /v1/bulk/search/1042/download?file=fullCharged at the first download · the job expires after 180 days// 01 · input
The input of a bulk Domain Search job
Upload a CSV of up to 4 MB in the app, or send a list, rows or a file to POST /v1/bulk/search. Columns are found from the header row; set a field index to choose one yourself.
/bulk/searchColumnsdomain_field_index- Domain
company_name_field_index- Company name
/bulk/searchOptionsinput_type- domain or company; company when the input has a company name column and no domain column
max_emails_per_domain- Addresses per domain: 1, 10 (the default), 20, 50 or 100
email_type, email_type_mode- all (the default), personal or generic; only (the default) or priority
departments, departments_mode- Department names such as ["sales", "marketing"]; only or priority
verify_emails- true verifies the addresses found
find_phones- true adds phone numbers, at an extra cost
include_sources- true adds the web pages where each address was found
boost_score_from_sources- true adds 10 points, up to 90, to an unverified address found on at least 5 pages
// 02 · api
One request starts the job
Create and launch it in one call, then follow its progress or receive a signed bulk.completed event. Each result row is what GET /domain-search returns.
curl -X POST "https://api.tomba.io/v1/bulk/search" \
-H "X-Tomba-Key: $TOMBA_API_KEY" \
-H "X-Tomba-Secret: $TOMBA_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Domain Search job","list":"piedpiper.com\nshopify.com\nnotion.so","launch":true,"webhook_url":"https://hooks.example.com/tomba"}'const res = await fetch("https://api.tomba.io/v1/bulk/search", {
method: "POST",
headers: {
"X-Tomba-Key": process.env.TOMBA_API_KEY,
"X-Tomba-Secret": process.env.TOMBA_SECRET_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
"name": "Domain Search job",
"list": "piedpiper.com\nshopify.com\nnotion.so",
"launch": true,
"webhook_url": "https://hooks.example.com/tomba"
})
});
const { data } = await res.json(); // { id }import os, requests
res = requests.post(
"https://api.tomba.io/v1/bulk/search",
headers={
"X-Tomba-Key": os.environ["TOMBA_API_KEY"],
"X-Tomba-Secret": os.environ["TOMBA_SECRET_KEY"],
},
json={
"name": "Domain Search job",
"list": "piedpiper.com\nshopify.com\nnotion.so",
"launch": True,
"webhook_url": "https://hooks.example.com/tomba"
},
)
job_id = res.json()["data"]["id"]{
"data": {
"id": 1042
}
}{
"data": {
"organization": {
"website_url": "piedpiper.com",
"organization": "Pied Piper",
"location": {
"country": "US",
"city": "Palo Alto",
"state": "CA",
"street_address": "5230 Newell Road",
"postal_code": "94303"
},
"social_links": {
"twitter_url": null,
"facebook_url": null,
"instagram_url": null,
"linkedin_url": "https://www.linkedin.com/company/pied-piper",
"github_url": null,
"youtube_url": null,
"pinterest_url": null,
"tiktok_url": null
},
"disposable": false,
"webmail": false,
"phone_number": false,
"industries": "computer software",
"founded": "2014",
"company_size": "11-50",
"company_type": "privately held",
"revenue": null,
"accept_all": false,
"description": "Pied Piper builds middle-out compression for files, video and a decentralized internet.",
"pattern": "{first}",
"total_similar": 2,
"keywords": [
"compression",
"middle-out",
"decentralized internet"
],
"ranking": null,
"whois": {
"registrar_name": null,
"created_date": null,
"referral_url": null
},
"last_updated": "2025-01-15T10:32:00+01:00"
},
"emails": [
{
"email": "dinesh@piedpiper.com",
"first_name": "Dinesh",
"last_name": "Chugtai",
"full_name": "Dinesh Chugtai",
"gender": "male",
"phone_number": false,
"type": "personal",
"country": "US",
"position": "Software Engineer",
"department": "engineering",
"seniority": "senior",
"twitter": null,
"linkedin": null,
"score": 99,
"verification": {
"date": "2025-01-15T10:32:00+01:00",
"status": "valid"
},
"phone_data": [],
"sources": [
{
"uri": "https://piedpiper.com/blog/engineering",
"website_url": "piedpiper.com",
"extracted_on": "2024-06-01T09:14:07+01:00",
"last_seen_on": "2025-01-10T17:02:44+01:00",
"still_on_page": true
}
]
},
{
"email": "gilfoyle@piedpiper.com",
"first_name": "Bertram",
"last_name": "Gilfoyle",
"full_name": "Bertram Gilfoyle",
"gender": "male",
"phone_number": false,
"type": "personal",
"country": "US",
"position": "Systems Architect",
"department": "engineering",
"seniority": "senior",
"twitter": null,
"linkedin": null,
"score": 97,
"verification": {
"date": "2025-01-15T10:32:00+01:00",
"status": "valid"
},
"phone_data": [],
"sources": [
{
"uri": "https://piedpiper.com/blog/engineering",
"website_url": "piedpiper.com",
"extracted_on": "2024-06-01T09:14:07+01:00",
"last_seen_on": "2025-01-10T17:02:44+01:00",
"still_on_page": true
}
]
}
]
},
"meta": {
"total": 12,
"pageSize": 10,
"current": 1,
"total_pages": 2,
"params": {
"domain": "piedpiper.com",
"company": "",
"page": 1,
"limit": 10,
"department": "engineering",
"country": null,
"type": "all",
"live": false,
"enrich_mobile": false,
"webhook_url": null
}
}
}// 03 · cost and limits
What a job costs
Nothing is charged to create or launch a job. Its cost is charged once, at the first download of its results.
// billing per row
Per domain with at least one address: 1 search credit per 10 addresses returned, at most 10. Plus 5 per address with phone data.
Bulk billing in the docs- Rows: up to 25,000 per job
- Jobs created: 15 per day for each type
- Running jobs: 2 per type
- Downloads: 25 per day for each job
- Request size: 4 MB (CSV, list or rows)
// 04 · use it anywhere
Run Domain Search jobs from the app or your code
The same job, the same credits: upload a file in the app, call the API, or work from a spreadsheet or a no-code tool.
- REST APIJSON over HTTPS, 13 SDKs, signed webhooks.
GET /v1/email-finder - Bulk CSVUpload a list in the app or POST it to /bulk; download when it's done.
POST /v1/bulk/{type} - Google Sheets and ExcelFormulas and a sidebar that call the same endpoints.
=TOMBA_VERIFY(A2) - Zapier, Make, n8nNo-code actions for the finder, verifier and enrichment.
Zapier · Make · n8n · Pipedream
The full request reference: /api/bulk/domain-search
// 5,000-lead benchmark
More valid emails than the eight other tools we tested
Real data. Same input. No human touch. Full transparency. We ran a head-to-head test using the same 5,000-line input file across multiple email-finding tools.
| Rank | Tool | From websites | From company names | Total |
|---|---|---|---|---|
| 1 | 2,02681% | 1,98979.6% | 4,015 | |
| 2 | 1,91876.7% | 1,95778.3% | 3,875 | |
| 3 | 1,88075.2% | 1,87775.1% | 3,757 | |
| 4 | 1,48359.3% | 1,61364.5% | 3,096 | |
| 5 | 1,00140% | 1,14145.6% | 2,142 | |
| 6 | 88735.5% | 99539.8% | 1,882 | |
| 7 | 1,05142% | 74930% | 1,800 | |
| 8 | 98839.5% | Under 1% found from company names: the tool needs a website or domain:190.8% | 1,007 | |
| 9 | 82433% | Under 1% found from company names: the tool needs a website or domain:220.9% | 846 |
Tomba.io found 4,015 valid emails from 5,000 leads: #1 of 9 tools tested.
Tomba’s own test, February 2026. One file of 5,000 leads, 2,500 with the company website and 2,500 with only the company name, ran through each tool with no manual cleanup. Only addresses a tool labelled valid or verified count; percentages are of the 2,500 inputs of each kind.
Under 1% found from company names: the tool needs a website or domain.