Skip to content

// post /v1/bulk/finder

Bulk Email Finder API

Resolve thousands of name and company combinations into verified professional emails through one bulk API job.

Names, with a domain or company nameUp to 10,000 rows
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"}'

// 01 · request

Bulk Email Finder is one HTTPS request

Send the parameters with your key and secret. Every SDK, the CLI and the MCP server make this same call.

type
finder
list | data | file
Names, with a domain or company name
launch
true starts the job at once
webhook_url
Receives a signed event when the job ends
rows
Up to 10,000 per job
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"}'

// 02 · response

What comes back

JSON, the same in every language. Fields Tomba doesn't know are null, never guessed.

GET/email-finder
data.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
  }
}
Each row, as GET /email-finder returns it
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 · cost and limits

What a call costs

A call is charged only under the condition below. Rate limits depend on your plan.

// cost

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)

// faq

Frequently asked questions

Still have questions? Visit the help center

// start free

See who Tomba finds at any company

Type a company's domain to see its people, their roles and verified work emails, each with the pages it was found on. Free account, no card.