Grow Guava

Outreach emails in your voice. Just hit send.

Give it a true fact, your pitch, and how you write. It drafts the email into Gmail. You hit send.

Early and open source. Every email is tagged by angle and ask, so reply rates are a query, not a guess.

Try the beta, free or see the live demo first

Public beta. Sign up with your email, paste how you write, and it drafts in your voice. Nothing is ever sent for you.

Tap a guava, or shake the tree.

How it fits together

One engine, many packs

The engine never changes. A pack is one YAML file: who you're writing to, your pitch, which angles and asks, when to follow up.

Campaign packcampaigns/*.yaml: audience, pitch, angles, asks, timing
Voice profileprofiles/*.md: how you write, with real samples
Contactfrom a CSV or from Clay: name, role, company, true notes
Enginebuilds the prompt, calls Claude, sticks to the facts it was given
Gmail draftsaved in your Gmail, never sent
Touch logwho, when, which angle and ask, what came back
Cadencewho's due for a follow-up next

Your packs, voice profile, and contacts stay in git-ignored folders. Public code, private data.

Works with Clay

Clay

Bring your Clay account.

We don't sell data. You already pay for Clay, so we just plug into it. Search for people or companies, pull in a table, or run one of your enrichment routines. The results go straight into your contacts, and the drafter writes from them.

  • clay-search finds people or companies and adds them to a pack
  • clay-import-table brings a Clay table in
  • clay-enrich runs a routine on one contact and keeps the result

Your key stays in your .env. The free plan is enough to try it.

Live demo

Try it

Real engine, fictional sender, fictional contacts. The notes about each contact are the only facts it may use. Draft a few with different angles or asks, mark what came back, and the reply-rate table below fills in.

What the drafter knows

Nothing is sent. A few drafts per hour per visitor.

Why I built this

AI kept forgetting how I write

AI helped me message people on LinkedIn, but it forgot my tone every time. I wanted one place that keeps my voice, my pitch, and my follow-up rhythm.

Job hunting, hiring, investor outreach. It's early. If you try it, give me your feedback.

Portrait of Louise Eriksson

Who built it?

Louise Eriksson

GTM and partnerships at SACC, the Swedish-American Chamber of Commerce, in San Francisco. COO at Blue Grid Energy. Stockholm School of Economics grad.

Louise on LinkedIn

Install and run

Run it yourself

Needs Python 3 and git.

  1. Clone the repo and make a virtual environment.
  2. Install the dependencies.
  3. Copy .env.example to .env and add your Anthropic key.
  4. Copy a template pack into campaigns/private/ and fill it in.
git clone https://github.com/erikssonlouise/gtm-engine.git
cd gtm-engine
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

python run.py show-pack job-hunt
python run.py init-db
python run.py import-contacts data/contacts.csv
python run.py draft --pack job-hunt --contact person@example.com --dry-run
python run.py draft --pack job-hunt --contact person@example.com --gmail
python run.py due --pack job-hunt
python run.py log-reply --contact person@example.com --outcome positive
python run.py stats --pack job-hunt --by angle

--dry-run skips the API. --gmail needs a one-time gmail-auth sign-in. A test blocks any send call.

What works today

  • Drafts in your voice
  • Gmail drafts, you send them
  • Follow-up schedule with a due list
  • Every email tagged with its angle and ask
  • Reply rate per tag, from the log
  • Contacts and touches in SQLite, opt-out included

Not built yet

  • A review every two weeks
  • A dashboard; today the numbers are a table in the terminal
  • More template packs