// post /v1/bulk/search
API de recherche de domaine en masse
Découvrez les e-mails des décideurs sur des centaines de domaines dans une seule tâche API asynchrone avec des résultats prêts à l'exportation.
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"]// 01 · requête
Domain Search en masse tient en une requête HTTPS
Envoyez les paramètres avec votre clé et votre secret. Chaque SDK, la CLI et le serveur MCP effectuent ce même appel.
- type
- search
- list | data | file
- Domains or company names
- launch
- true lance la tâche immédiatement
- webhook_url
- Reçoit un événement signé à la fin de la tâche
- rows
- Jusqu'à 25,000 par tâche
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"]// 02 · réponse
Ce qui est renvoyé
Du JSON, identique dans tous les langages. Les champs que Tomba ne connaît pas valent null, jamais une supposition.
/domain-searchdata.organizationobject- Company name, location, social links, industry, size, revenue, description, pattern
data.organization.accept_allboolean- The domain accepts mail for any address (catch-all)
data.emails[].emailstring- Each address found
data.emails[].full_name, data.emails[].position, data.emails[].departmentstring | null- Name, job title and team
data.emails[].senioritystring | null- junior, senior or executive
data.emails[].scoreinteger- Confidence from 0 to 100
data.emails[].verification.statusstring | null- valid, accept_all, invalid or unknown, with verification.date
data.emails[].sources[]array- Where each address was found
meta.total, meta.total_pagesinteger- Addresses that match, and pages at this pageSize
meta.current, meta.pageSizeinteger- This page and its size
meta.paramsobject- The parameters the search ran with
{
"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": "Middle-out compression for files and video.",
"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 · coût et limites
Ce que coûte un appel
Un appel n'est facturé que dans la condition ci-dessous. Les limites de débit dépendent de votre offre.
// coût
Per domain with at least one address: 1 search credit per 10 addresses returned, at most 10. Plus 5 per address with phone data.
Charged once, at the first download; later downloads are free
- 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)