LinkedIn ads for SaaS, an operator's playbook
A build plan to copy for a software company: the structure, audience sizes, settings, budgets, retargeting, tracking and weekly routine, each with its source.
LinkedIn ads pay for a software as a service (SaaS) company when the contract value can carry LinkedIn's costs and the targeting stays on the buying committee. The account runs as separate account-based, persona and retargeting ad sets, each above LinkedIn's 300-member minimum with a conversion attached.
Below: when it fits, structure, audiences, formats, budgets, retargeting, tracking and the weekly routine.
When LinkedIn ads fit a SaaS company
LinkedIn is the ad platform where you can pick people by employer, job function and seniority. You pay for that precision, so before building anything, check 3 things about your own business.
- Contract value. A closed deal has to pay for every impression and click it took to find the buyer. Work backward from annual contract value and your close rate on qualified meetings to what 1 meeting can cost. If LinkedIn can't produce meetings under that number, no setting will fix it. Current prices are in what LinkedIn ads cost.
- Sales cycle. On a 9-month cycle, most deals close long after the click. LinkedIn's default conversion window counts conversions up to 90 days after a click or a view, and the Conversions API can report qualified-lead stages up to 365 days out (LinkedIn Help, conversion window, checked 2026-11-07). Without that pipeline data, a long-cycle account looks like it produces nothing.
- Reachable audience. Your buyers need to be findable by company, job function and seniority, and every ad set needs at least 300 of them. A product sold to anyone who uses a spreadsheet has no committee to aim at.
For an outside read with a date on it, Factors.ai's 2026 LinkedIn report, From Benchmarks to Blueprints, covers more than 850 business-to-business (B2B) companies and over 150 million USD in LinkedIn ad spend. It reports LinkedIn returning 1.6x on ad spend against 1.18x for Google (Factors.ai, LinkedIn ads for B2B in 2026, published 2026-11-03). The sample is made of companies that send their sales data to a vendor's product, so it describes that vendor's customers better than it describes you. Treat it as a reason to run a test.
LinkedIn's floor to start is 10 USD a day for any format, or 100 USD lifetime for a new campaign (LinkedIn, Making the Most of Your Budget, checked 2026-11-07). Those amounts let a campaign start, and they say nothing about whether the budget reaches your audience, which is what the next check is for.
The budget check before the first ad
Multiply 3 numbers: the audience size, the impressions you want each member to see in a month, and your own cost per 1,000 impressions from past ad sets like this one. The linkedin-campaign-launch skill runs this check before it builds anything. It calls under 1 impression per member a month thin, 1 to 8 workable and over 8 saturated. Those bands are Adwarp's own defaults, so move them if your account behaves differently.
| Line | Input | Placeholder example |
|---|---|---|
| A | Audience size, from the forecast pane | 5,000 members |
| B | Impressions per member per month | 4 |
| C | Your own cost per 1,000 impressions, last 90 days | 60 USD |
| D | Monthly budget: A x B x C / 1,000 | 1,200 USD |
| E | Daily budget: D / 30 | 40 USD |
| F | LinkedIn's minimums | 10 USD a day, 100 USD lifetime |
The numbers in the right column are made up to show the arithmetic. With no cost history of your own, read the 7-day projected spend in Campaign Manager's forecast pane as a ceiling, start near the minimum and redo the check after week 1 with the cost you actually paid.
Account structure: campaigns, ad sets and ads
Campaign Manager names its 3 levels campaign, ad set and ad. LinkedIn's Marketing API, and Adwarp's tools, still call them campaign group, campaign and creative (LinkedIn Help, Create campaigns). Expect to translate whenever you read the API docs next to the interface.
Each ad set gets 1 objective and 1 format. LinkedIn locks both once the ad set launches (Edit an ad set, ad set settings), and changing the objective during setup resets settings you already chose. A second format means a second ad set, which also gives that format its own line in the report.
1 campaign per program: account-based, persona prospecting, retargeting
Run each program as its own campaign. The objective sits on the campaign and every ad set inside shares it, and an ad set can't move to another campaign after launch (Create campaigns). In Adwarp's skills, account-based and persona ad sets start on Website visits. Retargeting moves to Website conversions once its conversion records regularly, since a conversion objective needs conversions to learn from.
Separate campaigns also keep the reports sensible, since a 600-person account ad set and a 5,000-person persona ad set shouldn't sit in the same click-through rate ranking.
Names that still read in reports
Name ad sets <objective> | <audience> | <geo> | <offer> | <format>, the pattern the linkedin-campaign-launch skill falls back on when an account has none. Campaigns get <program> | <quarter> and ads get <offer> | <angle>. Sort an export by name and it groups by audience, and you can read an ad's angle without opening it.
Campaign: Persona prospecting | Q4 2026
Ad set: Website visits | Finance directors | US CA | 5-day close guide | Single image
Ad: 5-day close guide | ChecklistSettings to change on every new ad set
Campaign Manager starts several settings in the position that buys the most reach. For a sized audience, change these before the first launch.
| Setting | LinkedIn's starting value | Set it to | Source |
|---|---|---|---|
| Audience Expansion | On where available, and the forecast leaves its members out | Off | a418929 |
| LinkedIn Audience Network | On for new single image, carousel, document and video ad sets | Off | a420372 |
| Location | A suggested option among Recent or permanent, Permanent and Recent | Permanent location | a424655, a420751 |
| Ad rotation | Optimize for performance, LinkedIn's recommended option | Rotate ads evenly while you test | a423702 |
| Conversion | None attached | 1 conversion, attached at creation | a484456 |
Recent or permanent location also matches members by IP address during short visits, so a conference can drop out-of-market visitors into a regional audience. Permanent location uses only the location on the member's profile.
Every ad set Adwarp creates already has Audience Expansion and the Audience Network off, and it lands as a draft (safety). To put the Audience Network back on, do it in Campaign Manager after creation; the Audience Network post covers when that's worth it.
Audiences sized for a buying committee
Every ad set needs at least 300 member accounts to run (LinkedIn Help, Target audience size best practices, checked 2026-11-07). The same page suggests at least 50,000 for most ad sets and 300,000 for Sponsored Content. Account-based work runs far below that on purpose. The buying committee at 1 company is a few hundred people, and widening an ad set to 50,000 means paying to reach people who will never sign.
| Program | Targeting | Size range | Source |
|---|---|---|---|
| Any ad set | Anything | 300 member accounts at least | LinkedIn, a423690 |
| 1:1 account-based | Company name, job function, seniority | 400 to 1,000 per ad set | Adwarp default, linkedin-abm-builder |
| Persona at target companies | Company list, job function, seniority | A few thousand per persona, about 50 to 500 per account | Adwarp default, linkedin-audience-sizing |
| Retargeting | Website, video, form, Page or event audience | 300 matched to serve, 1,000 or more to aim for | LinkedIn, a427551; Adwarp default |
| LinkedIn's suggestion | Broad prospecting | 50,000; 300,000 for Sponsored Content | LinkedIn, a423690 |
1:1 account-based ad sets
Target the account by Company name, which matches a member's current employer, then add the job functions and seniorities that sign, use and block the purchase. Narrow until the estimate sits between 400 and 1,000. The lower bound leaves room, because exclusions and people changing jobs can drop a 350-person ad set under 300 halfway through a flight. Past 1,000 the budget grows and the ads reach people far from the deal.
LinkedIn won't combine Company name with industry or company size, and job titles replace function and seniority rather than adding to them (Targeting Criteria Facet URNs). For an account that comes out small, widen in this order: Senior seniority, then 1 function that influences the deal such as Purchasing, then subsidiary pages. A big account goes the other way. Drop Manager first, then the least central function, and if it's still over, restrict the location to the office where the buying group sits.
The linkedin-abm-builder skill plans 1 ad set per account this way, and Adwarp's estimate_audience checks that each lands at 400 to 1,000 before anything is built. Small accounts that share an angle merge into 1 cluster ad set. An account that can't reach 300 at all goes to sales as outbound only. The session below runs on the skill's made-up example list.
> Plan 1:1 ad sets for the 13 accounts in accounts.csv. Finance, Accounting and Operations, Manager to CXO, United States.
adwarp.search_targeting employers, 13 accounts: 13 pages
adwarp.estimate_audience Brightwater Foods: 640
adwarp.estimate_audience Copperline Manufacturing: 2,300
adwarp.estimate_audience Copperline, drop Manager: 960
adwarp.estimate_audience Pinecrest Tools, + Senior, + Purchasing: 405
adwarp.estimate_audience Redfern + Little Fern as 1 cluster: 420
adwarp.estimate_audience Marlow Instruments, widened twice: 70
10 accounts in range, 1 cluster of 2, Marlow Instruments goes to sales as outbound only
Plan: 11 ad sets, 33 ads, a 14-day flight, 2,142 USD against a 2,500 USD cap
Made-up example data. Nothing is created until you reply yes, and every ad set lands as a draft.
The full workflow is on account-based ads.
Persona prospecting at target companies
Upload the target account list as a company list, then layer job function and seniority on top, with 1 ad set per persona. A company list needs at least 300 rows to upload (company list requirements). Aim for a few thousand people per persona. Finance leaders and IT leaders read different ads, and in separate ad sets each persona reports on its own.
Matched lists from Salesforce or HubSpot
Contact lists go up as email addresses hashed with SHA-256. Matching takes up to 48 hours, and a list needs at least 300 matched member accounts before an active ad set can use it (contact list requirements). LinkedIn recommends uploading at least 10,000 emails, so a list of 400 contacts on open deals may match too few people to run alone.
Adwarp's audience_from_salesforce turns a SOQL query that selects an email column into a matched audience, and audience_from_hubspot does the same from a HubSpot list or search. The HubSpot path hashes each email with SHA-256 on your machine and uploads only the hashes. Setup is on the Salesforce and HubSpot pages, and the list mechanics are on audiences.
Exclusions every SaaS account needs
Keep 4 matched lists current and exclude them from every prospecting ad set: customers, contacts on open opportunities, competitors' employees and your own employees. Customers and open deals get their own programs, and the other 2 lists are people who will never buy from you. An Expired audience can't be added to an ad set, and an ad set holding one can't be reactivated (expired audiences). Refresh the lists monthly.
Formats and offers by funnel stage
Start every program on single image ads and add other formats where a stage needs them. LinkedIn's A B2B Marketer's Guide to Every LinkedIn Ad Type (September 5, 2025) sorts them into Sponsored Content, Sponsored Messaging and Dynamic Ads. A SaaS account mostly uses 5.
| Format | Fit | LinkedIn's guidance |
|---|---|---|
| Single image | Every stage, the base format | An image that carries the message, with short intro text and a headline |
| Thought leader | Cold and warm audiences | Sponsors a founder's or employee's post, with their approval |
| Document | Cold personas | A preview of a guide; members unlock the full file with a form |
| Video | Reach in cold audiences | Autoplays in the feed as people scroll |
| Text and spotlight | Extra reach on account-based audiences | Desktop right rail; spotlight ads use the member's photo and job title |
LinkedIn recommends at least 4 ads per ad set, live for at least 7 days (ad set setup best practices). The account-based skill runs 3 per ad set on purpose: a 600-person audience has few impressions to split, and a 1:1 ad set is no place for a creative test. Adwarp builds single image and text ad sets end to end. For video, carousel and document ads, the launch skill writes a build sheet to follow in Campaign Manager instead. For real ads by format, see LinkedIn ad examples.
Thought leader ads next to company ads
Sponsor a person's post when the person is the reason anyone would read it: a founder who writes about the problem your product solves, or an engineer explaining a release. Keep company Page ads for the offer itself, such as the demo, the guide or the pricing page.
In Campaign Manager's Content Library, you search for the member's post and click to request approval. The member gets an email, approves the request from LinkedIn's Sponsorship Permissions page, and can revoke approval later, which stops the ad (sponsorship requests). The post has to be public, and the member has to disclose the relationship to the company. Thought leader ads run only in ad sets with the brand awareness, engagement or video views objective (create thought leader ads), so they need a campaign of their own next to a Website visits program. The thought leader ads post goes through setup.
The offer for each audience
Match the ask to what the person already knows about you. Cold personas get something useful without a sales call: a guide, a benchmark or a template. Retargeting audiences and contacts on open opportunities get the demo or the trial, because they've seen the product or talked to sales already. A demo offer in front of a cold persona tends to spend impressions on people who have never heard of you.
Budgets and bidding
LinkedIn's minimums are 10 USD a day and 100 USD lifetime for a new campaign. On any given day, actual spend can run up to 100% over the daily budget, so up to 2 times the amount. On a continuous schedule it won't pass 7 times the daily budget in a week, and total spend never passes a lifetime budget (Campaign and ad set budgets, checked 2026-11-07).
Give account-based ad sets a fixed flight with an end date, so spend stops on its own. Adwarp's own account-based runs used 2-week flights, above LinkedIn's suggested minimum of 7 days. Budget each ad set from its audience with the check above, and let a cluster or an outbound-only account absorb the cuts when the program runs over its cap.
| Strategy | How it bids | Charged by | Fits |
|---|---|---|---|
| Maximum delivery | LinkedIn bids automatically to spend the full budget | Impressions | Fixed flights where reaching the account matters more than the price of a click |
| Cost cap | You set a cost per key result as a benchmark | Impressions | Brand awareness, website visits, engagement, video views and lead generation only |
| Manual | You set the bid for a key result | Impressions, clicks, sends or video views | Control over what you pay, at the risk of spending less than the budget |
Source: Campaign and ad set bidding strategies, checked 2026-11-07. Maximum delivery takes no bid and no cap. LinkedIn suggests manual bidding when you prefer to monitor and update your bids yourself for maximum control. In Adwarp, optimizationTargetType: MAX_CLICK is maximum delivery on landing page clicks, and leaving it out with a unitCost sets a manual bid. Every budget and bid change Adwarp makes goes into the change journal, so you can read its effect later.
A retargeting sequence
LinkedIn builds retargeting audiences from your website (through the Insight Tag), video viewers, Lead Gen Form users, Company Page visitors and event attendees. On 2026-11-07 its help page listed 9 types, adding single image, document and conversation ad audiences and Conversions API audiences (Retargeting with Matched Audiences). Each needs at least 300 member accounts before it can be targeted, and a website audience can take 48 hours to build (website retargeting).
| Step | Audience | Offer | Exclude |
|---|---|---|---|
| 1 | Engagers: video viewers, Page visitors, event attendees, form openers | Proof: a customer story or a benchmark | Customers |
| 2 | High-intent visitors to pricing, integrations, security or comparison pages | A demo or a trial | Booked demos and open opportunities |
| 3 | Converted accounts | None | Everyone above, through matched lists from Salesforce or HubSpot |
Build the website audience from the pages that signal buying. An all-visitors audience pulls in job seekers, students and customers logging in to the app. Keep the exclusions in step 3 current, or customers keep seeing demo ads for a product they already pay for. More on the mechanics: retargeting.
Conversion tracking that reaches pipeline
Put the Insight Tag on every page of your domain, as LinkedIn's setup asks (Add the Insight Tag). Then attach a conversion to every ad set, at creation. LinkedIn's help says conversions are only tracked when attached to an ad set (Conversions API setup), and it can't report conversions for ads shown before the conversion was added (add conversions).
The default window in Campaign Manager is a 90-day click and 90-day view window, and you can set 1, 7, 30 or 90 days instead (conversion window, checked 2026-11-07). Check the window before comparing LinkedIn's conversion counts with another tool's.
A form fill is the start of a SaaS deal, so send the later stages back too. The Conversions API takes conversions from your own server or a partner integration, and LinkedIn lists HubSpot and Salesforce Data 360 among the partners. Its conversion categories include Qualified Lead, Marketing Qualified Lead and Sales Qualified Lead, and Conversions API and CSV conversions in those categories can use a 180 or 365-day lookback window. Once those stages flow back, you can judge a program with a 9-month cycle on the pipeline it opened.
In Adwarp, list_conversions shows the account's conversions, and create_campaign takes conversionIds. Without them it attaches the default conversion from your config, which may not be the one you meant, so pass them every time. The setup itself, step by step, is in LinkedIn conversion tracking.
The weekly routine
Leave an ad alone until it has about 1,000 impressions, and don't read its cost per conversion before it has 3 conversions. Those floors are the defaults in Adwarp's performance review skill. A 1:1 account ad set may never reach them per ad, so judge it over the whole flight and pool results by angle across accounts.
Judge: nothing under 1,000 impressions or 3 conversions
Pause: under the format's click-through floor after 1,500 impressions
Limit: at most 5 pauses per run, top 5 ads by conversions protected
Log: every budget, bid and creative change, with the reasonThe pause rule comes from the linkedin-ads-pause-rules skill, and each format gets its own floor. The defaults are 70% of the lowest public median for the format: 0.29% for single image, 0.22% for carousel, 0.17% for video and 1.88% for thought leader ads, from ZenABM's medians of 0.42%, 0.32%, 0.24% and 2.68% across 161,256 ads at 211 companies (ZenABM, LinkedIn Ads CTR Benchmark, updated 2026-02-16). Document, event and other formats have no agreed public median, so they stay out of the run until you set a floor.
The rule never pauses the last active ad in an ad set, since that would stop the ad set without anyone deciding to, and it keeps ads that convert at or under your target cost. The cap is there because 1,500 impressions is a thin sample. A single image ad sitting exactly at the 0.42% median still shows under 0.29% about 25% of the time at that volume, so the run sorts candidates by spend and stops at 5. Each run shows a dry-run table first, pauses only the list you confirm, and logs the reason with log_ad_change.
> Run the pause rules on the last 30 days. Dry run first.
adwarp.list_campaigns active ad sets: 6
adwarp.get_performance creative, last 30 days: 21 ads
5 ads under their format's floor after 1,500 impressions, highest spend first
Kept under the floor: 1 top-5 ad, 1 at target cost, 1 last active ad
Skipped: 2 document ads, since documents have no floor until you set one
SQL to board slides breaks the video floor too, held for next run by the cap of 5
Nothing has changed. Confirm the list to pause it.
> pause these 5
adwarp.update_ad 100000102, dry run: 1 patch
adwarp.update_ad 100000102: PAUSED
adwarp.log_ad_change 100000102, 0.21% on 8,200, floor 0.29%: logged
4 more paused and logged the same way
Paused 5 of 5. Next run: recheck 100000303, and replace 100000501 before pausing it.
Log every budget, bid and creative change with a reason, including the ones made in Campaign Manager. Adwarp journals its own writes automatically in a local file. Later, compute_lift compares the 14 days before a change with the 14 days after it (change journal). Read the result as a signal: seasonality, LinkedIn's learning phase after an edit and any budget change made at the same time all move it. More on the loop: optimization.
compute_lift compares.Put it to work
Account-based ads
Adwarp plans 1 ad set per target account, sizes each to 400 to 1,000 decision makers and creates them as drafts from your terminal.
adwarp.dev/linkedin-ads/abmBy Stan Rymkiewicz, maintainer of adwarp. Published November 7, 2026.