StackOptimised: $3M agency books 3,500 leads/mo. Replicate it.
StackOptimise gives qualified companies 6,000 prospects contacted free, before they pay a cent. We spent 75 minutes taking that offer apart with Felix, on air.
The full session with Felix Frank: 101 questions about the system behind a $3M outbound agency. Below is the written breakdown, with the relevant clip on every section.
What's inside
- The volume math: why the gate is 50,000 companiesFelix
- Hard verticals: cyber, IT services, recruitmentFelix
- ICP: aim wide, not narrowFelix
- The data stack behind 6,000 prospectsFelix
- Emails that actually exist: the waterfall and the catch-all ruleFelix
- Freshness: never load more than 30 daysFelix
- Signals: what Felix actually believesFelix
- Value first or pitch direct: the arithmetic that settles itFelix
- The AI copy teardown: weak vs strong, line by lineFelix
- Follow-ups: how many stepsFelix
- Deliverability: the full blitzFelix
- When email cannot get in: LinkedIn as the other doorPeter
- Where AI actually earns its keepFelix
- The numbers behind the machineFelix
- Your checklistBoth
The offer we came to dissect
StackOptimise runs an offer that should not be economically possible: they build the whole outbound machine for a qualified prospect and show real traction before any money changes hands.
80 inboxes
Full sending infrastructure, spun up and warmed by them, not by you.
3 signal-driven campaigns
Not one generic blast. Three campaigns built on actual triggers.
6,000 prospects contacted
A real list, sourced, enriched and validated by their team.
AI sequences, not templates
Personalised copy generated per prospect from a research summary.
The trial is only offered to companies with a TAM of 50,000+ companies and $100K+ MRR, and it excludes IT solutions, cybersecurity and recruitment. The TAM number and the excluded verticals are the most instructive part of the whole offer, and the first two things we asked about.
The volume math: why the gate is 50,000 companies
The 50,000 TAM requirement is not snobbery. It falls straight out of the arithmetic of how long a list survives at the volume that produces ROI.
Felix's floor is 10,000 prospects contacted per month. Below that there simply are not enough replies to produce enough meetings to pay for the engagement. Now run the list through the funnel:
That is the whole reason for the gate. With a smaller market you burn through the list too fast, you recycle before anything has changed on the prospect's side, and you never accumulate enough data to learn what works.
The process still applies. Felix was explicit: you can run exactly the same system at 5,000 contacts a month. What changes is the business case for hiring an agency, not the mechanics. Run it in-house, keep the volume proportional, and expect the learning loop to be slower.
Land small, prove ROI, then scale
The commercial logic behind the volume bet: sign the client on the smallest package, generate return as fast as possible, then make scaling up a no-brainer. A 20,000-person market has no upside to expand into, which is exactly why it does not fit an agency model.
Recycling and nurture: the list gets hit every 40 days
StackOptimise contacts their entire addressable market every 40 days and recycles the list. That produces hundreds of positive replies a month, of which roughly 15 to 20% convert into meetings. The rest are not thrown away:
- Positive reply, no meeting yet goes into a nurture drip that references the previous conversation rather than starting cold again.
- The drip carries lead magnets, not pitches, until the prospect is ready to book a call.
- The cold list keeps cycling in parallel. Cold outreach and nurture are not alternatives, they are the two halves of the same engine.
Hard verticals: cyber, IT services, recruitment
The second gate on the offer excludes cybersecurity, IT solutions and recruitment. Not because those companies cannot do outbound, but because a short trial cannot prove it for them.
Cybersecurity: the hardest inbox in B2B
CISOs are, in Felix's words, the toughest people to get responses from. Hard to crack with cold email full stop, and impossible to demonstrate inside a short trial window.
Recruitment: works, but only with a layered funnel
They do run recruitment clients. What makes those work is a thorough sales process around the email: invite prospects to a webinar first, or to an in-person roundtable, then run nurture sequences off the back of that. The email is the invitation, not the ask.
IT services and custom development: volume or nothing
Felix would not call it a lost cause, but close. If he ran an IT solutions vendor he would go for major volume with deliverability, personalisation and offer fully dialled in, and accept that the hit rate per contact will be low.
The trial only goes to offers where a plain "do you have 30 minutes to chat" CTA can realistically get a yes. If your market needs a webinar, a roundtable or six months of nurture before that question makes sense, cold email is a channel in your funnel, not the funnel itself.
ICP: aim wide, not narrow
This is the answer that surprised everyone in the chat. Every guide tells you to narrow your ICP. Felix does the opposite, on purpose, and explained exactly why.
The trade-off is real and he does not deny it: the narrower your ICP, the better your reply and positive reply rates. Local butchers in San Francisco will out-convert everyone, because the reason you are writing to them is unmistakably specific. There are also not very many of them.
So the target is not the sharpest ICP. It is the message that resonates with the broadest persona that still resonates at all. Here is what that looks like in practice, on their own internal campaigns:
Felix's own targeting, described live on the session. Broad targeting plus one message that lands is what makes the volume predictable.
The order of operations flips too. Most teams go ICP first, then persona, then message. Felix works backwards from the message: if you can write something that a very broad persona genuinely reacts to, you now have a scalable engine. If you cannot, no amount of filtering will save it.
Micro and macro campaigns: the actual split
MMicro: signal-based
Reaching one person for one specific reason, off an intent signal or trigger. Roughly 10 to 20% of monthly volume for any single client.
MMacro: broad targeting
The remaining 80 to 90%. Job title plus industry, no signal required. This is where the volume, and most of the pipeline, comes from.
Broad does not mean dirty. The list still gets qualified before anything is sent, and the cheapest place to do that is at filter level, before a single credit is spent:

Advanced filters in GetSales: stack AND / OR / NOT rules on activity, location, followers and premium status to keep a broad list clean.
The data stack behind 6,000 prospects
Felix named his entire stack on air. The headline: list building does not happen in Clay. Clay is where enrichment happens, after the list already exists.
Build the list in a prospecting database, not in your enrichment tool
About 95% of their lists are built in AIARC, then exported. The remaining 5% comes from StoreLeads, Ocean.io and Harmonic, depending on the segment.
Search contact-first, not company-first
Most of the time they search on job title, then layer industry and keyword filters. Company-first only for lookalike campaigns or a niche segment: build the company list in Ocean.io or Arc, then pull the contacts inside Arc.
Export into Clay, enrich there
The list leaves the database and enters Clay. Everything downstream, qualification and copy included, runs off what Clay produces.
The offline-industry trick: info@ inboxes outperform
For markets where the buyer is not on LinkedIn at all, the flow inverts and ends somewhere most people would never bother going:
- Build the company list first, then bring it into Clay.
- Check whether the person even exists on LinkedIn. In offline industries, more often than not, they do not.
- Run an agent to find the founder's first and last name from the company website or a plain Google search.
- With a name you can find an email. Without one, fall back to the generic inbox: info@, office@, admin@.
- Those generic-inbox campaigns perform extremely well, precisely because those addresses are not sitting in every Apollo and AIARC export getting hit twelve times a week.
Whatever your source, the list has to land somewhere it can be worked. GetSales takes a CSV export straight from a prospecting database, or pulls directly from a Sales Navigator search if you want the freshest possible version of the same list:

Getting the list in: CSV from your database, or a live Sales Navigator search, straight into the automation.
Enrichment in GetSales is part of the subscription, not a separate credit line: every imported lead is enriched from the GetSales database or in real time if it is not there yet. Full step by step in our free guide: How to enrich 20,000+ leads for free.
Emails that actually exist: the waterfall and the catch-all rule
A list is worthless if the addresses bounce. Felix runs a two-layer system: recover the emails the database missed, then decide very deliberately which of them are safe to send to.
Trust what the database already validated
Emails coming back from AIARC are validated in real time, so they do not re-validate those. No point paying twice for the same check.
Run everything else through a waterfall
Any lead without a valid email goes through a multi-provider waterfall in Clay: Prospeo, LeadMagic, Trykitt and others in sequence. That recovers roughly 10 to 15% more addresses.
Validate, then handle catch-alls separately
First pass with Reoon tells you valid, invalid or catch-all. Catch-alls then go through BounceBan, a validator built specifically for catch-all domains. Verified means send. Not verified means do not send.
Peter asked directly whether they send to accept-all addresses. Felix's answer: not blindly. A catch-all only earns a send after a dedicated catch-all verifier clears it. Flipping accept-all on to inflate your deliverable list is how you buy a bounce rate.
This is exactly the shape of the Find Email step in GetSales: a reorderable provider waterfall, an optional verification provider on top, and a catch-all toggle you leave off unless you have verified them:

Find Email in a GetSales automation: drag the providers into your preferred order, add a verifier, and keep "accept catch-all" off unless the address has been cleared.
Freshness: never load more than 30 days
Prospecting databases refresh on a monthly cycle. People change jobs continuously. That gap is invisible while you send into it, and Felix's fix is a hard operational rule rather than a tool.
- Sequences are loaded with 30 days of runway, maximum. Every 30 days they scrape a fresh list and reload the campaigns. Anything longer and you are mailing people who moved.
- On the email side, validation does the checking for you. If the address still validates, the odds are strong the person is still there. A bounce is the signal, and you get it for free.
- On the LinkedIn side, verify explicitly. LinkedIn has no bounce. Felix runs an agent that visits the profile and confirms the person still works where the database says they do, before any invite goes out.
GetSales has the same rule built into the enrichment step: filter by last enrichment date and only refresh profiles older than your chosen window, so you keep the data fresh without re-paying for records you touched last week.

Advanced Enrichment: "only enrich if older than 7 days" refreshes the stale half of the list and skips the rest to save credits.
Signals: what Felix actually believes
For a man selling three signal-driven campaigns, Felix is remarkably unsentimental about signals. His position: the main value of a signal is that it lets you write a better email. It is a copy input, not a buying indicator.
There are very few signals that genuinely tell you a prospect is ready to buy your product right now. Everyone hunts for that silver bullet. In Felix's experience it does not exist 99% of the time. What signals do reliably deliver is an email that reads tailored rather than blasted, plus a bit of targeting help on top.
Weak signals and strong signals
The dividing line is not company versus person in the abstract. It is whether an individual did something. Company-level events are context. Individual actions are the closest thing to intent you will get.
Two refinements that keep the follow signal alive
Target the niche companies, not the giants
Reaching people who follow a small, specific company tells you something. Reaching people who follow Salesforce or Microsoft tells you nothing at all.
Do not call the signal out
"Hey, I noticed you follow Clay on LinkedIn" has been sent to that person dozens of times. Felix's move is to skip the callout entirely and be presumptuous: lead straight with the offer, because you already know they know what the thing is. "I'll build you five Clay tables for free that do X. Interested?" The signal shaped the message without ever appearing in it.
Sourcing the two signals that work
- Website visitors: RB2B identifies visitors at the individual level in the US, Leadfeeder returns the visiting company's domain so you can work out the person from there. They run both, because every tool finds the data a different way. Felix's advice is to test several rather than pick one.
- Follows a company: StackOptimise built this in-house. Peter's manual version, from his own campaigns: set your LinkedIn current company to the target company, then use the Sales Navigator "following your company" filter and exclude coworkers. It only works when the target company has left that setting open.
Value first or pitch direct: the arithmetic that settles it
Half the market swears by leading with free value. The other half says it generates replies and no meetings. Felix does not have an opinion on this. He has a calculation.
Work backwards from what you are actually after: revenue comes from deals, deals come from meetings, meetings come from positive responses. So the comparison has to be made at the meetings line, not the replies line.
The direct campaign
Clear value proposition, straight ask. Fewer positive responses, but a high share of them turn into meetings.
The lead-magnet campaign
Free value up front. Can produce something like 5x the positive responses, but convert only half as many of them into meetings.
Compared on replies, B wins by a mile. Compared on meetings, it depends entirely on your numbers, and Felix has clients where each side wins. His actual rule: if your lead magnet is getting positive responses but not booking meetings, it is not doing its job. There is no universal answer here, only a test.
Your sending tool, whichever one it is, can only show you performance up to the positive reply. If you are choosing between these two campaign types on reply rate alone, you are choosing blind. Pull the campaign data together with meetings booked and deals closed, or the comparison you just made means nothing.

Campaign analytics get you as far as the reply. Everything past that has to be joined to your CRM before you can call a winner.
The AI copy teardown: weak vs strong, line by line
This is the part Felix half-joked about giving away on camera. Two emails to the same fictional prospect, both AI-personalised. One of them is what almost everybody sends.
Both examples are Felix's own, shown on the webinar slide and read out line by line on air.
Why the weak one fails
The research is not wrong. The subscription-brand focus, the $75M, the creative team hire, all accurate. The failure is structural: a personalised callout sits in line one and connects to nothing. The value proposition that follows would be identical for any of the ten thousand other recipients. And Felix has a specific allergy to the opener itself: any first line that starts with "I noticed" or "I saw" is so overused that it announces the automation before the reader is two words in.
What the strong one is doing, step by step
Open with their problem, in their own words
Line three quotes back the kind of bland line they probably send, then says plainly that it is probably not getting responses. The personalisation and the diagnosis are the same sentence, which is why it cannot be skimmed past.
Flip to why they specifically have an unfair advantage
Exclusively subscription brands, $75M in ad spend publicly shared, case studies about LTV rather than CAC. Same three research facts the weak email used, now doing actual work in an argument.
Show you understand what keeps them up
Subscription brands do not wake up wanting a new agency. They wake up wondering why MER is slipping, why first-order profitability vanished, why Meta plateaued. "That's the conversation I'd build your outbound around."
Close on a lead magnet the whole email earned
10 personalised templates using real brands from their market. It ties straight back to the opening diagnosis: your emails are bland, here are ten that are not. "Just reply Yes." No calendar link, no strings.
Weave the personalisation through the email at multiple points, and never make a point of the fact that you know it. The weak email announces its research. The strong one just uses it, four times, and lets the reader assume a human wrote it.
Long emails work, on one condition
Peter pushed back hard on the length: his own instinct with a wall of text is to skip it. Felix agreed that this is exactly the risk, and the entire answer is the opening. The first and second lines have to be engaging, intriguing, creative, disruptive, something they have not seen in the inbox before. Then you hold that same quality of writing and personalisation all the way down. Get the hook wrong and the length kills you. Get it right and the length is what makes the email memorable.
Mechanically, this is one AI variable per prospect, driven off a research summary and rendered into the message before it sends:

AI variables in GetSales: your prompt, your model, a fallback for when the data is thin, and a preview against a real contact before anything sends.

The rendered variable drops into the message step of the automation, so every prospect gets their own version of the same argument.
There is no elaborate prompt library. One enrichment produces a comprehensive research summary about the company and the prospect, and everything flows off that single summary: the qualification check that the lead is in the right industry with the right title, and then almost all of the copy. In his words, most of their campaigns follow the same formula and it is nothing overly complex.
Follow-ups: how many steps
Peter asked the question everyone asks, expecting a number. Felix gave a range and a condition, and the condition is the part that matters.
They have run five and six step sequences that booked meetings from steps five and six, with people replying that it was the sheer persistence plus the quality of every single email that made them take the call. The flip side is blunt: six mediocre, annoying, spammy emails will hurt you. Felix's summary is that there is no perfect formula, so do not be afraid of longer sequences, you just have to make sure they are good.
Our own data on the LinkedIn side shows replies dropping hard with each follow-up: 14.7% on message one, 7.7% on message two, 4.2% on message three. Which is why on LinkedIn we cap sequences at 3 to 4 messages and put the effort into making the first one worth answering.
Deliverability: the full blitz
Peter ran this section as rapid fire: short questions, short answers, no theory. It is the densest thirteen minutes of the session, and the single most copyable part of the whole system.
The inbox stack
- 70% Google, 30% Microsoft. The same split for every client.
- The reason is not Microsoft-to-Microsoft deliverability. That advantage is only slight now. The reason is having no single point of failure.
- Multiple vendors as well as multiple providers, so a single bad day cannot burn the entire fleet at once. Backups are the whole design principle.
- 3 inboxes per domain, 20 to 25 emails per inbox per day. Secondary domains, never the main one for volume.
- Keep Google and Microsoft on separate domains. Do not mix providers on one domain.
Warm-up
- At least 30 days before the first send. The historical norm was two weeks, they deliberately play it safer.
- Ramp volume gradually once sending starts, rather than going straight to the daily cap.
- Warm-up stays on permanently for every inbox, not just during the initial period.
- Pre-warmed inboxes only in emergencies, when something has to be sending within 24 hours. Otherwise fresh domains and fresh inboxes per client.
Felix's argument for warm-up being real, when Peter raised the popular claim that it does nothing: if it did not work, the major sending platforms would not be spending millions a month in cloud credits maintaining it.
Unsubscribe and compliance
No unsubscribe link. A plain line at the bottom of the email: if you do not want to receive any more emails, respond unsubscribe. It keeps you GDPR compliant, it shows your clients that best practice is in place, and it does not put a tracked link in a cold email.
Monitoring: reply rate is the metric
- They do not track open rates at all. No pixel.
- Inbox placement tools are not particularly effective, in Felix's experience, so they do not lean on them.
- Reply rate plus the platform warm-up score are the two indicators they actually watch.
- Every client has an active set and a reserve set of inboxes. The rule is mechanical: if an inbox drops below a warm-up score threshold, or falls into the bottom bracket of reply rates compared to the whole fleet, it gets swapped out for a fresh one.
- Blacklist checking is optional. If reply rate and warm-up score hold, you do not have a problem. If they drop, you have already swapped the inbox out.
- Subject lines get A/B tested on replies: two campaigns, identical body, different subject, and the one with more replies wins. With no open tracking, replies are the only vote that counts.
Sending from your main domain
Less dangerous than the internet says, within limits. If your company domain is 5, 10, 15 years old and the business already sends a large volume of ordinary mail internally, to suppliers and to vendors, then a couple of reps sending cold email is a rounding error in that volume. Deliverability is often better from the main domain, because the reputation is genuinely strong. Push into the tens of thousands, though, and you will run into problems.
Spam words, emojis and the things people obsess over
- Spam word checkers: they do not run them at all. Word choice can matter, they have seen a few phrase changes produce an immediate uptick in replies, but it is not where the leverage is.
- Emojis, links, PDFs, attachments: never included. Not a debate.
- Buying domains with different cards to stay untraceable: Felix's word for this was fugazi. They buy from their providers and think about something else.
- Angry replies: you will get a few, always. Someone had a bad day. It is the nature of the game and not a signal that anything is broken.
Felix's answer on brand damage was the strongest line of the session. Most people forget who emailed them 30 seconds after they close it. He receives dozens a day and cannot name one from last week. His framing: if he sent 100,000 emails to his ideal prospects and nobody replied, the business would still be better off than before, because that is 100,000 of the right people who have now seen the brand. Write emails that are personalised, creative and worth reading, and most of them leave a positive impression whether or not they reply.
Stick to the basics, in other words, and stop optimising the wrong layer: secondary domains, three inboxes each, 20 to 25 a day, no links, no attachments. After that, the copy, the offer and the messaging determine the result, so that is where the time should go.
When email cannot get in: LinkedIn as the other door
There is one place where every piece of the system above stops working, and Felix names it without hesitation: the enterprise inbox.
Enterprise mail gateways are much harder to break into, and StackOptimise deliberately do not take on clients who target enterprise exclusively. Felix's advice for anyone whose ICP genuinely is enterprise: it is still doable with email, but LinkedIn will be the stronger channel. Peter's example from his own network was a founder who could never get a cold email into Walmart and booked the account through LinkedIn instead.
Which makes the volume question on the LinkedIn side worth knowing. Here is what the market actually sends, from 6M invitations on our platform over a rolling three months:
Practically, this is not a second stack. It is the same campaign with a second channel in it: connect on LinkedIn, and where the invite is not accepted or the persona is better reached by mail, find the email and send there, from whichever team member makes the most sense as the sender.

One automation, a pool of senders, both channels per sender: the LinkedIn and email halves of the sequence share a single set of contacts and one set of stats.
Where AI actually earns its keep
Asked for the top things a team should be doing with AI right now before it is too late, Felix gave an answer so unglamorous that Peter checked whether he was holding something back. He was not.
Copy, still
Nothing new, people have run AI-personalised copy for years now. It remains the single thing with the biggest impact on campaign results.
Spinning up campaigns
Their GTM engineers use Claude Code to build campaigns rather than clicking them together by hand.
Reading performance and proposing variants
The same agents pull campaign analytics out of the sending platform, work out which variants are performing, and suggest new ones based on what has not been working.
How autonomous is the machine, honestly
A lot is automated, but no campaign runs fully end to end without a human in the loop, theirs or a client's. The level varies with how repeatable the process is. Their own internal campaigns are extremely automated, including an AI autoresponder that handles reply triage and recycles leads back into the list on its own, built by one of their GTM engineers. Client campaigns where the data is hard to source still take real manual work.

The same pattern on our side: an agent over the GetSales MCP, pulling campaign data and driving the automation through the API instead of the UI.
The numbers behind the machine
Peter asked, at speed, what healthy actually looks like. Felix answered with his own averages, and they are lower than most people expect, which is exactly why they are useful.
Numbers Felix gave live on the session, for StackOptimise's own client base and their own internal campaigns. Cold email, not LinkedIn.
His comment on the reply rate was the point of quoting it at all: do not build expectations around 2 or 3% reply rates. You do not need anything near that to run a profitable outbound operation. What you need is enough volume against a large enough market that 1.6% is a meaningful number of conversations, which is where the whole system loops back on itself.
On spam rate, his answer was refreshingly short: you do not know whether you have been sent to spam. Which is precisely why reply rate carries the entire monitoring job.
Your checklist
Score your own outbound against the system. Every unchecked box is a place this machine is doing something yours is not:
- Volume matched to market size - you know your TAM, and your monthly send would not exhaust it in under three months.
- The message came before the ICP - broad targeting carried by one message that lands, not narrow targeting carrying a weak one.
- Micro and macro split deliberately - signal campaigns are roughly a fifth of volume, not the whole plan.
- List built in a prospecting database, enriched afterwards. Not built inside the enrichment tool.
- Email waterfall running on everything the database missed, plus a dedicated catch-all verifier before any catch-all gets a send.
- 30-day rule enforced - no sequence loaded with more runway than that, list re-scraped on the cycle.
- Signals treated as copy inputs, chosen at the individual level, and never called out in the first line.
- One research summary per prospect feeding both qualification and copy.
- The first two lines earn the length - personalisation woven through the body, not parked in the opener.
- Campaigns compared on meetings, not on positive replies.
- 70/30 provider split, 3 inboxes per domain, 20 to 25 a day, secondary domains, no links or attachments.
- 30 days of warm-up before the first send, ongoing warm-up after, reserve inboxes ready to swap in.
- Reply rate as the health metric, no open tracking, inboxes swapped on the score-plus-reply formula.
- LinkedIn carrying the accounts email cannot reach, in the same campaign rather than a separate motion.
The data and LinkedIn half of this system runs in GetSales
Real-time enrichment
Every imported lead enriched from the GetSales database or live if it is not there yet, with the enrichment date on every record. Included in the subscription, not a separate credit line.
Find Email waterfall
A reorderable multi-provider waterfall with an optional verifier on top, and a catch-all toggle you control rather than a blanket accept-all.
Freshness control
Enrich only what is older than your chosen window, so the stale half of the list refreshes and the rest does not burn credits.
AI variables
Your prompt, your model, a fallback, and a live preview against a real contact before a single message goes out.
Multi-sender, multi-channel
One automation, a pool of senders, LinkedIn and email per sender. Rotate the sender when an invite is not accepted.
GTM API + MCP
Drive campaigns, enrichment and analytics from your own agents. The same Claude Code workflow Felix's GTM engineers run, against LinkedIn.
Run the data half this week
Start free on GetSales: enrichment, the email finder waterfall, AI variables and multi-sender automations are all in the trial. Watch the session, run the checklist, and fix the layer that is actually costing you replies.
Try For Free
From the live webinar "StackOptimised: $3M agency books 3,500 leads/mo. Replicate it for your own pipeline" - Peter Kaliuzhny (GetSales) × Felix Frank (StackOptimise), July 2026. StackOptimise figures are Felix's own, given live on the session.
LinkedIn benchmarks: 6M invitations sent through GetSales, rolling 3 months.