Skip to content

GTM agents for the world

AGPL-3.0Self-hostedBring your own keys

The Clay alternative you can run on your own box.

Workbooks where every column does work: source companies, run enrichment waterfalls that try free providers before paid ones, let an agent browse the web and cite its sources, then push rows to your CRM. The bill is priced before a single row runs.

Terminal window
git clone https://github.com/debpalash/opengtm.git && cd opengtm
cp .env.example .env
docker compose up # api · worker · postgres · redis · nginx → :3000
IT services — Pune50 rows · 5 columns · running
source Companywaterfall Emailwaterfall Verifyresearch Uses Kubernetes?output HubSpot
Aptita Consultingaptita.comhello@aptita.comwebsite_scraper · freevalidmailscout · 0.95Yes — careers page lists EKS2 fetches · $0.01pushedcontact 4128
Benchirebenchire.comr.mehta@benchire.comhunter_io · $0.04catch_allmailscout · 0.50searching…step 2 of 4waitingafter enrichment
Mindtree Labsmindtreelabs.intrying ddg_email3 of 10 providerspendingpendingwaiting
Zenith Softechzenithsoftech.comskippedspend ceiling reachedskippedno emailNo evidence found4 fetches · $0.02waiting
Spent $0.11 of a $5.00 ceilingPaid providers skipped once the ceiling is hit; free ones keep running

Before you run

The bill, itemised, before a single row executes.

Every workbook has an estimate endpoint. It multiplies rows by every paid provider in each column’s chain for the worst case, and by the cheapest paid provider for the best case. Free providers never appear on it. Set a ceiling and the planner drops paid providers from every chain the moment it is reached.

How spend transparency works
GET /api/workbooks/wb_7f3a/run/estimate
{
"rows": 50,
"worst_usd": 6.00,
"best_usd": 1.00,
"breakdown": [
{ "column": "Email",
"paid_providers": ["hunter_io", "apollo_io", "snovio", "prospeo"],
"worst_usd": 6.00, "best_usd": 1.00 }
],
"note": "worst = every paid provider tried per row; best = cheapest paid hit first."
}

How a workbook runs

Four kinds of column. One durable queue.

  1. 01

    Source

    An ideal-customer-profile query fans out over ~90 directories, review sites, registries and job boards. Runs page, checkpoint and resume; every row keeps its provider record id, so a re-run updates instead of duplicating.

    Sourcing
  2. 02

    Enrich

    A waterfall tries providers until one answers confidently. Free scrapers and open data go first; paid vendors on your own keys go last, reordered by measured hit-rate per dollar.

    Waterfalls and the planner
  3. 03

    Research

    A bounded agent searches and fetches behind the SSRF guard, answers a question per row, and cites only URLs it actually loaded. Agent columns choose their own tools inside a step and dollar budget and leave a trace.

    Research and agent columns
  4. 04

    Push

    Output columns run once per row after enrichment: HubSpot, Salesforce, Google Sheets, Airtable, a webhook, or an email sequence. Idempotent by default.

    Outputs

lead_fieldsourceenrichmentwaterfallai_formularesearchagenthttpformulaconditionaloutput

Promises, in writing

Structural, not marketing.

A seat-priced, credit-metered incumbent cannot match these without undoing its own business model.

The API is never plan-gated.
REST, webhooks, MCP tools, the n8n node and the Chrome extension are first-class on every install. Automating OpenGTM is a use case, not an upsell.
Your keys, vendor price, zero markup.
You pay LLM and enrichment vendors directly. Any future managed-key option bills at cost plus one disclosed flat fee, never per credit.
The bill before the run, always.
The estimate, the ceiling and the per-provider cost ledger are core features on every tier there will ever be.
Self-host is complete, forever.
No feature is held back to force a cloud upgrade. If a paid line ever exists it will be governance: SSO, audit export, support.

What ships

  • ~90 sourcing connectors with durable, resumable runs
  • 36 enrichment providers plus declarative YAML manifests; most are free and keyless
  • 9 LLM providers with automatic failover; several have free tiers
  • 8 buying-signal types, scheduled watches, trigger rules
  • 19 validated workbook recipes in the template gallery
  • 189 documented REST endpoints, generated from the running app

How it is built

  • FastAPI and SQLAlchemy 2 on PostgreSQL with fail-closed row-level security per workspace
  • A PostgreSQL job queue; workers claim with FOR UPDATE SKIP LOCKED and commit each page with its cursor
  • Every user-supplied URL passes an SSRF guard that rejects private, loopback and metadata ranges and re-checks redirects
  • Per-workspace secrets encrypted at rest; tokens stored hashed and shown once
  • React 19 and Vite front end; MCP server; n8n node; Chrome capture extension

Run it this afternoon.

One LLM key gets you AI, research and agent columns. Everything else is optional and configured at runtime.