A very tactical guide to ABM in 90 days
Building an ABM engine to generate $12 in pipeline per $1 spent
👋 Hi, it’s Kyle Poyar and welcome to Growth Unhinged, my weekly newsletter exploring the hidden playbooks behind the fastest-growing startups.
VP of Marketing Emilia Korczynska went viral on LinkedIn last month when she shared her 90-day ABM journey. “It’s brutal,” she wrote. “There are no playbooks.”
But she powered through, ultimately turning ABM into a profitable pipeline channel for Userpilot. And today she’s writing the (very) tactical playbook that she wished someone gave her *before* getting started. (This is the tenth installment of my popular Future of GTM series.)
PS: I just teamed up with Maven to curate interactive, cohort-based growth courses from my favorite experts — most of whom you might notice from this newsletter. Explore the full Growth Unhinged x Maven collection here and get $100 off with the code KYLExMAVEN.
It’s been exactly three months since our marketing team at Userpilot launched our first ever account-based marketing (ABM) campaign, and the results are in: over $650,000 in pipeline in 90 days, with $12 in pipeline per $ spend.
While these early results are promising we were thrown into the ‘deep end’ since none of us had done ABM before (our ACV wasn’t quite “there” for ABM before). For the past five years, Userpilot’s growth has come almost 100% from inbound - with the majority from organic SEO traffic. At our peak in early 2024, we would publish up to 150 content pieces per month, driving 235,000 monthly visitors. But at some point SEO content started to bring diminishing returns. After a year of ups and downs (with extreme SERP volatility), our SEO traffic finally settled around the same place where we started. And we also noticed something more fundamental - as our product became more robust and our prices increased (in 2024, we almost doubled our ACV!) - our conversion rate from SEO started slowly decreasing.
In July our CEO called me out for having built a ‘siloed marketing department’ - with every function paddling independently towards their own goals, without collaborating much, and definitely without creating the much-wanted ‘flywheel effect’. It was time for me to act - and ABM or die trying…
A framework for our first ABM campaign
The first thing I learned about ABM is that it’s brutal. There are no playbooks. Most ABM resources are very high-level (‘strategic’), and there’s a painful lack of tactical resources on how to set the campaigns up.
And no wonder - no one wants to share exactly how they set up their campaigns and what were their “winning formulas” (ad formats etc.) - let alone how much they’ve spent on their campaigns and what ROAS they’ve achieved!
And yet - before even starting to work on our first ABM program - we had to (somehow) answer a lot of the questions:

Of course, it’s easier to answer these questions with the power of hindsight - it wasn’t like we had all of the answers before starting our first campaign. But we learned a lot through trial and error - and hopefully this post will allow you to avoid some of the growing pains and (costly) mistakes we initially made.
Getting started
One thing we knew from the beginning was that we wanted to start from running a “1:many” ABM campaigns, targeting many accounts (with a shared characteristic) with ads. This play can be used to identify accounts with intent from the SAM to be included in more personalized campaigns and outreach.
Based on their engagement level (“account score”), we would pass them on to the next stage -- targeting them with different (more solution- and product-oriented) ads, and at some point, with personalized BDR outreach. The question was: at which point?
We decided to align the ABM campaign stages with different stages of the “awareness funnel”, but still needed to figure out account scoring and “thresholds” for each stage. One resource that helped us decide on it was Kyle’s article about GTM metrics 2.0.
We used it (tweaking it slightly) to decide on our campaign stages, stage benchmarks (how many accounts we’re expecting to move from one stage to another), and revenue goals and budget (we combined that with our historical ad cost and conversion rates, qualification rates, close rates, and expected ACVs to calculate a reasonable budget to hit our revenue targets).
We decided to structure our ABM campaign stages as follows:
Identified - basically all the accounts we’re targeting in the campaign
Aware - accounts with 50+ ad impressions
Interested/Engaged - accounts with 5+ ad clicks or 10+ engagements
Considering - accounts that booked a demo / signed up for a trial
Selecting - accounts with an open deal
The accounts in each state are then shown different content (ads). The further down the funnel, the more product-oriented the content.
If this sounds simple – it is. But, surprisingly, it wasn’t easy to arrive at this *simple* account scoring model. At first we really overcomplicated things, adding a combination of factors such as page visits (qualitative/intent signals) and weights to specific ads/ page visits.
This proved to be too hard to execute. We learned the hard way that website visitor deanonymization was too unreliable to use for consistent account scoring. The accounts we were targeting simply wouldn’t show up in any website visits, even though we knew they landed on the landing pages for the ABM ads we created specifically for them.
So we decided to simplify the account scoring, using only quantitative ad engagement data from Linkedin in our CRM and qualitative aspects (i.e. which ad campaigns they engaged in) to personalize the BDR outreach.
To apply the scores to accounts, we push the company-level engagement data from LinkedIn Campaign Manager to Hubspot. As of January 2025, you can’t do this natively. We initially used Fibbler for pushing quantitative ad engagements (number of impressions, engagements and clicks per account), and then decided to also push qualitative data (which campaigns the account engaged with specifically) with ZenABM.
This allows us to understand the intent behind the engagement, as we structured our campaigns so we can gauge whether the prospect is interested in e.g. onboarding, analytics, or switching from a competitor.
We push that intent into company properties on HubSpot and use the information for personalising BDR outreach, and customizing further campaigns.
Since the campaigns are already segmented by intent (12 in our case), we can then create a workflow to assign the respective intent(s) in a custom multiple checkboxes company property on the company level based on the campaign names/intent coming in from ZenABM. When the BDRs do the prospecting themselves and create leads, the associated company’s intent(s) gets copied to the lead level as tags. This makes the next steps more relevant -- as they are based on what the company members are already engaged with.
We then created active accounts lists in HubSpot with list membership based on being in a specific ABM stage and the thresholds of “cumulative LinkedIn Ad Engagement/ Clicks”. We have a separate list for each stage of each campaign:
Using list membership and a workflow, we update the “ABM stage” company property:
How did we know how many accounts we should target, or what budget to set? After we decided to use Kyle’s post as rough ABX benchmarks (not sure if that was his intention!), we then set a revenue goal for this initiative and ACV - and worked our way backwards (knowing our close rate and qualification rate).
We set a goal of $3,500,000 in qualified pipeline with an annual budget of of $350,000. The “pipeline per dollar spent” is another important metric we decided to follow in order to see if our campaigns are on track.
Given this relatively modest initial budget, we started using only LinkedIn Ads. We’ve also set up a separate no-follow entity (lookalike website that functions as a set of landing pages) for ABM ad destinations and are planning to use it for running retargeting ads on Google Display networks. (We also toyed with using our lead lists directly on Google Display, but the match rates were too low to run them – nobody’s using company emails on Google accounts…).
This post may be cut-off by your email provider. Read the full version on the Growth Unhinged website.
Running the campaigns
For our first campaign, we “recycled” the account list we used for cold outbound in H1. That list was based on the “win-loss” analysis we did on our growth and enterprise deals, and used various targeting filters like company size, location etc. We only enrolled the companies that didn’t convert before.
We also targeted accounts using specific technologies (where relevant for a specific ABM campaign). The second campaign was based on this, and targeted a specific segment of accounts in our SAM that were using a specific technology. For this we used Clay and BuiltWith’s API to build the list.
Depending on the focus of each ABM campaign, we use different additional selection criteria for the companies we want to target. For example, for a campaign focusing on our new “Session Replay + Analytics” features, we would target lookalike companies to our enterprise customers that also match the following:
Firmographic fit:
Company Size: Must be either SMB (50–500 employees) or Mid-Market (500–2,000 employees).
Revenue: Preferably $5M+ in annual revenue or comparable funding (if this data is too hard to confirm, we skip it).
Industry: Must be digital-first (SaaS, eCommerce, EdTech, FinTech, HealthTech) with a product-led growth model.
Location: Focus on USA, Canada, Australia, New Zealand, Ireland, Israel, and Western/Northern Europe (e.g., Germany, Austria, Switzerland, France, Netherlands, Nordics).
Technographic indicators (from BuiltWith or similar tools):
Currently using or previously used an {use case} competitor
Currently using or previously used a direct competitor lacking {feature}
Using both {feature1} + {feature2} tools: Any redundant combination of the above.
We also tapped into our CRM data to uncover the right-sized accounts that we previously lost to competitors because of missing features.
Once we had a list of accounts to target, we added them to the right ABM campaign list on HubSpot and used a workflow to update the “ABM Campaign Name” company property and the ABM stage (set to Identified).
We prospected for relevant personas (e.g., PM, UI/UX, PMM, CXO) in those identified accounts using Apollo and Clay. We then enriched them, even for custom properties like “Persona” and "Seniority" to add a deeper level of segmentation, and then created separate active lists on HubSpot for each persona and their stage. Initially, all personas were added to the "identified" stage.
Contacts in these HubSpot active lists are sent to the LinkedIn Campaign Manager using HubSpot Ad Audiences for dynamic ad targeting. (Note: after the match is completed on LinkedIn, you should have at least 300 LinkedIn members to start a campaign. Additionally, all these contacts must be mapped as marketing contacts; otherwise, they will not be sent over.)
It usually takes around 48 hours for your audience to get ready on LinkedIn after being synced. Once available, you can use these lists with LinkedIn targeting options and add additional filters to further narrow down your audience for more precise targeting.
Now that the audience is ready, we can start running our ads. All our accounts start in the "identified" stage; however, as soon as an account meets the ABM stage benchmarks, we update the stage accordingly. For instance, when an account receives more than five clicks, it moves to the “Interested” stage.
The active lists are automatically updated based on account properties, and since these lists are used on LinkedIn, they are updated there as well. This ensures that accounts are removed from the "identified" list and added to the "interested" list, and targeted with ads that are more aligned to their current stage.
This segmentation allowed us to craft highly targeted messaging tailored to each persona's pain points and their position in the ABM funnel.
The LinkedIn campaign groups were structured based on the persona and their ABM stage, while the campaigns within each group focused on specific messaging themes such as their job to be done, potential benefits, and relevant case studies.
As you can imagine, we ended up having a LOT of campaign sprawl as we tried to personalize messages at scale. There were different campaigns and messages across personas (job-to-be-done) and where the account was in their awareness journey with Userpilot.
This sprawl caused us to run into unexpected limitations with LinkedIn’s API, which obfuscates campaign engagements and clicks in any specific timeframe if they come from fewer than three members in an account. And at later stages in the awareness journey, when there were fewer accounts that had reached the stage, there were times when we had too few contacts on the list to hit the minimum contact-based persona targeting (300).
So we went back to the drawing board, and created a campaign structure based on campaign groups based on shared intent rather than persona.
Optimizing the campaigns
While we’ve settled on LinkedIn as our (for now only) ABM channel, we’re using many different types of ads there, with the following mix from most used to least used: single image ads, video ads, thought leader ads, DM ads, text ads, and document ads.
In terms of inventory performance, the single image ads had the highest CTR and the lowest cost-per-click to landing page. This was followed by video ads and thought leader ads. The DM ads so far have been extremely expensive in terms of cost per conversion.
We use text ads to generate brand awareness. They result in a high number of impressions at a negligible cost, but rarely translate into clicks. I also wonder how many people actually do notice these ads as they are quite *inconspicuous* on LinkedIn.
Thought leader ads (TLAs) – where we pay to promote a post from an influencer in our space – seemed great when it comes to the CTRs, but this metric is a bit misleading as LinkedIn counts every click on the ad including “read more”, author’s profiles, people tagged, etc. But they are very successful in driving attention to more top-of-funnel assets like events and webinars, especially if the posts are coming from influencers popular with the ICP (and they are speakers at the promoted webinars/events). In the upcoming campaigns, we are planning to use TLAs in moderation in the “awareness” stage.
This is what our ad inventory now looks like across the different LinkedIn campaigns.

I can’t share all the ads we ran, but here’s a subset of our top performers.
Operationalizing the campaigns
So far we’re spending ~ $20k per month on these ads. We’re already getting feedback in terms of how the campaigns are performing compared to the benchmarks we set, and can use the weekly number of accounts that passed through the stage thresholds as “leading metrics” to evaluate how well our campaigns are going.
In terms of team, I’m lucky to have found an *amazing* ABM manager (Siddhesh) and have an equally amazing Marketing Ops manager (Bilal), two full-time, in-house graphic designers (Teo and Ivana) and a very seasoned growth/performance manager (Tiana). My advice: don’t even *think about* starting ABM without having a Marketing Ops hire; the amount of RevOps work to set this up is brutal.
We have an ‘unbundled’ ABM tech stack with eight tools. It costs us about $2,500 per month. What we’re currently using:
For list building: HubSpot (CRM) + Clay + BuiltWith + Apollo (used it initially for building contact lists for matched audiences only)
For campaign asset management: Notion
For intent recognition and account scoring: ZenABM/Fibbler
For ad campaign management, lead flows, reporting and sales outreach: HubSpot Marketing
For prospecting: SalesLoft
Reporting and dashboards was another tricky part, especially because I couldn't find a lot on specific ABM stage conversion benchmarks. And since we chose HubSpot Marketing rather than a dedicated ABM tool, we had to build all the reporting dashboards ourselves. In any case, these are the metrics we decided to monitor:
Number of accounts passing from one stage to another every week of the campaign vs. benchmark.
Pipeline per $ spent. This is a metric of campaign efficiency we came up with. For our ABM campaigns, we are looking at $10 pipeline per $ spent.
Ad performance benchmarks. Based on our previous experience and this article from the B2B house, we had benchmarks for CTR, CPM, CPC and CPL across the different ad types.
We monitor the metrics, as well as which accounts have progressed to which stage of the ABM campaign (every week and cumulatively) and how much pipeline each account has generated on HubSpot dashboards. There’s one for each campaign, with more granular reports, and one for all currently running campaigns. We also monitor the number of leads sequenced by the BDRs every week.
The final verdict on our 90-day ABM journey
In our first ABM Campaign, we wanted to capture more leads by using our popular online conference (Product Drive) as the “gateway asset” for the target accounts. We published ~100 ads for 8 different personas, spending $46,791 in LinkedIn Ad spend.
Here’s what the results looked like after 90 days:
Accounts Touched: 1,417
Total Cost: $46,791 (LinkedIn ads) + $5,400 (tools) = ~ $52,191
Pipeline Generated: $440,000 (1st campaign) + $215,000 (2nd campaign) = ~$655,000
Pipeline per Dollar Spent: 12.55 ratio
Assets: ~100 ads for 8 personas (images, videos, TLAs, DMs, text, docs)
Single-Image Ads: 1,172 clicks, 0.35% CTR, $19 CPC
Video Ads: 313 clicks, 0.28% CTR, $24 CPC
TLAs: 4.42% CTR but $68 CPC (LinkedIn counts every click, including “see more”)
Team: 4.5 people full-time (1 ABM manager, 0.5 performance manager, 1 MOps manager, 1 head of marketing, 0.5 demand gen + 0.5 PMM, 1 graphic designer.)
For comparison, cold outbound alone took us 2x as long and cost 51% more to generate the same pipeline. Starting ABM wasn’t by any means easy (the ops are still brutal), but it was as hard in terms of setup as cold outbound, faster to drive pipeline, and less human-resource intensive.
We’re likely still harvesting demand rather than generating it. But it’s easier and faster to do it by showing people a smorgasbord of different messaging and seeing what resonates to gauge intent than asking them on the phone.
Hope this was helpful and inspiring for your ABM journey. If you have any questions, don’t hesitate to reach out to me on LinkedIn!
Well done, Emilia. That's a great piece of content.
Beautiful article. What stood out to me is the importance of the MarkOps person to understand performance marketing too. It complements the strategy