Home / Playbooks / Cold email after a tech stack change
Playbook · anchor article 10 min read · ~ 2,100 words · Last revised May 14, 2026

The cold email after a tech stack change.

Tech-stack-change signals — a new auth provider, a swapped CDP, a fresh observability stack — are the highest-yield trigger in B2B outbound and the easiest to butcher. This is the 4-line frame we use, three worked examples from real client work, and the single "receipts test" that separates a credible note from another tool-marketer email the buyer instantly deletes.

01 · the signal

What "tech stack change" actually means.

TL;DR
A tech stack change is detectable when a company swaps, adds, or removes a piece of operational software visible from the outside: in JS bundles, DNS records, job listings, GitHub commits, vendor mentions, or the company's own changelog. Mama detects across 1,800+ technologies, but only a third are worth opening on. The rest are noise.

Tech-stack changes are the most leak-y signal in B2B because the artifacts of a swap live in places marketers can't suppress: the page source, the DNS, the security headers, the engineering job descriptions, the changelog. If a company moved from Mixpanel to PostHog, half a dozen public surfaces tell you within a week.

But "tech stack change" the marketing term and "tech stack change" the useful signal are two different things. Most stack-change databases include every JS library upgrade — that's not what we mean. The useful signal is an operational software change: a swap that costs the buying team something to make, that they had to get approval for, that someone now owns internally. A new auth provider counts. A jQuery point-release does not.

The three sub-types worth chasing

  • Swaps — replaced Tool A with Tool B (e.g. moved from Salesforce to HubSpot, from Segment to RudderStack). These are the highest-yield because the buyer just lived through a migration and remembers exactly what they wished was different.
  • Additions — added a new category where one didn't exist (e.g. first analytics tool, first CDP, first observability stack). These signal a maturity step — the team has decided this category matters now.
  • Removals — quietly retired a tool without a replacement. Often the most overlooked. Signals either budget pressure or that the team realized the tool wasn't earning its line item. Both are openings for a cheaper, leaner, or better-fit option.
Anti-pattern
Treating every BuiltWith / Wappalyzer fingerprint difference as a "stack change." 80% of these are version bumps, plugin loads, or A/B-test injections — not real swaps. If you can't name the human who would have signed off on the change, it's not a stack change.
02 · the matrix

Which changes are worth chasing.

Not every detected stack change is equally interesting. We score them on two axes: how recently the change happened and how operationally costly the change was to the buyer. The intersection determines whether to open on the signal or just file it.

Yield by signal type · sales-window weeks · open-on-it? based on ~ 11,000 outbound replies
Stack-change type Sales window Reply uplift Open?
CRM swap (HubSpot ↔ Salesforce ↔ Pipedrive) 6–10 wks 3.4× yes
Identity / auth provider swap (Auth0 → WorkOS → Stytch) 4–8 wks 3.1× yes
Observability / APM (Datadog ↔ New Relic ↔ Honeycomb) 3–6 wks 2.8× yes
Analytics / product analytics (Mixpanel ↔ Amplitude ↔ PostHog) 4–8 wks 2.4× yes
Email send / marketing automation (Marketo ↔ Customer.io) 4–8 wks 2.2× often
Data warehouse (Snowflake ↔ BigQuery ↔ ClickHouse) 8–14 wks 2.1× often
CDP / event router (Segment → RudderStack → Jitsu) 4–8 wks 2.0× often
Frontend framework (Next ↔ Remix ↔ Astro) 6–10 wks 1.4× only if your wedge is there
Chat widget / support tool (Intercom ↔ Front ↔ Plain) 3–6 wks 1.3× only if your wedge is there
Cookie banner, A/B testing script, font CDN ~ 1.0× noise — skip

The "sales window" is roughly how long the buying memory stays warm — after that, the migration is old news and the opener will land cold. Reply uplift is the multiplier we see vs. a control opener (the generic "I noticed you ___" template) sent to the same ICP without the signal anchor. The numbers are from our own outbound corpus and three customer corpuses they let us aggregate anonymously.

03 · why they fail

Why most of these openers fail.

Open the inbox of any VP Engineering or RevOps lead at a company that just swapped a major tool. Count the cold emails referencing the swap. Most weeks, they get more than ten. The signal is high; the field is crowded.

Which means the bar for being read is no longer "did you spot the swap" — every tool with a BuiltWith scrape spotted it. The bar is now did you say something the other ten didn't. The four failure modes we see most:

  • Generic "I saw you switched to X" with no observation about X specifically. Says nothing the buyer doesn't already know. Reads like a script.
  • Pitch in the same sentence as the observation. "I saw you moved to PostHog — we help with PostHog analytics rollout!" — collapses the gap between noticing and selling. Buyer's brain treats it as a single ad unit.
  • Worship the swap. "Smart move adopting WorkOS, they're killing it!" — flattery of the tool, not engagement with the buyer's actual choice. Reads as junior or sycophantic.
  • Old swap, hot opener. Buyer migrated 11 months ago. The note treats it as fresh news. The signal is real, the timing is dead.
Anti-pattern
"Hey {first_name}, saw you're now on {new_tool} — congrats on the migration!" If your opener works as a mail-merge template across 200 different tools, the recipient knows. The signal value of the swap is destroyed the moment the template-shape is detectable.
04 · the frame

The 4-line frame.

The structural skeleton we recommend, refined across roughly 300 outbound campaigns. Same 4 lines for every stack-change opener regardless of sub-type. The variables that change are what specifically you observed and the consequence-question in line 3.

The 4-line stack-change frame ~ 55 words · 4 sentences · 0 questions in lines 1–2
L1 The specific observation — name the swap concretely with one detail only an actual reader would notice. Not "I saw you moved to X." More like "I saw you moved off Segment and the new event payloads are flowing through what looks like a self-hosted RudderStack."
L2 One sentence of credibility — a fact about the swap that proves you've thought about it for more than 30 seconds. Reference a real trade-off, edge case, or known consequence of the choice. Not flattery. Demonstration.
L3 The consequence-question — surface the second-order problem the swap usually creates. This is the line that earns the reply. Use I'm curious how you're handling or Most teams hit X around month 2 — wondering where you are with that.
L4 The small ask — a 12-minute conversation, a short doc you'll send, or a single question worth answering. No calendar links in the first message. Make it lighter than they expect.

Three structural rules that hold across every variant of this frame:

  • Lines 1 and 2 contain zero pitch. The pitch sits in line 3 as a question, never as a claim. If a reader stops after line 2, they should still have learned something.
  • Length is fixed at ~55 words. Longer emails get scanned, not read. Shorter ones look like template injection. 55 is the floor where credibility lives.
  • The consequence-question is the single most important line. If you only have 30 minutes to write the email, spend 25 of them on line 3.
05 · the receipts

Three worked examples.

Same frame, three different stack-change types, three different ICPs. Reply rates listed are the actual outcomes — these are anonymized from customer corpuses, with permission, names and identifying companies changed but the patterns intact.

Example 1 · Identity / auth swap (Series B, ~ 80 engineers)

Example 2 · Analytics swap (Series A, ~ 35 engineers)

Example 3 · CRM swap (Series A, ~ 12 SDRs)

06 · the test

The receipts test.

Single question to ask before sending
Would the recipient believe you actually looked at their site or product — or would they assume you ran a list pull?
If the email could have been written entirely from a CSV column called "current_tool" and another called "previous_tool" — it fails the receipts test. The forensic detail in line 1 (endpoint name, signature format, hiring posts, EU residency path) is what proves it wasn't list-merge. Without that detail, the email collapses into noise the buyer is already filtering on.

This is the single discipline that separates working stack-change outbound from the cold-merge variant. Every email we send through the frame above goes through a final pre-send check: is there one detail in line 1 that couldn't have come from a list? If no, the email goes back for a rewrite, not to the send queue.

07 · when not to

When not to use this play.

Stack-change opens are powerful, which means they're easy to over-rely on. Three situations where this play is the wrong choice:

  • The buyer's role doesn't touch the stack. Don't email a CFO about a database swap. The signal might be real, but it's not their decision context — the email reads as misaligned.
  • The swap is older than your sales window. A migration completed 9 months ago is institutional memory, not active pain. The reply rate drops to baseline cold within roughly the windows in the matrix above.
  • Your product solves a problem on the OLD tool. If they just left the thing you'd solve their problem on, you're showing up too late. The exception is if you specifically help with the migration itself or with the missing-feature gap in the new tool.
Don't bend the play to fit
If the signal doesn't pass the matrix and the consequence-question doesn't write itself, pick a different signal type rather than forcing this one. A weak stack-change open is worse than a strong open anchored on a different category — funding-round, hiring-pattern, content-velocity, leadership-change.