I was auditing our own portal this week and hit something I had not seen written up anywhere, so sharing it here.
One of our campaigns had 15 blog posts, 10 landing pages and 10 emails attached to it. Analytics showed 0 sessions, 487 influenced contacts, and 4 form submissions total. So traffic was clearly happening, but none of it was being attributed to the campaign.
The cause was straightforward once I looked: nothing anywhere was using the campaign UTM. HubSpot-sent emails attribute on their own without needing one, so the campaign looked reasonably alive while sessions stayed flat at zero.
The part I actually want to flag is what happened when I tried to audit our tracking URLs programmatically. I went looking for the ones built in Reports > Tracking URLs and could not reach them at all:
- There is no tracking URL object type in the portal schema
- The CAMPAIGN object only exposes
hs_utm - Nothing in CRM v3 objects surfaces the saved tracking URLs
The Tracking URL Builder just sits outside the CRM object model. Which means if you want to check for inconsistent source and medium naming, encoding problems, or links pointing at draft pages, that is a manual job in that one screen. There is no scripted way to do it that I could find.
For what it is worth, I built links for the four top performing assets and sessions moved from 0 to 1. Small number, but that was the point, confirming attribution actually fires before rolling links out across everything else.
If you want to check your own, compare sessions against influenced contacts on any campaign, and take a look at whether the lists attached to it have had an email recently. Ours had 1,176 contacts and nothing since October 2025.
Happy to go deeper on the API side if anyone has hit the same thing.