Skip to content

Persona

ContactCTL for GTM engineers

You build the outbound machine. ContactCTL gives you contact data as a primitive: positional commands, stable JSON, deterministic exit codes, and batch over stdin/stdout — so enrichment is a pipeline stage, not a browser tab.

01 — The problem

Every data vendor wants to be a destination

GTM engineering is glue work, and the glue keeps tearing at the same place: data vendors that only exist as dashboards. Each one adds a login, a CSV mapping wizard, an export queue, and an API that paginates differently from the last one.

ContactCTL is the opposite shape. It is a single binary with six work verbs — verify, whois, find, phone, search, lookalike — plus a few utility commands. Exit codes are meaningful (0 found, 2 not found, 4 budget exceeded), output is deterministic JSON with --json, and batch is just files in, files out, row order preserved. Everything an agent or a cron job needs, nothing it has to be taught.

Spend is engineering-grade too: --estimate computes cost locally with zero spend, --max-cost is a hard cap enforced mid-run, and a clean miss on find, phone, or whois is free.

02 — The workflow

How it runs

A nightly enrichment stage

Exit codes drive control flow, JSON drives data flow. This is the whole integration surface.

No retry logic needed: on rate limits the CLI backs off and retries automatically using the server’s retry_after value, so the script sees latency, not flakes.

nightly-enrich.sh
#!/usr/bin/env bash
set -euo pipefail

# 1. enrich new signups exported by the warehouse job
ctc whois signups.csv enriched.csv --max-cost 50

# 2. branch on a single lookup's exit code
if ctc find "$FULL_NAME" "$DOMAIN" --json > result.json; then
  jq -r '.contacts[0].value' result.json
else
  case $? in
    2) echo "no email found — route to manual" ;;
    4) echo "budget cap hit — stop the run" ;;
  esac
fi

03 — Commands and credits

What this workflow uses

Every command reports its credit cost in the output. Preview any spend with --estimate at zero cost.

CommandPurposeCredits
ctc whois <file.csv> [out.csv]Enrich signups with person + company1 credit per row found
ctc find <name> <domain> --jsonScriptable single lookup1 credit per result found
ctc verify <email> --jsonSend-time guard clause0.02 credits per verification
ctc usage --jsonBalance + ledger for monitoringfree

Full datasheet: credit costs in the docs · plan pricing on /pricing