← All posts
Jul 22, 20266 min read

HubSpot Is Lying About Your Ads: Here's How to See the Truth

Your HubSpot ad dashboard is hiding your real ROI. Here are the five views I use to trace every ad dollar to the revenue it drove, even months later, using UTMs HubSpot captures automatically.

By Dave Ten

Do you ever open your ad dashboard in HubSpot and think, damn, I'm bad at running ads? There's a good chance you're not. You're just looking at shallow data that hides what your campaigns actually did.

HubSpot's native ad integrations give you surface-level numbers that break down over long time horizons. Visibility into LinkedIn Ads is weak, and into Microsoft (Bing) Ads it's basically nonexistent. So channels that are quietly driving revenue can look dead, and teams cut them, or freeze budgets that should be growing.

But there's one thing HubSpot does really well: it auto-populates standard UTM values through your ad-account connections. That's the thread we're going to pull to see how your ads actually perform, especially on long B2B sales cycles, where it's dangerously easy to miss which ad interaction turned into revenue months down the line.

Why HubSpot makes your ads look worse than they are

The problem starts at the integration level. HubSpot's out-of-the-box ad reporting is built for a quick glance, not for tracing a click from March to a deal that closes in July. Over long periods it loses the thread. It sees Google reasonably well, LinkedIn only partially, and Bing barely at all.

For a B2B SaaS company with a multi-month sales cycle, that gap is the whole game. The ad that opened a deal and the moment revenue lands can be a quarter apart. If your reporting can't connect those two events, every long-cycle channel looks unprofitable, even the ones carrying your pipeline.

The one thing HubSpot does great: UTMs

Here's the good news. When a visit comes in and HubSpot saves its UTM values on the contact, that value is permanent. You can always reference it later, and trace a lead back to the exact ad it came from. So you can look at a campaign from three or four months ago and see the deal it drove that only closed today.

That single property (a durable, first-party record of where every contact came from) is enough to rebuild ad attribution far better than HubSpot's native dashboards show you.

What you need first

Two things: HubSpot connected to your ad accounts, and UTM tagging in place.

For the platforms HubSpot integrates natively (Google, LinkedIn, Meta), the UTMs auto-populate. For Bing, which HubSpot is essentially blind to, you tag the ad URLs manually with utm_source, utm_medium, and utm_campaign. HubSpot still captures those off the landing page, so Bing shows up right next to every other channel instead of vanishing into “direct.”

The rule that makes or breaks this: consistent UTMs

This is the least glamorous part and the most important. Clean, consistent UTM values are the foundation everything else sits on. Sloppy tagging doesn't just add noise; it silently splits one channel into three and makes every downstream number wrong.

The five views I use to find hidden ad ROI

Most companies on HubSpot are running blind. They know their ads work. They just don't know how much. So the budget stays flat forever and huge gains get left on the table. These are the exact views I build to fix that.

1. Marketing stats

Break everything down by the UTM values HubSpot saves: day by day, week by week, or month by month. I start at the source/medium level to see which platforms are pulling their weight, then drill into individual campaigns. This is your volume picture: how many leads each channel produced, and where the trend is heading.

2. First-touch vs. last-touch

For any event, ask whether that UTM was the first click that won the lead or the last one before the action. I lean on first-touch. It's the hardest touch to earn and has the most downstream effect through the funnel. But I check both. When first-touch and last-touch disagree, that gap tells you which channels open deals versus which ones close them.

3. Date basis: create-date vs. activity

Do you date an event by its original touchpoint, or by when it actually happened? On long sales cycles this completely changes the story. A deal that closes today might have started from an ad four months ago. Create-date pins it back to when the lead first came in, so you credit the campaign that actually did the work, not whatever happened to be running the week the deal closed. I like the week-by-week view here to check whether the tests I'm running are moving in the right direction.

4. Efficiency stats: spend meets revenue

Now pull in both the attributed UTM events and the spend from your ad accounts. You get exact cost per funnel event: cost per lead by platform, cost per closed deal by platform, and then the revenue those deals brought in for true ROI. This is the bread and butter. It tells you where to push budget and where to pull back.

One nuance: even at breakeven, you got all those impressions for free, and awareness converts to revenue eventually: the people who didn't click, the ICPs who are just starting to hear your name. So treat efficiency as the micro view, and judge the whole business on top of it.

5. Funnel stats: quality by source

Finally, look at how leads progress through the stages of your B2B sales cycle. Date basis matters even more here. I use create-date to see how a cohort of leads progresses and what quality they are: ICP fit, and how many make it from lead to SQL to deal, whether that took a month or three. Drill into specific sources and mediums, because a channel can be cheap per lead and terrible per qualified lead. This is exactly where that shows up.

One honest caveat: the unknown bucket

Not every lead has a UTM. Direct, referral, word-of-mouth, offline: there's always an “unknown” slice. I don't pretend it away. I focus on the portion I can attribute and treat the rest as a known blind spot, not a number to fake. Being honest about the gap is part of what makes the attributed numbers trustworthy.

How I actually built this

Simpler than you'd expect. No BI team, no months of setup. I spun up a repository, connected the sources (HubSpot plus every ad platform), and then literally talked to Claude to pull the UTM values off the contacts and build these reports out one by one.

If you'd rather not build it yourself, that's the whole point of the playbook below: the exact connectors and copy-paste prompts to pull all three core views live, no code.

The takeaway

Back to where we started. If your HubSpot dashboard makes you feel like you're bad at ads, it's probably not you. You've just been staring at shallow native data instead of the full picture your UTMs can paint.

Once you can trace every dollar of spend to the revenue it actually drove, even months later, you stop guessing and start scaling the campaigns that are quietly working. That's the difference between keeping your budget flat forever and actually growing it.

Frequently asked questions

Why do my ads look like they're underperforming in HubSpot?
HubSpot's native ad reporting is surface-level and loses accuracy over long time periods. It has weak visibility into LinkedIn Ads and almost none into Microsoft (Bing) Ads, so channels that are actually driving revenue, especially on long sales cycles, can look dead. The fix is to report off the UTM values HubSpot stores on each contact rather than the native ad dashboards.
Does HubSpot track Microsoft (Bing) Ads?
Not natively. HubSpot is essentially blind to Bing. But if you tag your Bing ad URLs manually with utm_source, utm_medium, and utm_campaign, HubSpot captures those UTMs off the landing page. Bing then shows up next to every other channel in your reports instead of collapsing into “direct.”
Should I use first-touch or last-touch attribution in HubSpot?
Use both, but lean on first-touch. First-touch is the hardest touch to earn and has the most downstream effect through the funnel, while last-touch shows what closes deals. When the two disagree, the gap reveals which channels open opportunities versus which ones close them.
How do I attribute ad revenue on a long B2B sales cycle?
Date each deal by create-date (its original touchpoint) rather than by when it closed. A deal that closes today may have started from an ad months earlier, so create-date basis credits the campaign that actually did the work and stops long-cycle channels from looking unprofitable.
Do I need a data warehouse or a BI team to do this?
No. You need HubSpot connected to your ad accounts, consistent UTM tagging, and a way to query the data. I built my full reporting by connecting the sources and using Claude to pull UTM values off contacts and build each view, no BI team and no months of setup.
What about leads with no UTMs?
There's always an unknown bucket: direct, referral, word-of-mouth, and offline traffic. Report it separately and treat it as a known blind spot rather than inventing numbers for it. Focus optimization on the share you can attribute.