TombaTomba
Start free
  • Documentation
  • API reference
  • SDKs & CLI
  • AI & MCP
  • Integrations
  • Enterprise
  • Migration guides

Find, verify and enrich B2B contacts from public sources, in the app, your spreadsheet or through the API.

GDPR & CCPA

// docs

  • API changelog
  • Support options
  • Security

// platform

  • Dashboard
  • Pricing
  • API status

// resources

  • Help center
  • Product updates
  • TombaBot crawler

// company

  • Website
  • Contact us
  • Edit or remove your data

© 2021–2026 Tomba.io

  • Terms of service
  • Privacy policy
  • Cookie policy
  • Security policy
  • GDPR
  • CCPA
SDKs
CLI
    InstallationAuthenticationCLI commandsBulk CSV processingLocal HTTP serverAI chatSkillsSlack slash commands
CLI

Bulk CSV processing

tomba bulk reads a CSV file, sends one API request per row from your machine, and writes the results to a new CSV file. It doesn't use the Bulk API, so every row is billed and rate-limited as a separate request.

How it differs from the Bulk API

tomba bulkBulk API
Where it runsOn your machine: one request per rowOn Tomba's servers: one job for the whole list
CreditsEach row, like a single request (Credit costs); the duplicate-request rule applies to each rowPer job, when you first download the results (Billing)
Rate limitsEach row counts toward your rate limitsThe job limits in Limits
ResultsA CSV file written as rows completeA CSV file you download when the job completes

Usage

Code
tomba bulk --file <input.csv> --type <type> [column flags] [--output <output.csv>]

The input must be a comma-separated file with a header row. Rows shorter than the header are padded, and rows whose input cell is empty are skipped without a request.

Types

--typeCallsInput columns
enrich (default)GET /v1/enrichEmail
verifyGET /v1/email-verifierEmail
finderGET /v1/email-finderDomain, and first and last name or full name
searchGET /v1/domain-searchDomain
authorGET /v1/author-finderArticle URL
linkedinGET /v1/linkedinLinkedIn profile URL
phoneGET /v1/phone-finderEmail, domain, or LinkedIn profile URL
phone-validatorGET /v1/phone-validatorPhone number, and optionally a country code
companyGET /v1/companies/findDomain
similarGET /v1/similarDomain
sourcesGET /v1/email-sourcesEmail

Flags

FlagTypeDefaultDescription
--filestring—Input CSV file. Required.
--typestringenrichLookup to run for each row. See Types.
--columnstring—Email column. For phone-validator, also used as the phone column when no phone column is found.
--domain-colstring—Domain column.
--first-colstring—First-name column, for finder.
--last-colstring—Last-name column, for finder.
--full-name-colstring—Full-name column, for finder, instead of first and last name.
--url-colstring—URL column, for author, linkedin, and LinkedIn URLs with phone.
--phone-colstring—Phone column, for phone-validator.
--country-code-colstring—Country-code column, for phone-validator.
--enrich-mobileboolfalseAlso return phone numbers, for enrich, finder, and linkedin. Phone data changes the cost.
--fullboolfalseReturn up to 10 phone numbers per row, for phone.
--concurrencyint0Number of parallel workers. 0 picks a number based on your plan. The maximum is 60.
--no-resumeboolfalseOverwrite the output file and process every row.
--output, -ostring<input>_enriched.csvOutput file.

The global flags --key, --secret, and --no-color also apply.

Map columns

Column names are matched without regard to case. If you don't pass a column flag, the CLI looks for these header names:

InputHeader names
Emailemail, e-mail, email_address, emailaddress, mail
Domaindomain, company_domain, website, company_website
First namefirst_name, firstname, first, fname
Last namelast_name, lastname, last, lname
Full namefull_name, fullname, full name
URLurl, link, linkedin, linkedin_url, article_url, profile_url
Phonephone, phone_number, phonenumber, tel, telephone
Country codecountry_code, countrycode, country

--column sets the email column, not the domain column. For types that take a domain, pass --domain-col: with --column domain, the CLI treats that column as email addresses and asks for the domain column.

When it can't find a required column, the CLI asks you to pick one from a list. Without an interactive terminal, such as in CI, it exits with Could not find ... column; pass the column flags explicitly there.

Output file

The output has your input columns followed by the result columns for the type. search and similar write one row per address or company found, repeating the input columns; search gets the first page of results, at the API's default limit. Results are written as they arrive from the workers, so the output rows can be in a different order than the input.

When the run ends, the CLI prints a summary with the number of rows found, not found, skipped, and failed with client (4xx and network) or server (5xx) errors.

Resume a run

By default, if the output file already exists with the expected columns, the CLI skips the rows it already contains and appends the rest. A row counts as done when a row with the same input values is in the output file.

Rows that fail, for example with 429 or 402, are written with empty result columns, so a resumed run treats them as done and doesn't retry them. To retry them, delete those rows from the output file and run the command again, or rerun everything with --no-resume. The CLI doesn't retry or slow down after a 429; if the summary shows client errors, lower --concurrency and see Handle 429 responses.

If the output file exists but its columns don't match, for example because you changed --type, the CLI starts a fresh run and overwrites the file. The default output name doesn't include the type, so pass --output to keep the results of each type in a separate file.

Examples

TerminalCode
# Verify the addresses in the "Email Address" column tomba bulk --file leads.csv --type verify --column "Email Address" # Find addresses from domain and name columns tomba bulk --file prospects.csv --type finder --domain-col company_domain --first-col first --last-col last # Search each domain and write the results to a chosen file tomba bulk --file domains.csv --type search --domain-col domain --output domain-search.csv # Validate phone numbers, using a country-code column for local numbers tomba bulk --file phones.csv --type phone-validator --phone-col phone --country-code-col country
Last modified on September 30, 2026
CLI commandsLocal HTTP server
On this page
  • How it differs from the Bulk API
  • Usage
  • Types
  • Flags
  • Map columns
  • Output file
  • Resume a run
  • Examples