Paid Ads for B2B SaaS, Explained to Engineers
I manage $1.6 million a month in ad spend for tech startups. Here's the whole system end to end, inputs, program, output, and the one input that's broken in 80% of the SaaS accounts I see.
By Dave Ten
I manage $1.6 million a month in ad spend for tech startups, and I've spent the last year building apps. So I'm going to explain how paid ads actually works from an engineering perspective, because at its core that's what it is: an engineering problem.
You have inputs: your creative, your budget, your landing page, your conversion tracking. You have a program: the ad platform's optimization running on top of your account. And you have an output, usually revenue. The entire job is to maximize that output for every dollar of input.
So when ads feel broken for a SaaS company, it usually means one of the inputs isn't working. And 80% of the time it's the same input. I'll name it further down. First, the whole domain end to end, then how to code the system that runs it.
The map: search, social, and intent
There are two core types of channel you can advertise on, search and social, and what separates them is how much intent the audience has when you reach them. On search you have Google and Bing. YouTube is a hybrid: people go there to scroll, but they also go there to look up tutorials and answer specific questions, so it belongs in both.
Social is a pattern interrupt. They're watching things they like with nothing specific in mind, your ad shows up, and it brings awareness to something they might want later. Search captures demand that already exists. Social creates demand that doesn't.
Intent is a scale, not a switch
Eugene Schwartz broke intent into five levels in Breakthrough Advertising, cold to red hot, and each one lives on a different channel.
- Unaware. They don't know they have the problem, so there's nothing for them to search. The only way to reach them is to interrupt: a LinkedIn or Meta ad that puts a name to a pain they never named themselves. Pure demand creation, the hardest to pull off, the hardest to measure, and the most expensive.
- Problem aware. They feel the pain but don't know a solution exists, so they start searching the problem itself. You catch them with informational content or that same social targeting. This is the handoff point where the two channel types overlap.
- Solution aware. They know a category of solution exists but aren't comparing brands yet, they're comparing approaches. They search the category, so you show up on higher-funnel keywords: how do I solve this, best way to do X.
- Product aware. They know your product exists but aren't sold on you. They're deciding between you and the alternatives inside the category they picked. Brand campaigns, competitor campaigns, and retargeting own this level.
- Most aware. They're ready to work with you and just need a push to start now. They search your name and book a demo directly. The cheapest, warmest click you will ever get.
One thing worth understanding about the bottom of that scale: the social platforms listen to their users all day. They hear the problems people are going through and the calls they're having. It's genuinely creepy, and you've probably felt it, where something becomes interesting to you and suddenly your feed is full of it. That's the algorithm serving what it thinks is most relevant, and it's the same machinery you're renting when you buy cold social.
So the pattern is clean. The lower the intent, the more you're on social creating demand. The higher the intent, the more you're on search capturing it. Where your audience sits on that scale decides the channel, the message, and the order you turn things on.
Start where intent is highest and work down
When I build a new account I always start with high intent, for a simple reason. If you can't prove product-market fit when the prospect already has the highest possible intent for what you sell, it's a much bigger battle to take someone who doesn't even know they have a problem, walk them through every stage, and have them pick you at the end. Some people argue email nurture bridges that gap. In high-ticket B2B, in my experience, that's very hard.
Stage 1: high-intent search
Google Ads and Bing Ads, exact and phrase match, on category keywords that carry commercial intent. These are queries where someone is clearly shopping, not researching. The telltale signs are words like software, platform, pricing, and vendor. For a compliance SaaS that's exact match on “compliance automation software” or phrase match on “SOC 2 compliance platform.” Someone typing that has budget and is comparing options right now.
One tight ad group per theme: keywords for that theme, a landing page for that theme, and ads that speak directly to that theme. This is your product-market-fit test, the fastest and cheapest way to find out whether your offer and landing page actually convert. Max it out before you do anything else.
Stage 2: loosen the match, climb the awareness scale
You expand in two directions. You loosen the match types, from exact and phrase into phrase and broad. And you move up the awareness scale into more exploratory keywords, the solution-aware and problem-aware searches: how do I solve this, best way to do X with Y, the research-phase stuff.
Performance Max is optional, and I mean optional. Where I've seen it work best is a one-time purchase product. On a lease buyout, once someone buys out their lease they don't need it again for years, and PMax is notorious for heavy retargeting, which is exactly why it ends up one of the top campaigns in that kind of account. If you sell a low-cost subscription where repeat purchases are easy, be more careful with it, or potentially don't use it at all.
Stage 3: create the demand yourself
Once the search platforms literally will not take any more budget and you need to scale because it's working, you move to creating demand. Cold audiences on Demand Gen, Meta, and for B2B, LinkedIn. You reach the unaware and problem-aware crowd by speaking directly to their problem, putting a name to it if they've never thought about it, and slowly getting them to run the searches your stage 1 and stage 2 campaigns already own.
This is the hardest to set up and the hardest to track. Clicks get lost and the signal turns into noise, because you're never quite sure what drove what. If you're running three separate demand-gen campaigns, working out which one deserves the extra budget is a genuinely hard question, and it's most of the reason the build half of this exists.
Campaign structure matters less than you think
There's endless debate about campaign budget optimization versus ad-set budget optimization, whether the budget belongs on the campaign or the ad set. An account holds campaigns, campaigns hold ad groups, ad groups fork into ads, and people will argue about that tree all day. None of it really matters.
What matters is that once the ad gets shown, the messaging of the ad, the landing page, and the audience all match. Whatever structure gets you there is fine. Your prospects don't care what your account setup looks like. They care whether the ad is relevant to them.
Match types are just pattern strictness
Search adds one thing social doesn't have: keywords, and with them the question of where you show up in the auction. A match type is really just how strict the pattern match is. Exact looks for the exact string. Phrase looks for that string with words in front of or behind it. Broad looks at the semantic meaning behind the keyword and finds similar phrases and topics, so it barely looks at the string at all.
What's happened over the past couple of years is that each one has drifted into a looser version of the one below it. Through close variants, exact now behaves like phrase used to, and phrase behaves like broad. On top of that, with AI overviews in play, people are searching longer, messier, more conversational queries. So exact match does less work than it used to. It still works, because when someone is ready to buy they just type the thing, but expect it to keep shrinking.
The input that's broken 80% of the time: conversion tracking
Here's the input I promised at the start. Conversion tracking is the most overlooked part of running paid ads and the most crucial, because it's how the algorithm decides whether it's doing a good job.
On a new account I set up as many conversion actions as possible, and yes, I double count and over-report on purpose. It's much easier to trim what you send the platform later than to starve it and barely give it anything.
What that looks like in practice: key page visits, like someone landing on your contact page or request-demo page under their own steam after arriving somewhere else, because navigating there themselves shows real intent. Then form fills and demo requests, which are high value because that's someone literally raising their hand. Then, at the top, a qualified lead or a completed demo.
That top one is usually an offline conversion, because it isn't processed on the web. Someone submits a demo request, your team runs the meeting, and someone marks it as held and qualified. That comes into the ad platforms from whatever CRM you use, and it's one of the highest-value signals you can send, because you're not just saying this was a high-intent person, you can also pass qualifying details like email and phone number for the platform to match against its own data.
Bidding: climb the conversion ladder
Bidding is the method by which the machine decides where to spend your money, and it follows straight from your conversion setup. You don't start on the sophisticated setting.
In the beginning I set up every conversion I can, mark them all as primary so they're all used for optimization, and run max clicks. That tells the algorithm to buy as many clicks as it can on the high-intent keywords I researched and believe will convert on my page with my offer.
Your first conversions will come in on key page views and engaged sessions. From there, pick the conversion event getting somewhere around 50 events a week. Twenty to fifty is fine. Under twenty a week isn't enough signal. Much over fifty and the signal starts getting diluted, which makes it less useful to optimize on.
Once budgets rise or the account gets efficient enough that you're seeing ten to twenty leads or form fills a week, phase out the page-engagement and key-page-visit conversions and optimize on the form fill instead. Then, when you're consistently seeing ten to twenty qualified leads a week, move to max conversions on the qualified lead. That's when the account should really take off.
Target CPA comes last, and only if your cost per lead is already relatively low or your budget is comfortable, because it's a restrictive strategy. You're telling the algorithm you'll only pay a certain amount per conversion, so you become target constrained instead of budget constrained: even when it thinks it could serve your ads to more people, it stays capped to hold that efficiency. Turn it on before you can deliver at that number and you're just throttling a campaign that hasn't learned anything yet.
That ladder is written for search. Social works the same way with one difference: instead of max clicks you start on a traffic or awareness objective, and you can generally only optimize for one conversion at a time, so you split into separate campaigns for the different conversion actions you want to test.
The part nobody says out loud: it's a black box
This is the silent truth that mostly only experts talk about. Go back to the system: inputs, program, output. You never have full visibility into the program. Google, Meta and LinkedIn have hundreds of the smartest engineers in the world building the algorithms that decide how your money gets spent, and their own reps often don't know their own systems, because the companies are that big.
So take best practices with a grain of salt, mine included. Listen to other strategists, then go make a hypothesis and test it, because the only real source of truth is how your own account reacts to what you implement.
That said, a few things are solid enough to trust:
- High-intent search conversions. If you know what you sell and what someone types when they want it, you can trust those keywords are good.
- Hard metrics like cost per lead by campaign. You know the lead came from that campaign and you know what that campaign spent.
- Ad engagement. Click-through rate, and how long people stay on your page after arriving from the ad.
- Correlational analysis. If something moved right after you made a big change, it's fair to assume the change caused it.
The mistake is treating everything else with the same confidence. The real skill is knowing which numbers are solid and which ones are fog, and being honest about the difference.
Run it like a scientist
Picture yourself as a scientist working on a problem with a lot of unknown variables. The way forward is controlled tests: a hypothesis, and a decision made up front about what result would count as significant enough to call it true or false.
That's how I run the big accounts, the ones where there's a lot to lose. You don't want to make a pile of changes and end up stuck with performance down and no idea what caused the drop. The worst version is when you do remember every change, you revert all of them, and the account is still down, because you've lost the learning and the momentum you had. Now you don't know whether it just needs more time or whether the whole strategy needs rethinking. That's the nightmare in paid ads.
Early on it's the opposite. If you're just setting up the account you're already at the ground floor with nothing to lose, so blitz: make a lot of changes, run several hypotheses at once, accept the multiple variables, and keep going until you see some progress. Then relax the pace, give things more time, and switch to one variable at a time.
Systemize it: the app that runs all of this
This is where the engineering part stops being a metaphor. Put it in a repo, connect the ad platforms and your CRM, which is your source of truth, and you have one place for everything related to your paid-ads strategy.
Build the tracking foundation before anything else. Pull the UTM values from your CRM if they're there, and start capturing them if they aren't. That's what the first rudimentary reports run on, and it's how you find out how the account has really been performing historically.
Then three views. Marketing stats: lead volume by source and campaign over time. Efficiency stats: spend joined to revenue for true cost per lead and ROI. Funnel stats: conversion quality by channel. Once those are up you have a baseline for where the account actually is.
Then run a tracking audit against everything above: what conversion actions exist today, whether you're missing signals at the low or high end of the funnel, and whether your conversion volume is where the bidding ladder needs it to be.
I run a lot of my offline conversion uploads through my own apps for a practical reason. Tools like HubSpot have a good integration for some ad accounts, Google Ads for instance, and nothing usable for others, Bing being the obvious gap. Owning that layer means you're not waiting on a vendor to support the channel you're spending on.
After that: a weekly automated report, so on a set day you see last week's trend against the week before. I use mine as the weekly meeting with clients. A strategy log, so documenting what you did each day is easy enough that you actually do it, and the LLM can cross-reference it against ad performance and the CRM. And a creative view that pulls engagement and creative metrics off the platforms, so your creative team knows which messaging resonates and what to double down on.
The workflow you end up with is coming in on Monday and saying: check last week's performance, find any anomalies, show me. Then work through the optimizations from there. One warning, and it matters: it will agree with almost anything you tell it. That's why having a strategist involved is still worth it, because experience is what raises the hit rate of the tests you choose to run.
The takeaway
Inputs, a program you can't fully see, and an output. Most of this job is keeping the inputs clean and making sure the program gets a real signal back. Fix conversion tracking first, start where intent is highest, change one thing at a time once you have something to lose, and write down everything you do.
These are the same principles behind the accounts I run for clients scaling 100% year over year. If you'd rather have the whole system sitting in a repo you own, the build guide below is the exact stack and the prompts, in the same order as this post.
Frequently asked questions
- What's the fastest way to tell whether paid ads will work for my B2B SaaS?
- Run stage 1 first: exact and phrase match on high-intent category keywords that carry commercial intent (the ones with words like software, platform, pricing, and vendor), with one tight ad group per theme and a landing page built for that theme. It's your product-market-fit test. If someone searching for exactly what you sell doesn't convert, nothing higher in the funnel will save you.
- Which conversion action should I optimize for?
- The one with enough volume to teach the algorithm something. Aim for roughly 50 events a week; 20 to 50 works, under 20 isn't enough signal, and much more than 50 gets diluted. Start on page engagement and key page visits, move up to form fills once you're getting 10 to 20 a week, then up to qualified leads at the same volume.
- Should I run Performance Max?
- It's optional. PMax works best on one-time purchase products, because it leans heavily on retargeting, which is why it often ranks as a top campaign in those accounts. If you sell a low-cost subscription where repeat purchases are easy, be careful with it or skip it, and judge it against your search campaigns across the whole account rather than on its own numbers.
- When should I switch to target CPA?
- Last, and only once your cost per lead is already relatively low or your budget is comfortable. Target CPA is restrictive: you become target constrained instead of budget constrained, so the platform stays capped even when it could serve more. Switch too early and you throttle a campaign that hasn't learned anything yet.
- Why build your own app if HubSpot already connects to the ad platforms?
- Because the coverage is uneven. HubSpot integrates well with Google Ads and has nothing usable for Bing Ads, so offline conversion uploads only work for part of your spend. Owning that layer means tracking, reporting, and your change log cover every channel you actually run.
- How long should I let a test run in low-volume B2B?
- Until it reaches the significance you decided on before you started, which in low-volume B2B is usually weeks rather than days. Judging it early just means reading noise. If the test doesn't beat the control, revert it, which is painless as long as you logged the change.
- What numbers in ad reporting can I actually trust?
- Four things hold up: high-intent search conversions, hard metrics like cost per lead by campaign, ad engagement such as click-through rate and time on page after the click, and correlational analysis when something moves right after a big change. Cross-channel attribution, black-box placements, and top-of-funnel impact are far softer, so treat them accordingly.