01
Work email finding
Full name plus domain or company in, a verified work email out — with a confidence score and catch-all flag. 1 credit per found address; a miss is free.
$ ctc find "Jane Smith" acme.com
Features
ContactCTL packs finding, verifying, enriching, and discovering B2B contacts into a CLI an agent can run end to end. Here is the full inventory.
01 — Find & enrich
Waterfall enrichment across 20+ premium data sources, behind one command per field. Charged only when a result is found.
01
Full name plus domain or company in, a verified work email out — with a confidence score and catch-all flag. 1 credit per found address; a miss is free.
$ ctc find "Jane Smith" acme.com
02
Already have the profile URL from your CRM or a licensed source? Pass it alone — no company anchor needed. No scraping involved at any point.
$ ctc find <linkedin_url>
03
One email in, the person and company behind it out: name, title, company profile. 1 credit per resolved profile.
$ ctc whois jane@acme.com
04
Higher-value fields stay intentional: --personal switches find to personal email (3 credits), and phone is its own verb at 10 credits — never an accident.
$ ctc phone "Jane Smith" acme.com
02 — Verify
Sub-second verification at 0.02 credits per address, single or batch.
01
Each check returns a status — deliverable, undeliverable, risky, unknown — plus a confidence score and a catch-all flag, so a send decision is one comparison.
$ ctc verify jane@acme.com
02
Syntax and MX validation run locally before any credit is spent. Obvious garbage never reaches the paid check.
$ ctc verify <email> --json
03
A CSV in, every row annotated out — batch verify defaults to stdout so it pipes. A 5,000-row list costs 100 credits.
$ ctc verify list.csv clean.csv
04
Cheap enough to run at the moment of sending, not just at import: a one-line guard clause in any script or agent loop blocks the bounce before it happens.
$ ctc verify "$EMAIL" --json | jq -r .status
03 — Search & lookalikes
Not a database dump — bounded searches at named accounts and expansion from seeds you trust.
01
People at a named company, filtered by titles, departments, seniority, or location. 0.25 credits per search request, regardless of rows.
$ ctc search people --domain acme.com --titles "VP Sales"
02
Companies by explicit attributes — industry, headcount range, type, location. Returns profiles for you to qualify before spending on contacts.
$ ctc search companies --industry "Software Development"
03
One seed in, similar records out: a domain returns similar companies, a LinkedIn URL returns similar people. 0.35 credits per returned row.
$ ctc lookalike acme.com --limit 25
04
Every accepted filter value — industries, seniorities, company types — printed locally, copy-friendly, for free. No guessed enums, no empty result mysteries.
$ ctc search filters seniorities
04 — Built for agents
Designed for the Bash tool, not the browser. Stable contracts everywhere an agent needs to branch.
01
ctc instructions prints the whole operating guide in ~60 lines. An agent reads it once per session — zero standing context cost, unlike resident tool schemas.
$ ctc instructions
02
Every command supports --json with stable shapes, versioned via the schema field in version --json. Parse once, trust it from then on.
$ ctc find "Jane Smith" acme.com --json
03
Found is 0, not-found is 2, budget cap is 4, timeout is 9. Scripts and agents branch on $? without parsing a single byte of output.
$ ctc verify $EMAIL || handle $?
04
No command waits for keyboard input — no confirmations, no wizards, no pagers. Safe in CI, cron, and full-auto agent modes by construction.
$ ctc whois inbound.csv out.csv
05 — Batch & automation
CSV/TSV batch on the four bulk verbs, with semantics designed for pipelines that run unattended.
01
Pass a file as the first positional and the verb goes batch; second positional is the output. Row order preserved, input columns untouched, errors reported per row.
$ ctc find leads.csv enriched.csv
02
Same input and output path? The result is written via temp-file-then-atomic-rename, so a crash mid-run can never corrupt your source file.
$ ctc verify contacts.csv contacts.csv
03
Long jobs return a run-id on timeout instead of dying. Reattach any time — results are waiting and nothing is billed twice.
$ ctc find --run-id <id> out.csv
04
Rate limits answer with a retry-after value, and the CLI honors it: sleep, retry, up to ~90 seconds. Pipelines see latency, never flakes.
$ ctc verify big-list.csv out.csv
06 — Cost control
Credits are one number. Every mechanism that touches them is explicit.
01
Add --estimate to any paid command and it prints the cost and exits — computed locally from the embedded price table. Zero spend, zero network.
$ ctc find leads.csv out.csv --estimate
02
Set --max-cost and the run stops before crossing it, exiting 4. A malformed file or runaway loop cannot drain the balance.
$ ctc find leads.csv out.csv --max-cost 100
03
find, phone, and whois bill per result, not per attempt. A clean miss costs exactly nothing — and is still reported per row.
$ ctc find "Jane Smith" acme.com
04
ctc usage shows the balance split (plan vs top-up) and recent spend, line by line. The dashboard mirrors the same numbers.
$ ctc usage --json
Wondering what these capabilities do for the business? Benefits ties each one to an outcome. Curious why this is a CLI at all? The CLI page makes the case.