There's a particular tell I look for when I take on a new B2B client: how does the CMO open the attribution dashboard? If the first thing out of their mouth is "now, this number doesn't quite mean what it looks like", the issue probably isn't the dashboard, it's the data architecture sitting under it. Most homemade attribution setups have a handful of properties they really need to have to survive a board meeting, and the ones that get missed tend to be the same three or four every time.

The three layers most engines collapse

A working attribution engine is three distinct layers, kept separate. Channel-level spend and click data sits at the bottom (ad servers, DSPs, platform UIs). Account-level engagement sits in the middle (Marketo, 6sense, Bombora). Pipeline reality sits at the top (Salesforce opportunity object, with stage and amount). Most teams collapse these into one ugly join in a Looker dashboard and wonder why the CMO doesn't trust it.

Keep them separate. Reconcile them with primary keys you control: account ID at the company level, contact email hash at the person level. And try not to lean on UTMs as a primary identifier; they tend to drift, get stripped, or get inconsistently applied across teams, and you will spend more time reconciling them than the original setup saved you.

Decide your attribution philosophy before you build

You need to write down two answers, in advance, before any engineer touches the warehouse. What credit rule are we using? First-touch, last-touch, linear, U-shaped, time-decay, or data-driven. There is no right answer, there is only the answer your finance team will accept. What window are we crediting? 90 days for SMB, 180-365 days for enterprise. Pick the window that matches your real sales cycle, not the one that flatters the channel mix.

Documenting these two decisions on day one prevents 80% of the "the dashboard says different things to different people" arguments later.

The reconciliation table does most of the work

People talk about the dashboard as if it is the system. It really isn't. The thing that does the work is a single reconciliation table sitting in your warehouse: for any closed-won opportunity in the last twelve months, what spend, on what channel, in what week contributed to it, and how the credit gets split. Get that one table right and every dashboard downstream becomes a trivial exercise.

Refresh it daily. Version it. When someone questions a number, you should be able to point at a row and explain it.

What I built at ServiceNow

For ServiceNow EMEA, I rebuilt this engine from Marketo down to ad-server, with a single reconciliation table refreshed nightly in PowerBI. ROAS and pipeline doubled inside a year. Same budget, just better visibility into which channels were actually pulling weight versus which ones the dashboard was flattering. The model got rolled out globally a year later, and last I checked it was still running.

The test of trust

Your engine is trustworthy when the CMO can defend a number to the CFO without a slide deck and without ringing the analytics team for a translation. If they need either, you have a dashboard, not an engine.

Working on something similar?

I work with B2B SaaS, FinTech and consumer brands across EMEA on performance marketing strategy, attribution and ABM. Always happy to compare notes, two client spots free this quarter if it goes further.

Get in touch →