HubSpot attribution data usually goes missing because something upstream stopped sending it and nothing reported the break: a tracked link with a malformed personalization token, a hidden form that rejects submissions, a workflow that was never published, or an ad pixel that never sees the conversion. Each one passes a casual check, so test them on purpose.
- A tracked link with a malformed personalization token still produces clicks in email stats, but identifies no one and creates no company.
- A hidden form that an external system submits to will reject any submission when required fields are missing, so make every field on it optional.
- A suppression workflow that is unpublished, or has its customer-exclusion branch last, leaves hard-bounced contacts marketable.
- A browser pixel alone misses conversions on small, expensive audiences; add a server-side conversion API before scaling paid social spend.
- Test with a known external contact in a private window and read the contact timeline, not a dashboard.
- Verify the tracking signal before you design or debate credit rules.
Why does HubSpot attribution fail without showing an error?
Dashboards draw whatever data arrives. If a link never identifies the visitor, the click still lands in the email stats and the report still draws its bar. It just draws that bar from fewer records than you think.
That is why these failures look like reporting problems first. On recent engagements, several of the failures below first showed up as a complaint that the numbers felt low, or that credit was landing on the wrong team, and turned out to be plumbing faults that no one had been alerted to. Debating credit rules while the signal is broken is expensive. Verify the signal first, then argue about the model.
Why does a tracked link stop identifying contacts?
Content platforms and email vendors often generate tracked links that carry a record ID, so HubSpot can look up the contact when they click. In one case the vendor's link builder wrote the personalization token with the plural object name, contacts, where HubSpot expects the singular, contact. The plural is the name of the API collection. The singular is the name of the object. HubSpot never resolved the token.
Nothing errored. Clicks still appeared in the email statistics. But no identity attached to the click and no company was created, so no enrichment ran. One character, contact versus contacts, was the whole bug, and it survived because everything around it kept working.
The tell is in the email editor preview. A correct record ID token visibly changes into a merge tag. An unresolved one stays plain text. Check that before anything else, because it takes ten seconds.
A related choice sits underneath. An encoded link carries only a record ID and does a read-only lookup, so no personal data travels in the URL. A standard link works but exposes personal data. If a team has quietly fallen back to standard links, ask whether the encoded version ever worked.
What happens when a hidden form rejects required fields?
Many vendors write activity back to HubSpot, such as content views and CTA clicks, through a form that is published but not public. The vendor submits to it through the Forms API and keys on email address. Nobody sees that form on a page, so nobody thinks to open it.
If that form has required fields, the vendor's system cannot satisfy them on every event, because it does not populate every field every time. HubSpot rejects the submission with a missing-required-fields response, and the activity never syncs. Your public forms and landing pages keep working, which is exactly why no one looks.
The fix is dull. Make every field on that form optional. Make the field internal names match the vendor's mapping table exactly. Paste the form ID into the vendor's integration settings, and confirm any tracking-code toggle on their side is switched on. As the consultant on that engagement put it, if we require fields, their system can't fill out everything every time, so it fails the moment it hits a block.
One more trap: this path usually fires only for known external contacts. A test from an internal company email will not trigger it, and you will conclude it works.
How does an unpublished workflow keep bounced contacts marketable?
This one looks like a deliverability issue on its face. It belongs here because the silence is the same and the habit that catches it is the same: confirm that the thing you assume is running is running.
In one portal, the workflow that should switch hard-bounced contacts to non-marketing was sitting unpublished. A previous admin had turned off a number of workflows and no one had audited the list since. Bounced contacts stayed marketable and synced to Salesforce that way. Reps kept emailing addresses that had already hard-bounced.
Branch order added a second fault. HubSpot evaluates if/then branches in order, and the customer-exclusion branch sat last, so every earlier branch had already acted by the time it ran. It belonged first. Marketing contact status also syncs in both directions between the two systems, and the most recent change wins. A status someone corrects in HubSpot can be undone by the next update from the other side.
Compare your bounced list against marketing contact status. If any bounced contact is still marketable, the workflow is not doing its job, whatever the dashboard says.
Why does an ad pixel miss conversions the CRM never sees?
Paid social is the quietest of the four. A browser pixel only reports conversions that the browser lets it see. For a small, expensive audience, every missed conversion starves the ad platform of the signal it uses to optimize, and your attribution report undercounts the channel at the same time.
On the account where this came up, the consultant's read was that the pixel alone was missing the conversions that mattered, and that spend should wait until a server-side conversion API was in place. That sends the event from your own systems instead of relying on the visitor's browser. The principle holds for any channel where each conversion is rare and costly: instrument the server side before you scale spend.
How do you test attribution tracking without fooling yourself?
Most bad tests produce a false pass. Your own browser session already carries an identity, so a click from it looks identified whether or not the link works. Use a private window and a known external contact instead.
Send the test email from that contact's own profile in HubSpot. A forwarded test email prevents enrichment, so you will see nothing and blame the wrong thing. A test contact with no company record will legitimately get no company enrichment, which says something about the test data and nothing about the tracking. Internal addresses will not trigger vendor-side form activity at all.
Then read the answer in the right place. Do not look at a dashboard. Open the contact's timeline and confirm the click and the vendor activity are both there. For vendor integrations, ask the vendor to run a test and send you the address they used, then look that contact up yourself.
What should you check on launch day and for the first three days?
Before the send, confirm four things. The record ID token visibly resolves in the editor preview. One test email to a known external contact shows the click and identity on the timeline. The hidden form accepts a submission that contains only an email address. The suppression workflow shows as published, with the customer branch first.
After the send, scan new contacts and their activity each day for the first three days. If something looks wrong on day one, escalate on day one. A missing signal gets harder to repair every day it runs, because every missed touch is a record you cannot reconstruct.
Credit rules are a separate problem with a separate fix. Settle what credit pays, split lead source, channel and owner into their own fields, and only then model multi-touch. None of that works on top of a feed that has quietly stopped. Start tomorrow with one test email to a known external contact, and read the timeline.
Frequently asked questions
Why is my HubSpot tracked link not creating a contact or a company?
Check whether the record ID token visibly resolves in the email editor preview. If it stays plain text, nothing identifies the visitor, so no contact is matched and no company is created. A plural object name where HubSpot expects the singular is one cause we have seen.
Why did activity from an external vendor stop appearing in HubSpot?
If the vendor writes activity through a hidden form and that form has required fields, HubSpot rejects any submission the vendor cannot fully populate. Make every field on the form optional and match the field internal names to the vendor's mapping.
How do I test HubSpot tracking without my own session interfering?
Use a private browser window and a known external contact, send the test from that contact's profile in HubSpot, and read the result on the contact timeline rather than on a dashboard.
Why are bounced contacts still marketing contacts in HubSpot?
The suppression workflow is probably unpublished, or its customer-exclusion branch runs after the branches that act on the contact. Confirm the workflow is live and put the exclusion first. Then check whether marketing contact status is syncing back from Salesforce.
Use this to pressure-test your RevOps
- 01Can your CRO trust the forecast without a manual rebuild?
- 02Can marketing prove which campaigns influenced pipeline?
- 03Can sales leaders see what changed in the pipeline week over week?
- 04Can RevOps prioritize strategic work instead of living in tickets?
- 05Can your systems support AI workflows without creating more mess?
Need help turning RevOps from reactive support into a strategic advantage?
RevPal helps B2B SaaS teams improve GTM systems, forecasting, attribution, reporting, AI workflows, and revenue operations execution.



