Link Reporting: Build a Dashboard Your Whole Team Can Read

When was the last time someone on your team opened the campaign dashboard without you asking them to?
I built three link reporting dashboards before I got one right. The first two were beautiful. Sixteen charts, every channel, filters on everything. Nobody opened them. My own team would ping me on Slack asking which campaign was working, with the dashboard link sitting in the channel description above their heads.
Link reporting is the practice of turning click data from your campaign links into a recurring, readable summary of which campaigns are working. The reporting part is the hard part. Collecting clicks is solved. Getting six people with different jobs to read the same screen and reach the same conclusion is not.
Here’s the thing: dashboards do not fail because the data is wrong. They fail because they are built for the person who built them. This article covers the layout I use now, the label rules that make rows readable, and the weekly cadence that keeps the thing alive.
What Link Reporting Actually Is
Link reporting sits between measurement and decision. Link analytics is the measurement layer that records each click on a short or tagged link, including unique clicks, device, location, and referrer. Link reporting is what you build on top so a human can read it on a Monday morning.
Three things get muddled here, so let me separate them.
- Link analytics is raw. Every click, every timestamp. Nobody reads raw.
- Link reporting is the recurring artefact. A fixed layout, a fixed cadence, a fixed set of questions it answers.
- Attribution reporting assigns credit across multiple touchpoints using a model and a lookback window. Different job. If you need to know how a first touch and a last touch split credit for one sale, that is attribution reporting, not this.
The honest limitation: link reporting tells you what happened at the click. It does not tell you why. A campaign can triple its clicks because the creative got better or because a competitor went dark. Your dashboard will show the same spike either way.
The Two Data Layers Most Teams Confuse
Your link clicks will never match your GA4 sessions, and that is correct behaviour rather than a bug.
This single misunderstanding has destroyed more dashboards than bad design ever has. Someone notices the numbers disagree, decides the data is broken, and stops trusting the whole screen. So it is worth being precise about why.
The two systems measure at different moments in the request:
| Link layer | Session layer | |
|---|---|---|
| Records at | The redirect, before the destination page loads | After the destination page loads and the tag fires |
| Tool | Your link platform | GA4 |
| Owns | Clicks, unique clicks, device, geo, referrer, QR scans | Engagement, key events, revenue |
| Misses | What the visitor did after landing | Anyone who bounced before the tag fired, or refused consent |
| Typical direction | Higher | Lower |
A click is recorded the instant someone hits the short link. A session is recorded only if the page loads, the tag fires, and consent allows it. Everything that happens in between is loss: slow connections, closed tabs, blocked scripts, denied consent banners.
So the link layer reads higher. On our own campaign links the gap usually sits between 10% and 30%, and it widens on mobile and on paid social where in-app browsers behave badly. I do not try to close that gap. I put both numbers on the dashboard, label them clearly, and write one line explaining why they differ. Trust goes up when you show the gap instead of hiding it.

The honest limitation: this framing assumes both systems are configured correctly. If your utm_campaign values are inconsistent, you have a naming problem, not a measurement-layer problem, and no amount of explaining will fix it.
Who Actually Reads Your Link Reporting Dashboard
Nobody reads a dashboard built for three audiences at once. Improvado’s 2026 dashboard design guide puts it bluntly: 61% of users ignore features meant for other roles. Every metric you add for the founder is noise for the channel owner.
TapClicks found the same pattern from the agency side. Agencies routinely ship 40-plus metrics per client, and clients engage with only a handful. The extra 35 are not neutral. They are the reason the first handful never gets read.
My team has three readers, and they want three different things:
- The founder. One number and a direction. They have nine seconds and they are on a phone. If they have to scroll, you have lost them.
- The channel owner. Their channel only, compared to last week. They do not care about email if they run paid social. They want to know if the thing they shipped on Tuesday worked.
- The client or stakeholder. Outcomes and what changed. They want to know what you did with their money and what you are doing next.
I stopped trying to serve all three on one screen. Now the dashboard has one shared top block and separate views below it. Same data, three doors into it.
The honest limitation: three views mean three things to maintain. If you are a team of one, build the founder view only and filter manually when someone asks. Maintaining views nobody reads is the same failure in a new costume.
The Four-Block Link Reporting Layout
Cap the dashboard at 12 metrics and arrange them in four blocks. Improvado’s analysis found dashboards exceeding 12 KPIs show 40% lower engagement, and that matches what I saw when I cut my sixteen-chart monster down.
Here is the layout, top to bottom.
Block 1: The one number. A single north-star metric, which is the number that moves when your team does good work. For us it is qualified clicks, meaning clicks that reached the landing page and triggered any engagement event. Show it big, with the change versus last period next to it. Nothing else in this block.
Block 2: The channel table. One row per channel. Four columns, no more: clicks, sessions, key events, and change versus last period. Sort by change, not by volume. Volume sorting shows you the same winner every week and teaches people there is nothing new to see.
Block 3: Top five and bottom five links. Not all links. Five winners and five losers, by the same sort. The bottom five is the half people skip, and it is where the money is. Broken links, wrong destinations, and dead creative all surface here first.
Block 4: What changed and what we are doing. Plain text, written by a human, three bullets maximum. This is the block that converts a dashboard into a decision. What moved, why we think it moved, what we are changing this week.

Block 4 is the one everyone skips, and it is the only block that guarantees the dashboard gets read. A screen full of numbers asks the reader to do work. A sentence saying “Instagram stories dropped 40% because we paused the budget on Thursday” does the work for them.
The honest limitation: block 4 is manual. It takes me about ten minutes a week and it does not scale past a handful of channels. I have not found a way to automate it that produces anything worth reading.
Make the Labels Readable
Readable labels matter more than chart choice, and almost nobody treats it as a design decision.
Look at a typical row in an untreated link report:
fb_ig_story_q3_v2_FINAL | 1,284 | 903 | 41
Now the same row, treated:
Instagram Stories (Q3 relaunch) | 1,284 | 903 | 41
Same data. The first version makes every reader do translation work, and they will do it wrong. The second version means a founder can read the dashboard without asking anyone what v2_FINAL was.
The trick is to separate storage from display. Your UTM naming conventions should stay machine-friendly: lowercase, no spaces, consistent. GA4 is case sensitive, so Facebook and facebook become two rows and split your data. But the dashboard should not show raw parameter values to humans. Map them once to display names and let the mapping do the work.
Three rules I follow:
- One campaign, one
utm_campaignvalue. If a campaign runs across four channels, the campaign value stays identical and only the source and medium change. Otherwise your channel table becomes a campaign table and the comparison breaks. - Never put dates in the campaign name.
spring_sale_marchandspring_sale_aprillook like two campaigns to a dashboard. Use one value and let the date range do the filtering. - Build the display mapping before the campaign launches. Retrofitting labels across historical data is miserable, and I have never once finished the job.
The honest limitation: a display mapping is another thing to maintain, and it drifts. When someone launches a campaign with a new source value and forgets to add the label, that row shows up raw and ugly. I check for unmapped values once a month.
The Weekly Cadence That Keeps It Alive
Weekly beats real-time for almost every marketing team. Improvado’s guide notes real-time dashboards cost roughly 4x more to maintain while benefiting around 8% of use cases, and campaign decisions rarely need sub-hour data.

A dashboard without a ritual is a bookmark nobody clicks. Here is the cadence that worked for us:
- Monday 9am, automated refresh. Data lands before anyone opens anything. If the refresh fails, I want to know before the team does.
- Monday 10am, I write block 4. Ten minutes. Three bullets. What moved, why, what we are changing.
- Monday 10:15am, one Slack message. Not a link to the dashboard. The actual three bullets pasted into the channel, with the link underneath. People read the message and click through only when something surprises them. That is fine. The message is the product.
- Thursday, channel owners check their own view. Mid-week is early enough to change something before the week ends.
- Month end, the unmapped-label check. Five minutes. Catch the drift before it compounds.
The message-first part is the bit I got wrong for two years. I kept optimising the dashboard and wondering why traffic to it stayed flat. People do not want to visit a dashboard. They want the answer delivered, with the dashboard available if they doubt it.
Once the dashboard is being read, the next question is what to change, and that is a different skill. I wrote separately about how to turn campaign data into decisions with specific signal and fix pairs.
The honest limitation: this cadence assumes someone owns it. If link reporting is nobody’s explicit job, it decays in about three weeks. I have watched it happen twice.
Where to Build It: GA4, Link Analytics, or Looker Studio
Pick the surface based on who reads it, not on which tool you like.
| GA4 | Link analytics | Looker Studio | |
|---|---|---|---|
| Best for | Post-click behaviour, conversions, revenue | Click-level detail, QR scans, real-time checks | A shared, branded, read-only view |
| Setup effort | Medium | Low | High |
| Readable by non-analysts | Poor | Good | Good, if you design it |
| Shows pre-landing clicks | No | Yes | Only if you feed it link data |
| Custom layout | Limited | Limited | Full control |
| Biggest weakness | Intimidating UI, consent gaps | No post-click outcomes | Someone has to maintain it |
Most teams need two of the three. I use link analytics for the click layer and daily checks, then GA4 for outcomes. If you need the GA4 side set up, I covered how to build a UTM campaign report in GA4 without a data analyst, so I will not repeat the clicks here.
Looker Studio earns its place when you have external readers. Clients and executives want a branded page they cannot break, and Looker gives you that. It also gives you a maintenance job forever.
One case that comes up often: clients who will not grant GA4 access. That is solvable with the link layer alone, and I wrote up how to report to clients without GA4 access separately. You lose conversion data and you should say so out loud in the report.
If you want the click layer without building anything, the link analytics dashboard in linkutm covers blocks 1 through 3 out of the box. Block 4 is still yours to write. I have not found a way around that, and I am not convinced there should be one.
The honest limitation: all three options depend on clean tagging upstream. A perfect dashboard on messy UTM data is a fast route to a confident wrong decision.

Frequently Asked Questions
What is link reporting?
Link reporting is the practice of turning click data from your campaign links into a recurring, readable summary of which campaigns are working. It sits between link analytics, which is the raw measurement of every click, and the decision about what to change. A link report has a fixed layout, a fixed cadence, and a fixed set of questions it answers.
Why don’t my link clicks match my GA4 sessions?
Because the two systems measure at different moments. A click is recorded at the redirect, before the destination page loads. A session is recorded only after the page loads and the GA4 tag fires. Everything lost in between, including slow connections, closed tabs, blocked scripts, and denied consent, shows up as a gap. Link clicks reading 10% to 30% higher than sessions is normal, not broken.
How many metrics should a link reporting dashboard have?
Twelve or fewer. Improvado’s 2026 dashboard design analysis found dashboards exceeding 12 KPIs show 40% lower engagement. In practice I use one north-star number, a four-column channel table, two five-row link lists, and a written summary. Every metric past that point makes the first twelve less likely to be read.
How often should I update link reporting?
Weekly for almost every team. Real-time dashboards cost around 4x more to maintain and benefit roughly 8% of use cases, and campaign budget decisions rarely need hourly data. Set an automated Monday morning refresh, write the summary yourself, and push it to the team rather than waiting for them to visit.
Is link reporting the same as attribution reporting?
No. Link reporting shows what happened at the click and immediately after, organised for a recurring read. Attribution reporting assigns credit for a conversion across multiple touchpoints using a model and a lookback window. Link reporting answers “which campaigns got clicks and what happened next”. Attribution reporting answers “which touchpoint deserves the credit for this sale”.
Can I do link reporting without GA4?
Yes, with a real trade-off. The link layer gives you clicks, unique clicks, device, location, referrer, and QR scans without any GA4 involvement, which is why it works for clients who will not grant analytics access. What you lose is post-click outcomes, so you cannot report conversions or revenue. Say that limitation out loud in the report rather than letting the reader assume clicks mean sales.
Start With One Block
Good link reporting is not a tooling problem. It is a design and habit problem wearing a tooling costume.
If your current dashboard is not being read, do not rebuild it. Try this instead:
- Cut to 12 metrics or fewer this week.
- Add block 4, the written summary, even if you add nothing else.
- Paste those three bullets into Slack on Monday instead of sharing the link.
- Map your ugliest five parameter values to readable display names.
That is a two-hour job and it will do more than another chart ever will. The dashboard is not the deliverable. The decision is.
Ready to get the click layer sorted first? Start tagging campaigns properly with the free UTM builder at linkutm, then build your reporting on top of data you can trust.