GTM as code

Built for engineers who do GTM — not the other way around.

Outbound tooling assumes you want a UI, credits, and someone else's opinion of your workflow. If you'd rather have a CLI, a ledger you can query, YAML you can diff, and receipts for every dollar — this is that. Campaigns are pipelines. Adapters are data. Judgment is versioned. Everything replays.

name: q3-outbound
source:
  use: apollo/search              # a vendor adapter that is ~150 lines of YAML
  with: { query: "vp marketing, saas", limit: 200 }
steps:
  - id: fit
    use: ai/filter                # AI judgment behind the same contract as any step
    uses: [full_name, title, company_domain]
    with: { prompt: Keep people who own outbound tooling decisions. }
  - id: lines
    use: ai/compose
    when: fit.passed
    uses: [full_name, title, company_name]
    with: { prompt: Write first_line and ps_line for a short, honest intro. }
  - id: send                      # delivery is a step like any other — put it anywhere, use several
    use: instantly/add-to-campaign
    with: { campaign: "Q3 VP Marketing" }
    variables: { first_line: first_line, ps_line: ps_line }
    idempotency: email            # re-runs deliver nothing twice, ever
$ gtme run q3-outbound.yaml
...
step     adapter                   in   out  cached  cost     avoided
source   apollo/search             0    200  0       $0       -
fit      ai/filter                 200  74   0       $0.19    -
lines    ai/compose                74   74   0       $0.31    -
send     instantly/add-to-campaign 74   74   0       $0       -
total: $0.50 spent

Run it again Monday with fresh data: overlapping records cache-skip, the receipt shows dollars avoided, and nobody gets delivered twice.

Install

brew install elegant-atomics/tap/gtme     # macOS and Linux, arm64 and amd64

A single static binary. No daemon, no hosted anything, no login. Other ways to install.

Start here →
Four doors, each one pipeline file, each ending in a receipt.