At 42 Agency, we work with clients who run complex revenue stacks. Attribution rarely follows a clean, linear path. For one client, we kept running into the same issue: contacts associated with deals weren’t consistently receiving the correct “latest channel” attribution.
The result was familiar to any RevOps team: deals attributed to “Unknown.” Incomplete reporting. Manual, time-consuming validation to figure out which channel actually influenced the deal.
Instead of accepting this as a limitation, I built a targeted attribution audit workflow using Breeze AI in HubSpot. Here’s how it works—and what I learned along the way.
The Two Problems Breaking Our Attribution
Two scenarios were consistently breaking our attribution model. Understanding these is key to understanding why we needed the AI approach.
1. The contact-deal association gap
When a deal is created in Salesforce and syncs to HubSpot, there’s often a delay before the contact gets associated. During that gap, the contact might never enter the standard workflow responsible for assigning the latest channel.
2. Sources that happen after the deal
We also saw edge cases where the Latest Traffic Source Date was later than the deal creation date. From a RevOps perspective, this is a critical distinction: we don’t want the most recent interaction—we want the most recent interaction that actually contributed to the deal.
Together, these issues created a growing pool of “Unknown” channels and forced teams into reactive, manual investigations.
We are running a survey of RevOps & AI - the full report will be published here & available for free
Take the survey - takes 10 minutes
Why We Built an Audit Agent
The goal wasn’t just to validate our existing attribution logic. It was to investigate and recover the latest meaningful source for prospects who followed non-standard paths.
Think of it as a detective:
· It retraces the prospect’s journey
· Reviews timestamps, channel history, and associations
· Produces a reasoned conclusion about the most likely source
And when the standard investigation still comes up short, a Forensic Research Agent steps in—performing a deep dissection of the prospect’s lifecycle to reconstruct the most accurate attribution possible.
This Is an Audit Workflow, Not a Scaled Process
From the start, I made a deliberate decision: this workflow should not run on every contact.
Each Breeze Data Agent execution consumes 10 credits. If a contact passes through multiple branches, that’s 20 credits. Design for intentional scarcity—one or two contacts per month, not hundreds.
The trigger:
A contact enters the workflow only when:
· Latest Channel = Unknown
· The contact has already passed through the standard attribution workflow
· The contact is not part of excluded operational segments
Scheduling and cost control:
The workflow includes a 30-minute delay, and I’ve set it to only run on Fridays between 3pm and 7pm. We need to be sure only a handful of contacts per month enter this workflow—it’s an audit, not a bulk process.
How the Attribution Audit Agent Works
Branching by Source Type
One of the biggest learnings: avoid a single “catch-all” prompt.
I originally tried to write one prompt that could handle all source types, but Breeze couldn’t process it reliably. When I separated the channels and wrote specific prompts for each, the accuracy improved significantly.
The workflow splits into clear branches:
· Organic inbound: Direct, Organic Search, Organic Social, Email, AI referrals
· Paid inbound: Paid Search and Paid Social
· Referrals and campaigns
· Offline sources: outbound prospecting and events
This structure keeps prompts focused and significantly reduces hallucinations.
The Core Logic: “Time-Travel” Attribution
Every AI agent follows strict chronological rules:
1. If the source date is before or equal to the deal creation date → the source is valid and accepted
2. If the source date is after the deal creation date → the agent must search the property history to find the value active at the moment the deal was created
3. If no reliable data exists → the contact is flagged for manual review
The Year Rule (Non-Negotiable)
I explicitly taught the agent that 2026 is always after 2025.
Without this instruction, the model occasionally misinterpreted dates like 1/8/26 and 10/15/25. For RevOps teams, this was a clear reminder: never assume AI understands time the way humans do.
Tips for Writing the Prompts
This took a lot of trial and error. A few things that made a real difference:
· Use property tokens, not just property names. The agent needs the exact data reference to pull the right information.
· Be very specific about date/timestamp formats. I had a lot of issues until I added explicit instructions like: “Both timestamps must be parsed as datetime values using the format…”
· Draft with multiple tools. I drafted my prompts with Gemini, then ran them through ChatGPT for a second review. Even then, it took multiple rounds of testing to get them working consistently.
The Final Fallback: The Forensic Research Agent
When all standard branches still return “Unknown,” the contact enters the most advanced step.
The Forensic Research Agent:
· Performs a deep analysis of the Channel History Log
· If the log is empty, applies a fallback rule: compares the month and year of the Contact Create Date with the Deal Create Date
· If they match, suggests the Original Traffic Source as the most likely contributor
It’s not perfect—but it’s significantly better than leaving attribution blank.
A Real Example: The Multi-Touch Maze
Consider this journey:
· September 2025: First visit via Organic Search
· October 10, 2025: Deal created manually (Salesforce sync)
· October 15, 2025: Returns via a Direct “Book demo” link
· January 2026: Clicks a LinkedIn ad (Paid Social)
Without an audit, HubSpot would attribute the deal to Paid Social in January 2026.
With the audit agent, post-deal interactions are ignored, and Organic Search is correctly identified as the true driver—or inferred using creation-date logic if needed.
Making the AI Accountable
To keep the system transparent, I populate several custom properties:
· AI Suggested Latest Channel Attribution — what the agent determined
· Attribution Reason — why it made that decision (e.g., “Source date occurs after deal creation date”)
· Attribution Detail — UTMs, offline event type, etc.
· Source Investigation Log — a full forensic timeline
This gives us visibility into what the AI is doing and helps catch any issues. For RevOps, this is essential: if you can’t audit the AI’s decision-making, you can’t trust it.
Honest Caveats
The prompts sometimes hallucinate. This is real and you need to plan for it.
That’s why I added a secondary data agent branch for contacts tagged as “requires manual review.” This branch tries again with a different prompt structure. But even with that, some contacts will still need a human to look at the history log and make a judgment call.
My recommendation: don’t activate a workflow like this right away. Test it manually first by enrolling specific contacts and reviewing the outputs. Make sure you understand where the AI gets things right and where it struggles.
What This Taught Me
1. Breeze can’t handle complex prompts. Smaller, focused prompts outperform one big “do everything” prompt. Every time.
2. Credits add up fast. Design workflows to be highly selective about which contacts enter AI-powered actions.
3. Always have a manual review fallback. AI tools are helpful, but they’re not 100% reliable—especially for edge cases.
4. Temporal logic must be explicit. Especially across calendar years. The AI doesn’t naturally understand that January 2026 comes after October 2025.
5. Testing is not optional. Use the “test action” feature aggressively before going live.
What’s Next
This system is still evolving. I’m continuing to refine prompts, monitor outputs, and learn from edge cases. The approach is highly adaptable for other teams facing similar attribution gaps.
If you’ve built something similar—or have opinions on prompt design and attribution logic—I’d love to compare notes. These tools are new, and in RevOps, we’re all still figuring out what truly scales.
Jessica is a Revenue Operations Analyst at 42 Agency, focused on GTM Ops and attribution.




