Draft intro / congratulatory outreach.
When a founder lands on the Outreach List, draft the right email in the right partner's voice — congrats-on-the-raise if they raised in the last two months, normal intro otherwise — and drop it in that partner's Outlook drafts with a Slack ping. Never auto-send.
Helper code snippet
Reusable code that powers a step inside this automation — loop bodies, parsers, routers, and other glue.
- Connection Strength Router — specific partner vs random →JavaScript · connection_router.js
Reads a company's connection-strength field and routes the Zap to the partner with that relationship — or to a random senior partner if no relationship exists. Pairs with the intro / congrats outreach Zaps.
Reference build
A founder lands on the Outreach List and the flow has to answer two things before it writes a word: which partner is reaching out, and do we have something to congratulate them on. If the company raised in the last two months, the email leads with the round; otherwise it's a normal intro. Either way, the draft lands in the right partner's Outlook with a Slack ping — never sent automatically.
The branching exists so we don't look like we missed the news. A generic "hey" to a founder who just announced a Series B reads worse than no email at all.
What the flow writes
Nothing ever leaves the building automatically. The flow writes a draft in the partner's mailbox and tells them it's there.
| Path | Output | Shape |
|---|---|---|
| G · congrats | Outlook draft | In the requesting partner's mailbox. Subject: Congrats on the raise — {Company} // {Firm}. Body: Claude-written, partner-flavored, references the round. |
| F · normal | Outlook draft | In the requesting partner's mailbox. Subject templated for an intro (no fundraise reference). Body: Claude-written intro with company context. |
| G / F | Slack DM | Direct message to the partner: founder name + company + "check your drafts." Closes the loop. |
| E · no email | Outlook email | To: Dan. Body: founder name + Attio record id. Triggers a manual lookup, no draft is queued. |
Gotchas
The risky parts are timing (a stale 'congrats' is embarrassing), gating (don't waste tokens on records with no email), and tone (each partner sounds like themselves).
- 01Two questions, not one. The flow decides (a) which template to use — congrats vs. normal — and (b) which partner is sending. Those are independent: a 'congrats' email from Drew looks nothing like a 'normal' email from Austin. Collapse them into one branch and the prompt has to know everything; split them and each branch stays small.
- 02Recency is measured in months, not 'recent'. The inline JS subtracts last_funding_date from today, divides by 30.44, and returns 'congrats' if ≤ 2. Two months is the window where 'congrats on the raise' still reads as timely; outside it you sound like you just learned about it, which is worse than not mentioning it at all.
- 03Two gates have to both agree before drafting. The 'congrats' branch only fires when the partner has explicitly marked the record with congratulations = 'Send email' AND the math says the round is fresh. Either one alone isn't enough — partners sometimes mark old rounds, and fresh rounds aren't always worth congratulating.
- 04Email presence is checked before anything expensive runs. If the Person has no email on file, the flow stops early and emails Dan with the record id and the founder's name. No research call, no LLM tokens spent, no Outlook draft sitting in a void. Failures are cheap; successes earn their cost.
- 05Research and drafting are split across two models on purpose. GPT-5.2 writes a one-paragraph factual description of the company; Claude takes that paragraph plus the partner's voice and writes the email. Same prompt-shape for every partner, different writer underneath — the research never has to know who's sending.
- 06Partner routing is a hard-coded allowlist, not a lookup. Austin · Shaw · Drew · Mark · Dan · Brian each get their own branch. Adding a partner means adding a branch with their prompt, their Outlook account, and their Slack DM. It's intentional: each partner's tone is calibrated by hand and not derived from a profile field.
- 07The draft is created, never sent. Outlook gets a draft in the partner's account; Slack pings the partner that it's there. The human reads it, edits it, hits send. Auto-send on a fundraise congrats is exactly the kind of automation that ends up screenshotted on LinkedIn.
- 08Subject line is templated, body is generated. Subject is always 'Congrats on the raise — {Company} // {Firm}' (or its normal-outreach equivalent). The model writes only the body and is explicitly told not to include a subject line — so it can't accidentally override the templated one downstream.
Swap matrix
Every layer is replaceable. The two non-negotiables are a CRM that can fire on list-entry creation and a draft surface that accepts an API-created draft without sending it.