// post /v1/bulk/finder
一括メール検索 API
1回の一括 API ジョブで、何千もの氏名と企業の組み合わせを検証済みのビジネスメールアドレスに変換します。
Names, with a domain or company name最大 10,000 行
curl -X POST "https://api.tomba.io/v1/bulk/finder" \
-H "X-Tomba-Key: $TOMBA_API_KEY" \
-H "X-Tomba-Secret: $TOMBA_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Conference leads","data":[["first_name","last_name","company_website"],["Richard","Hendricks","piedpiper.com"]],"launch":true,"webhook_url":"https://hooks.example.com/tomba"}'const res = await fetch("https://api.tomba.io/v1/bulk/finder", {
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": "Conference leads",
"data": [
[
"first_name",
"last_name",
"company_website"
],
[
"Richard",
"Hendricks",
"piedpiper.com"
]
],
"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/finder",
headers={
"X-Tomba-Key": os.environ["TOMBA_API_KEY"],
"X-Tomba-Secret": os.environ["TOMBA_SECRET_KEY"],
},
json={
"name": "Conference leads",
"data": [
[
"first_name",
"last_name",
"company_website"
],
[
"Richard",
"Hendricks",
"piedpiper.com"
]
],
"launch": True,
"webhook_url": "https://hooks.example.com/tomba"
},
)
job_id = res.json()["data"]["id"]// 01 · リクエスト
一括Email Finder は1回の HTTPS リクエストです
キーとシークレットとともにパラメーターを送信します。すべての SDK、CLI、MCP サーバーがこれと同じ呼び出しを行います。
- type
- finder
- list | data | file
- Names, with a domain or company name
- launch
- true ですぐにジョブを開始
- webhook_url
- ジョブ終了時に署名付きイベントを受信
- rows
- 1ジョブあたり最大 10,000 行
curl -X POST "https://api.tomba.io/v1/bulk/finder" \
-H "X-Tomba-Key: $TOMBA_API_KEY" \
-H "X-Tomba-Secret: $TOMBA_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Conference leads","data":[["first_name","last_name","company_website"],["Richard","Hendricks","piedpiper.com"]],"launch":true,"webhook_url":"https://hooks.example.com/tomba"}'const res = await fetch("https://api.tomba.io/v1/bulk/finder", {
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": "Conference leads",
"data": [
[
"first_name",
"last_name",
"company_website"
],
[
"Richard",
"Hendricks",
"piedpiper.com"
]
],
"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/finder",
headers={
"X-Tomba-Key": os.environ["TOMBA_API_KEY"],
"X-Tomba-Secret": os.environ["TOMBA_SECRET_KEY"],
},
json={
"name": "Conference leads",
"data": [
[
"first_name",
"last_name",
"company_website"
],
[
"Richard",
"Hendricks",
"piedpiper.com"
]
],
"launch": True,
"webhook_url": "https://hooks.example.com/tomba"
},
)
job_id = res.json()["data"]["id"]// 02 · レスポンス
返される内容
どの言語でも同じ JSON です。Tomba が把握していないフィールドは null となり、推測はしません。
GET
/email-finderdata.emailstring | null- The address, or null when none is found
data.scoreinteger- Confidence from 0 to 100
data.verification.statusstring | null- valid, accept_all, invalid or unknown, with verification.date
data.full_name, data.position, data.departmentstring | null- Name, job title and team
data.typestring | null- personal or generic (a role address such as sales@)
data.linkedin, data.twitterstring | null- Public profiles
data.sources[]array | null- Up to 20 public pages where the address was found, with dates
data.accept_allboolean | null- The domain accepts mail for any address (catch-all)
data.phone_numberboolean- Tomba holds a phone number for the person
data.phone_data[]array- The numbers, when you send enrich_mobile (each as in Phone Finder)
POST /bulk/finder
201 Created
{
"data": {
"id": 1042
}
}各行は GET /email-finder が返す形式です
200 OK
{
"data": {
"email": "richard@piedpiper.com",
"first_name": "Richard",
"last_name": "Hendricks",
"full_name": "Richard Hendricks",
"website_url": "piedpiper.com",
"company": "Pied Piper",
"pattern": "{first}",
"department": "executive",
"type": "personal",
"position": "CEO",
"country": "US",
"gender": "male",
"twitter": null,
"linkedin": "https://www.linkedin.com/in/richard-hendricks",
"score": 100,
"accept_all": false,
"phone_number": true,
"verification": {
"date": "2025-01-15T10:32:00+01:00",
"status": "valid"
},
"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
}
],
"phone_data": []
}
}// 03 · 料金と制限
呼び出しの料金
呼び出しは以下の条件の場合にのみ課金されます。レート制限はプランによって異なります。
// 料金
1 search credit per row whose address is verified valid. Plus 5 per row 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)
氏名とドメインのペアをアップロードして一括処理を作成し、処理を開始します。API がすべての検索を非同期で処理します。Webhook またはポーリングで処理の完了を確認し、結果をダウンロードしてください。
一括処理1回につき最大10,000件の氏名とドメインの検索を処理できます。それ以上のデータセットは、複数の一括処理を作成してください。
first_name、last_name、domain(企業の Web サイト)の列を含むデータをアップロードしてください。API が各人物について最も可能性の高いメールアドレスを見つけます。
処理時間はリストのサイズと必要なルックアップによって異なります。ジョブをポーリングするか、Webhookを設定して完了の通知を受け取ってください。
各結果には、メールアドレス、氏名、企業、役職、信頼度スコア、検証ステータス、ソースが含まれます。結果は CSV または JSON でダウンロードできます。
はい。Webhook URL を設定すると、一括処理の完了時に通知を受け取れます。Webhook のペイロードには bulk_id とステータスが含まれます。
GET /v1/bulk/email-finder/{bulk_id} で処理のステータスを確認できます。ステータスの値は pending、processing、completed、failed です。
メールアドレスが見つかるごとに1リクエストとしてカウントされます。結果が返らなかった検索はクォータにカウントされません。
正確な名と姓に、正しい企業のルートドメインを組み合わせてください。入力データがクリーンであるほど、一致の質と信頼度が大きく向上します。
はい。一括ジョブの完了後、結果を一括メール検証にかければ、キャンペーン開始前にバウンスのリスクを減らせます。