One Dashboard for Twenty Client Sites: How Agencies Consolidate Reporting
GuidesJune 22, 202613 min read

One Dashboard for Twenty Client Sites: How Agencies Consolidate Reporting

Agencies juggle GA4, uptime, and errors across clients. Consolidate all in one workspace.

It's 9:47am on Monday. I've got six client Slack channels pinging about "analytics numbers," three uptime alerts from three different Pingdom accounts, and a Sentry inbox with errors grouped by... client email domain? Something broke in the weekend deploy at the pet supplies store, but I'm clicking through four separate dashboards before I even know which client.

This was my reality running a twelve-person web agency. Seventeen active clients. Seventeen GA4 properties. Twelve uptime monitors (some clients shared, which caused its own problems). A Sentry organization with 23 projects whose naming convention had drifted past recognition — I genuinely couldn't tell you what "prod-legacy-v2-DONTUSE" was supposed to be. Two hours every Monday morning just assembling context. Embarrassing.

So we rebuilt the stack. One workspace. One sidebar with all seventeen clients. One set of credentials. One bill.

Here's how it works — and how to set it up without fabricating reports or losing per-client data isolation.

What We're Building

By the end of this guide, you'll have:

  • A multi-site workspace where each client is a separate "site" with isolated data
  • A single dashboard that shows all clients in one sidebar, click-to-filter
  • Per-client shareable links for client reporting (no logins for them, no exports for you)
  • Unified uptime monitoring — one alert channel for all clients, routed intelligently
  • Error tracking with per-client context (so you know instantly which project broke)
  • Session replay available for any client who needs it, without adding another tool

The approach works whether you're managing 3 clients or 30. The mental model is: one script per client site, all data flows into your workspace, you slice by site ID.

Core Concepts: Agency Analytics Sites, Workspaces, and Isolation

Before getting tactical, let's clarify the data model. This confused me at first because I was thinking in GA4 terms (properties, accounts, views) rather than the simpler version. If you're coming from traditional analytics setups, our GA4 migration guide covers the mental model shift in more detail.

Workspace: Your agency's container. One workspace = one login. You're the admin. All billing flows here.

Site: A client's property within your workspace. Each site gets a unique site ID. Data is isolated — Client A's pageviews never appear in Client B's reports, even though both live in your workspace.

Team Members: You can invite account managers with access to specific sites only. Sarah manages the pet supplies and furniture clients? She sees those two sites, nothing else. No risk of accidentally sending the wrong client's data in a report.

Shareable Dashboards: Per-site public links (with optional password protection) that clients can bookmark. They see their data. Only their data. Updated in real-time. You skip the PDF export ritual.

This is different from the GA4 model where you'd create separate properties, potentially separate accounts, manage access per-property, and inevitably end up with someone's personal Gmail as the owner of a client's analytics (don't pretend you haven't seen this).

Step 1: Create Your Agency Analytics Workspace

Sign up at JustAnalytics. Free tier gives you 1 site and 100K events/month — enough to test the workflow before committing. Pro at $49/month ($39 annual) covers 5 sites and 1M events total.

For an agency with 10-20 clients, you'll likely need Enterprise (custom pricing based on total event volume across all sites). But start with Pro — you can migrate up without losing data. Honestly? I waited too long to move off the free tier because I kept thinking "let me just test one more client." Don't be me.

Once you're in, your workspace is empty. That's fine. We'll add sites next.

Step 2: Add Each Client as a Separate Site

For each client, click "Add Site" in your dashboard. Name it something you'll recognize in six months — I use {client-name}-{primary-domain} like "petmart-petmart.com" or "luxfurniture-lux-home.co".

You'll get a site ID and a script snippet:

<script
  defer
  data-site-id="site_abc123xyz"
  src="https://cdn.justanalytics.app/js/tracker.js"
></script>

Drop this into the client's site — either directly in their <head> or via Google Tag Manager. The script is under 5KB, so it won't tank their Core Web Vitals.

One script covers:

  • Analytics — pageviews, events, traffic sources, UTM tracking
  • Error tracking — JavaScript exceptions with source-mapped stack traces
  • Session replay — DOM recording with privacy masking (enable per-site)
  • Uptime monitoring — HTTP checks and SSL cert expiry (configure in dashboard)

No separate Sentry project. No separate Pingdom account. One script, one site ID, all data flows to your workspace.

Repeat for each client. I added all seventeen in about an hour, including the time to push code changes through their various deployment pipelines.

Step 3: Configure Uptime Monitors Per Client

For each client site, you probably want basic uptime monitoring. In the site settings, add an HTTP monitor:

  • URL: Their homepage or a critical endpoint
  • Check interval: 1 minute for high-value clients, 5 minutes for smaller sites
  • Alert threshold: Alert after 2 consecutive failures (avoids noise from one-off timeouts)
  • SSL monitoring: Auto-enabled, alerts 14 days before cert expiry

All alerts route to your workspace notification settings — Slack channel, email, PagerDuty, whatever. But here's the key: the alert includes the site name. So your Slack message says "petmart-petmart.com DOWN" not just "site_abc123xyz DOWN."

This replaced our four separate Pingdom accounts (yes, four — different team members had signed up over the years, nobody had documented which was which, and our finance person was losing her mind tracking the invoices) with one unified view. When something goes down at 2am, I don't need to remember which Pingdom login corresponds to which client.

For agencies also tracking ad spend protection, ClickzProtect solves a similar consolidation problem — one dashboard for click fraud across multiple ad accounts instead of checking each platform individually.

Step 4: Enable Session Replay for Clients Who Need It

Not every client needs session replay. The local restaurant? Probably not. The e-commerce client whose checkout flow "just feels broken"? Absolutely.

Session replay is a per-site toggle. Enable it in site settings, set a sample rate (10% is usually plenty for debugging, 100% if you're actively investigating an issue), and choose privacy masking level.

For most agency clients, mask-inputs is right — users' form submissions are asterisked in replays, but you can still see where they click and scroll. E-commerce clients might want mask-all-text for extra compliance margin, especially if they're in regulated industries.

The power here: when a client emails "users can't complete checkout," you filter replays by:

page:"/checkout/*" AND has:rage_click

Watch three replays. See the frustrated clicking. Identify the broken button. Fix it. No back-and-forth about "what browser are they using?"

We wrote more about session replay for debugging flows in our SaaS onboarding guide. The technique is the same for e-commerce clients — filter by funnel step, watch the stuck users.

Step 5: Set Up Per-Client Shareable Dashboards

This is the part that saved me Monday mornings.

For each client, go to their site's dashboard settings and enable "Shareable Dashboard." You'll get a unique URL like:

https://dash.justanalytics.app/share/s_xyz789...

That link shows real-time analytics for that client only. Pageviews, top pages, traffic sources, uptime status, error count. Clients bookmark it, check it whenever they want. No login required (or add a password if they prefer).

What this means in practice: instead of exporting a PDF every Monday, sending it via email, waiting for the inevitable "can you re-export with last week's data too?", clients just... check their dashboard.

Some agencies resist this — "but then clients can see data whenever they want!" Yes. That's the point. The clients who obsess over numbers will obsess either way. At least this way they're not emailing you for every refresh.

For clients who want a weekly summary email, the digest feature sends automated reports every Monday at 9am. But honestly? Most of my clients preferred the live link.

The Economics: One Bill Instead of Many

Before consolidation, our agency was paying:

  • GA4: Free, but the hidden cost was configuration time and access management
  • Sentry: $26/month (Team plan, constant "upgrade for more events" warnings)
  • Pingdom: $15/month across our accounts (some legacy, some team, nobody knew)
  • LogRocket: $99/month for the one client who demanded session replay
  • Random uptime tools: Another $20/month in scattered subscriptions

Total: ~$160/month, plus 3-4 hours/month managing credentials and access.

After: JustAnalytics Pro at $49/month covers our first 5 clients. We're on Enterprise now for all 17, and the total is lower than what we were paying before — while covering more functionality per client.

The hidden win isn't the dollar amount. It's one login. One mental model. One place to check when something breaks. When you're debugging a client issue at 11pm, the cognitive load reduction is worth more than the invoice savings.

For agencies also managing multiple email domains per client, JustEmails applies similar consolidation logic to transactional email — one dashboard showing deliverability across all your client domains instead of checking each sender reputation separately.

Common Mistakes When Agencies Consolidate

Mistake 1: Putting all clients in one "site"

Don't do this. Each client needs their own site ID. If you put everyone in one site, you can't filter reports per client, can't share per-client dashboards, can't give team members access to specific clients only. The whole point of multi-site workspaces is per-client isolation.

Mistake 2: Forgetting to update site names

When you add a site called "Client 1" because you're testing, then forget to rename it, six months later nobody knows which site that is. Use {client-name}-{domain} from day one.

Mistake 3: Not enabling session replay until after the problem

Session replay only captures sessions after you enable it. If a client reports a bug on Friday, and you enable replay Monday, you can't see Friday's sessions. For clients with complex flows (checkout, onboarding, multi-step forms), enable replay from the start with a low sample rate. The storage cost is negligible, and you'll be grateful when debugging. See our complete session replay setup guide for sampling rate recommendations.

Mistake 4: Using personal email for workspace owner

Use an agency-wide email (ops@youragency.com) as the workspace owner. When team members leave, when you sell the agency, when you need to recover access — you'll thank yourself. This sounds obvious, but I've seen it wrong more often than right. I inherited an agency once where the analytics were owned by a guy who left in 2019. We never got that data back.

Mistake 5: Not setting up alert routing per client priority

All clients in one Slack channel means every alert has equal urgency. Set up alert routing: enterprise clients go to #alerts-critical, smaller clients go to #alerts-general. When the $200K/year e-commerce client goes down, you want that surfaced differently than the $500/month brochure site. For agencies also managing client call tracking, VeloCalls offers similar multi-account consolidation for phone leads.

Advanced: White-Label-ish Exports

I say "white-label-ish" because JustAnalytics doesn't offer full white-label (your logo, your domain) on the shared dashboards. But for most agency use cases, you don't need that.

What you can do:

  • Set a custom header title per shared dashboard ("Analytics for PetMart")
  • Add a custom footer link back to your agency site
  • Customize the dashboard color scheme per site
  • Use a custom subdomain on Enterprise (dash.youragency.com instead of dash.justanalytics.app)

For clients who demand pixel-perfect branded reports, you can export data via API and build your own dashboards. But in five years of agency work, I've had exactly two clients ask for this, and both were satisfied with the custom header approach. (The clients who obsess over branding are rarely the same clients who actually look at analytics. Funny how that works.)

What This Won't Fix

Honesty moment: consolidation doesn't fix bad client communication.

If a client wants a weekly call to "discuss the numbers," they'll still want that call. The dashboard just means you both start from the same data. If a client blames every traffic dip on "your website changes," they'll still do that. At least now you have the data to show correlation (or lack thereof).

What consolidation does fix:

  • The Monday morning context-switching tax
  • The "which Pingdom login is this?" problem
  • The "I think the error tracker data is in someone's old email?" disaster
  • The per-tool billing chaos

It won't fix unreasonable clients. Nothing fixes unreasonable clients. But it gives you better data to work with when managing expectations — and sometimes that's the difference between "I feel like traffic is down" and "here's the actual graph, traffic is up 12%."

For agencies building client sites with modern frameworks, DevOS handles the dev environment consolidation side — one CLI for standardized tooling across all client projects, same way JustAnalytics handles observability consolidation.

What to Do This Week

  1. Audit your current stack — How many GA4 properties? How many uptime tools? How many Sentry projects? Write it down. The number is usually worse than you think.

  2. Identify your highest-maintenance client — The one who asks about numbers most often. Set them up first as a proof of concept.

  3. Add that client to JustAnalytics — Free tier is fine for testing. Get the script deployed, verify data flows.

  4. Share the dashboard link with them — Watch their reaction. If they start checking it themselves instead of emailing you, you've validated the model.

  5. Plan the full migration — Budget two hours per client for script deployment plus uptime configuration. Most clients take 15 minutes; some have weird CMS situations that take longer.

By the end of a two-week sprint, you can have all clients consolidated. The Monday morning context-switching ends. The "which tool is this alert from?" confusion ends. You just... look at one dashboard.

That's the pitch, anyway. Seventeen clients later, I haven't looked back.

Frequently Asked Questions

Can agencies see all client sites in one dashboard without mixing data?

Yes. JustAnalytics uses multi-site workspaces where each client gets their own site ID and isolated data store. You see all 20 sites in one sidebar, but clicking into a client shows only their traffic, errors, and uptime. No data bleed between clients, and you can grant client-specific access without exposing other accounts.

How do agencies handle client-specific reporting without manual exports?

Set up shareable dashboard links per client. Each link shows only that client's site data — traffic, errors, uptime — with your agency branding in the header. Clients bookmark the link, check it whenever they want, and you skip the Monday-morning PDF ritual. Automated weekly email digests are optional.

What happens when an agency onboards a new client site?

Add a new site in your workspace, grab the site ID, drop the under-5KB script into their codebase or tag manager. Data flows within minutes. No new vendor login, no separate uptime tool, no additional Sentry project. One script covers analytics, errors, replay, and uptime for that client.

Is agency pricing per-site or per-workspace?

Per-workspace. The Pro plan at $49/month ($39 annual) covers up to 5 sites and 1M events/month total across those sites. For agencies with 10-20 clients, Enterprise pricing is custom but structured around total event volume, not per-site fees. One bill, predictable cost.


Try JustAnalytics

All-in-one observability in one under-5KB script: cookieless analytics + error tracking + APM + session replay + uptime + structured logs. Replaces GA4 + Sentry + Datadog + Pingdom + LogRocket. Free tier (100K events/mo), Pro $49/month ($39 annual).

Start free → · AI Command Center MCP

JP
JustAnalytics Platform TeamContributor

Author at JustAnalytics.

Related posts