← Back to blog

I Spent Ten Years Writing Cold Emails — Here's What Claude Code Taught Me About GTM

Code beats humans for most GTM work. Even creative stuff.

That statement bothers people. Writing is supposed to be an art. Cold email is about empathy and human connection. How can a machine do that?

Here’s the thing I learned after a decade of writing cold emails: a great email from a BDR is far more formulaic than you think. It’s not actually about writing. There are three steps that have to be done well, and the writing part is the last one.


The Signal, Bridge, Voice Framework

Every cold email that gets a reply follows the same structure. I’ve written thousands of them, managed teams of SDRs writing them, and reviewed the analytics on all of it. The pattern is always the same.

Step 1: Signal

Find something specific about the prospect or their company. A real signal. Not their job title. Not where they went to school. Something that tells you this person might actually have the problem you solve, right now.

Good signals:

  • They just posted a job listing for a role that implies they’re scaling a function you help with
  • Their company raised a round and the press release mentions a GTM expansion
  • They published a blog post about a challenge your product directly addresses
  • Their tech stack changed (you can see this through tools like BuiltWith or Wappalyzer)
  • A competitor of theirs just made a public move that creates urgency

Bad signals:

  • “I saw you’re the VP of Engineering at Company X”
  • “I noticed we both went to U of T”
  • “I came across your profile on LinkedIn”

These aren’t signals. They’re metadata. They tell you nothing about whether the person has a problem you can solve. And the prospect knows it.

Most AI-written emails fail here. They can’t get good signals to start with, so they default to metadata and then rant about the product. Then get immediately blocked. Then the sender says cold email doesn’t work.

Cold email works fine. Bad signals don’t.

Step 2: Bridge

Connect the signal to a problem your product solves. This is the logic layer. You’ve found something specific about the prospect — now you need to draw a line between that signal and a real pain point.

If the signal is “they just hired three SDRs in the last month,” the bridge might be: companies scaling outbound that fast usually hit deliverability problems within 60 days because new domains aren’t warmed properly. That’s a bridge to a deliverability service.

If the signal is “their VP of Sales just joined from a PLG company,” the bridge might be: leaders transitioning from product-led to sales-led motions often underestimate how different the outbound infrastructure needs to be. That bridges to a GTM engineering engagement.

The bridge is where domain expertise lives. You need to actually understand your buyer’s world well enough to connect an observable signal to an unspoken problem. This is the part most people think requires a human — and they’re partially right. It does require deep understanding. But that understanding can be encoded.

Step 3: Voice

Express it naturally with no pitch. This is what people think cold email is about — the writing. But by the time you get to voice, 80% of the work is done. If you have a real signal and a clear bridge, the writing almost writes itself.

Voice means: sound like a person who noticed something and thought it was worth mentioning. Not a salesperson with a quota. Not a marketer with a template. Just a person with a relevant observation.

The best cold emails I’ve ever written read like a message you’d send a friend who works in the industry. Short. Specific. No pitch in the first email. Maybe a question at the end, not a calendar link.


Why Code Is the Natural Tool for This Pipeline

Signal, Bridge, Voice. That’s a pipeline. Find data, apply logic, generate output. Coding was invented for pipelines.

Signal is a data problem. You need to pull information from multiple sources — job boards, press releases, tech stack databases, LinkedIn activity, financial filings — and filter it for relevance. A human doing this toggles between ten browser tabs with a five-minute timer per prospect. I know because I used to do exactly that as an SDR. A script does this in seconds for thousands of records.

Bridge is a logic problem. Given this signal and this ICP, which pain point is most likely? This is pattern matching against a known set of problems your product solves. It’s a lookup with some reasoning — exactly what a well-prompted model with good context excels at.

Voice is a generation problem. Given the signal, the bridge, and examples of copy that has performed well in the past, generate a message that matches the tone and structure of your best work. Models are very good at this when they have the right examples and constraints.

Each step feeds the next. The output of signal becomes the input to bridge. The output of bridge becomes the input to voice. This is a pipeline, and pipelines are what code does best.


Where Claude Code Changes the Game

With Claude Code specifically, each step gets better in a way that wasn’t possible before.

Step 1 — Custom enrichment. Claude Code can write and run enrichment scripts that pull signals from any source with an API. Not just the signals your enrichment vendor decided to offer. Custom signals specific to your ICP. You describe what you’re looking for in plain English, and it builds the pipeline to find it.

Step 2 — Context-powered bridging. This is where compound engineering matters. Over time, you build a context repository in your Claude Code project — your ICP docs, your methodology, your past experiments, what’s worked for which segments. Claude doesn’t just connect a signal to a generic pain point. It connects it to the specific framing that has resonated with that type of buyer based on everything you’ve learned.

Step 3 — Copy that compounds. Claude Code can access all your best-performing copy and outbound results over time. It doesn’t start from scratch. It references what got replies for similar prospects in similar situations and generates voice-matched copy. Campaign 5 is better than campaign 1 because it has four campaigns of data to learn from.


This Extends Beyond Email

So much of the work your sales team does is information manipulation — filtering leads, enriching accounts, scoring them, routing to AEs, updating the CRM, drafting sequences, building reports.

Code is the most powerful way to manipulate information.

You don’t want a human toggling between LinkedIn, a company website, a Google search, and a CRM entry with a five-minute timer. Your SDRs should be on the phone instead.

Two years ago, having an army of engineers building custom data pipelines for your GTM team would have been inaccessible for most. This was reserved for VC-backed orgs with massive budgets. Or teams lucky enough to have sales leadership that understood GTM engineering early on.

Now, a single GTM engineer with Claude Code can direct that same work in plain English.

But code alone isn’t the unlock. Context is too. The teams that win with this approach won’t be the ones with the cleverest scripts. They’ll be the ones who build the best context layer — their ICP knowledge, their campaign history, their signal library, their voice examples — organized and accessible, compounding over time.

That’s the real lesson from ten years of cold email. The writing was never the hard part. The pipeline was. And now we have the tool that was built for pipelines.