MICROMARKETING Book With Tony
← How-To Guides

Use LinkedIn Conversions API and HubSpot SQL Data to Fix B2B Lead Gen in 2026

Raw leads are a lousy target I still see LinkedIn campaigns in 2026 getting judged by the cheapest form fill. That made sense when the whole program was a gated PDF, a thank-you page, and a weekly CSV. It falls apart once sales starts calling the leads. A $74 lead from a 12-person consultancy and […]

Raw leads are a lousy target

I still see LinkedIn campaigns in 2026 getting judged by the cheapest form fill. That made sense when the whole program was a gated PDF, a thank-you page, and a weekly CSV. It falls apart once sales starts calling the leads.

A $74 lead from a 12-person consultancy and a $260 lead from a 1,400-person cybersecurity company do not belong in the same optimization bucket. Campaign Manager can see both as conversions unless you send it the later CRM truth. HubSpot already has that truth sitting in lifecycle stage changes, lead status, deal creation, and close-won dates. LinkedIn’s server-side Conversions API gives you a cleaner pipe back into Campaign Manager.

That is the move: teach LinkedIn which contacts became Sales Qualified Leads, Opportunities, and Customers, then let the bidding system learn from pipeline instead of form volume.

LinkedIn’s own 2026 docs describe the Conversions API as a server-to-server connection for online, offline, and custom conversion events. HubSpot’s May 18, 2026 help doc says its LinkedIn Ads event sync can send lifecycle-stage updates through LinkedIn’s Conversions API after you connect the ad account. The two pieces fit neatly, but only if your CRM stages are clean before you turn the sync on.

The setup I would use

Start with three conversion events in HubSpot: Lead, Sales Qualified Lead, and Opportunity. If you have enough monthly volume, add Customer. I would not start with seven events. LinkedIn needs enough signal to learn, and most B2B accounts do not produce 50 closed-won LinkedIn-sourced deals a month.

For a founder-led SaaS company spending $18,000 a month on LinkedIn, I would usually optimize against SQL first. Use Opportunity and Customer as reporting conversions until the account has enough volume. In one normal B2B motion, that might mean 180 LinkedIn form fills, 42 MQLs, 19 SQLs, 7 Opportunities, and 2 Customers in a month. SQL gives the algorithm something to chew on without collapsing into noise.

HubSpot’s default lifecycle stages are Subscriber, Lead, Marketing Qualified Lead, Sales Qualified Lead, Opportunity, Customer, Evangelist, and Other. The HubSpot lifecycle-stage doc was updated January 6, 2026, and it matters for one quiet reason: HubSpot automation moves lifecycle stages forward by default. If sales pushes a contact backward from SQL to MQL, API updates and workflows may need the existing value cleared first. Miss that detail and you will send stale stage changes to LinkedIn.

Do the boring cleanup first. Define exactly what SQL means. For example: company headcount over 50, business email present, sales accepted the contact, and either booked a meeting or marked Lead Status = Connected. If your HubSpot portal has custom lifecycle stages like SAL or Demo Completed, map them before the ad platform sees them. Messy CRM stages become messy bidding signals.

Connect HubSpot to LinkedIn Ads

In HubSpot, connect the LinkedIn Ads account under Marketing > Ads. HubSpot’s June 12, 2026 connection doc says HubSpot reports on the most recent year of LinkedIn Ads account data, so do not expect this to rebuild a 2022 attribution model. You are wiring the system for the next 90 days, not excavating ancient campaign history.

Then create the conversion event in HubSpot, not Campaign Manager. LinkedIn’s own HubSpot setup page recommends setting up the conversions in HubSpot after the account is connected. That is cleaner because HubSpot owns the lifecycle-stage trigger and sends the event when the contact moves.

The path is simple: HubSpot > Marketing > Ads > Create event. Pick LinkedIn as the ad network, select the LinkedIn Ads account, choose lifecycle stage change, then select the stage. Name the event in a way a tired operator can understand three months later. I like names such as HS_SQL_LinkedIn_CAPI_US_2026 and HS_Opp_LinkedIn_CAPI_Global_2026. Ugly, yes. Useful in a reporting table, also yes.

HubSpot says only lifecycle-stage changes that happen after the event is created will count. That is a trap. If you create the SQL event on August 20, 2026, the 73 contacts that became SQLs on August 10 will not suddenly appear in LinkedIn. Build your baseline report in HubSpot before launch, then judge the sync from that date forward.

Share enough identifiers

HubSpot’s LinkedIn event doc lists the fields it can send: hashed email address, first name, last name, title, company, country, click ID, and lead ID. It also says HubSpot uses SHA-256 to hash email addresses before sending them to LinkedIn. Select all available identifiers unless your legal team has narrowed the allowed set.

Match quality matters. A work email alone may match well for a known LinkedIn member, but title, company, country, click ID, and lead ID help LinkedIn stitch together the ad interaction and the CRM outcome. The click ID and lead ID are hidden and enabled by default in HubSpot’s flow, which is good. Do not strip UTMs from your landing-page redirects either. I have seen clean CAPI setups lose attribution because a Webflow redirect dropped li_fat_id before HubSpot saw the session.

Consent needs a real owner. HubSpot’s doc gives an example checkbox for consent to share data with third parties such as Facebook, LinkedIn, and Google. Use your counsel’s language, store the consent property on the contact, and make the sync rule respect it if your policy requires opt-in. For US-only B2B campaigns this may be lighter than an EEA program, but privacy choices should sit in HubSpot properties, not in someone’s memory.

Pick the right contacts to sync

HubSpot gives you a choice: send all contacts that move to the selected lifecycle stage, or send only contacts that moved stages and interacted with your LinkedIn ads. HubSpot’s LinkedIn doc says it strongly recommends sending all contacts for best ad optimization.

I use that default for most accounts. LinkedIn still has to attribute the event back to an ad interaction, and broader stage data can help the model understand the audience pattern. The narrower option is useful when legal or internal policy says ad platforms should only receive records with a tracked ad touch. It is stricter. It also starves the model on smaller programs.

Here is the practical line I use. If the account has under 30 SQLs a month, send all eligible contacts that hit SQL, subject to consent rules. If the account has hundreds of SQLs and a strict data-sharing posture, test the LinkedIn-interacted-only setting for one quarter and compare match rate, attributed SQLs, and cost per attributed SQL. Do not switch settings every two weeks. The learning window will turn into soup.

Respect the 90-day click window

HubSpot says LinkedIn can sync ad conversion events that happen within 90 days of an ad click. Their example is blunt: a January 1 click that becomes SQL on June 1 will not count because it is outside the 90-day window.

That shapes your conversion design. For a PLG product with a 14-day sales cycle, SQL and Opportunity are both fair game. For enterprise software where procurement drags across 180 days, Customer is a reporting event, not your primary optimization target. You can still send it. Just do not expect it to steer daily spend with enough frequency.

A good B2B LinkedIn account has layers. Use Lead or MQL for early readouts. Use SQL for optimization once the volume is stable. Use Opportunity and Customer to sanity-check whether the campaign is attracting people who can buy. The spend decision should come from the deepest reliable signal, not the deepest signal you wish you had.

Verify in Campaign Manager

After HubSpot creates the event, LinkedIn says the conversion rule appears in Campaign Manager under Measurement > Conversion tracking. HubSpot notes the status starts as Unverified until data syncs, then becomes Active after LinkedIn receives conversion data.

Do not call the build done when the event exists. Wait for a real lifecycle-stage change, then check three places: the HubSpot ad event, LinkedIn Campaign Manager conversion status, and your HubSpot contact timeline. For a live test, take one recent LinkedIn lead, move it to SQL only if sales genuinely accepted it, and confirm the event appears after the normal sync delay. Do not fake pipeline just to test tracking. Use a real record or a clearly marked internal test contact that cannot touch revenue reporting.

Also check conversion associations. LinkedIn conversion tracking needs conversions associated with the ad sets you want measured. If you create events through HubSpot, review the Campaign Manager table anyway. I have seen operators assume every new campaign inherited every conversion. Then the SQL column stayed blank for two weeks.

Tune campaigns around SQL quality

Once the events are active, rebuild your campaign reporting around four columns: spend, leads, SQLs, and cost per SQL. Add Opportunity count and pipeline value if your volume supports it. A campaign with a $95 CPL and a $1,900 cost per SQL can beat a campaign with a $42 CPL and a $4,800 cost per SQL. That is the whole point.

Segment by offer, audience, and creative. Do not bury everything in one campaign group called Q3 Demand Gen. Split offers that attract different intent. A demo request, a pricing page retargeting ad, and a Gartner-style PDF download should not all fight for the same SQL benchmark.

For example, a security startup might run three LinkedIn programs in September 2026. The first targets CISOs at 500 to 5,000 employee companies with a demo ad. The second retargets website visitors with a case study from Snowflake Marketplace. The third promotes a compliance checklist to security managers. If the checklist produces 310 leads and 8 SQLs while the case study produces 64 leads and 11 SQLs, the case study deserves budget even though the CPL looks worse.

Campaign Manager will still show top-of-funnel metrics. Keep them. Click-through rate catches creative fatigue. Lead volume catches broken forms. But bid changes should follow downstream movement. I usually wait until a campaign has at least 10 to 15 SQLs before making a hard call, and I compare two-week windows so one enterprise account does not warp the read.

Use HubSpot lists as a QA layer

Build three active lists in HubSpot: LinkedIn ad contacts created in the last 90 days, LinkedIn ad contacts that became SQL in the last 90 days, and LinkedIn ad contacts with missing company, title, country, or email. The third list is where match quality leaks.

If 38 percent of your LinkedIn leads lack job title because a custom form field failed to map, fix the form before blaming LinkedIn optimization. If sales marks half the SQLs as Bad Timing within 72 hours, split that in reporting too. HubSpot’s Lead Status values include New, Open, In Progress, Open Deal, Unqualified, Attempted to Contact, Connected, and Bad Timing. Those sub-stages can show whether marketing found the right accounts or sales accepted too loosely.

I like a weekly 20-minute review. Pull five contacts from each major campaign: two raw leads, two SQLs, and one Opportunity if available. Read the company names. Read the job titles. Look at the timeline. The data usually tells you what to do before a dashboard does.

What changes after this is live

The biggest change is psychological. Cheap leads stop winning arguments by default.

Your paid and organic programs can share the same CRM language. Organic LinkedIn posts may drive profile visits, newsletter signups, and direct demo requests. Paid LinkedIn may drive lead gen forms and retargeting. HubSpot lifecycle stages give both motions a common scoreboard, and Conversions API pushes the paid side’s best outcomes back into LinkedIn’s delivery system.

By October 2026, I would expect every serious B2B team spending $10,000 or more a month on LinkedIn to have this wired. The setup is no longer exotic. The hard part is agreeing on SQL criteria, keeping HubSpot clean, and refusing to optimize around the metric that flatters the campaign while annoying sales.

Start with SQL. Send the identifiers you are allowed to send. Check the 90-day window. Review Campaign Manager status after real data syncs. Then move budget toward campaigns that create sales-qualified pipeline, even when the lead volume looks smaller on Monday morning.