45 min readDeterministic automation

Implementation Guide: Auto-compile and distribute monthly client performance dashboards

Step-by-step implementation guide for deploying AI to auto-compile and distribute monthly client performance dashboards for Marketing & Creative Agencies clients.

Hardware Procurement

Optional: Agency KPI Wallboard Display

Agency KPI Wallboard Display

SamsungBE50T-H (BET-H Series 50" Business Display)Qty: 1

$450–$600 per unit (MSP cost) / $800–$1,200 suggested resale installed

Optional wall-mounted display for the agency's office showing a real-time rotating dashboard of aggregate client KPIs, team utilization, and campaign performance. Not required for the core dashboard automation workflow — this is a value-add upsell. Connects to any Chromebox or Fire TV Stick running the dashboard URL in kiosk mode.

Optional: Kiosk Display Driver

ASUSASUS Chromebox 5 (CN65) CeleronQty: 1

$250–$350 per unit (MSP cost) / $400–$550 suggested resale

Small-form-factor device to drive the optional wallboard display. Runs ChromeOS in kiosk mode pointed at the agency's aggregate AgencyAnalytics or Looker Studio dashboard URL. Mounts behind the display via VESA bracket.

Software Procurement

AgencyAnalytics — Agency Plan

AgencyAnalyticsAgency PlanQty: Up to 10 client campaigns

$159/month for up to 10 client campaigns; ~$16/client/month at scale. Resell at $25–50/client/month for 60–70% margin.

Primary reporting and dashboard platform. Provides 80+ native integrations (Google Ads, Meta Ads, GA4, Search Console, Semrush, Ahrefs, Mailchimp, CallRail, Shopify, HubSpot, etc.), automated scheduled report delivery via email, white-label branding, custom client login portals, and PDF export. This is the core engine that pulls data, renders dashboards, and distributes reports.

Make.com — Pro Plan

Make (formerly Integromat)SaaS — usage-based (operations per month)Qty: 10,000 operations/month

$9/month (Basic, 10,000 operations) to $16/month (Pro, 10,000 operations with priority execution). Resell bundled into managed service package.

Workflow automation platform for ancillary automation beyond what AgencyAnalytics handles natively: (1) Post-delivery Slack/Teams notifications to agency account managers, (2) Automatic PDF archival to Google Drive or SharePoint, (3) CRM record updates in HubSpot/Pipedrive when reports are sent, (4) Escalation alerts if data source connections fail. More cost-effective than Zapier for multi-step, high-volume workflows.

$29.99/month for 750 tasks. Use if client already has Zapier subscription.

Alternative to Make.com for workflow orchestration. Recommended only if the agency already uses Zapier for other automations and wants to consolidate. Otherwise, Make.com is more cost-effective.

SendGrid — Essentials Plan

Twilio SendGridEssentials Plan

$19.95/month for 50,000 emails. Resell bundled.

Dedicated email relay for white-label report delivery. While AgencyAnalytics has built-in email delivery, routing through a dedicated SMTP service with the agency's custom domain ensures maximum deliverability, proper SPF/DKIM/DMARC alignment, and professional sender reputation. Critical for agencies sending reports to enterprise clients with strict email filters.

Google Workspace Business Starter (or existing Microsoft 365)

Google / MicrosoftBusiness Starter / Microsoft 365Qty: per-seat

$7.20/user/month (Google Workspace) or included in existing M365 subscription

Required for: (1) OAuth authentication to Google Ads, GA4, and Search Console APIs, (2) Google Drive storage for archived PDF reports, (3) Custom email domain for white-label report sending. Most agencies already have this — verify and leverage existing subscription.

$29–$99/month depending on connectors needed. Only needed for hybrid/Looker Studio approach.

Optional data connector if using Google Looker Studio instead of AgencyAnalytics. Pulls marketing data from 100+ sources into Google Sheets or Looker Studio on a schedule. Not needed if using AgencyAnalytics as primary platform (it has native connectors).

UptimeRobot — Pro Plan

UptimeRobotPro PlanQty: 50 monitors

Free tier (50 monitors, 5-min checks) or $7/month Pro (50 monitors, 1-min checks)

Monitors the health of dashboard URLs and client portal availability. Alerts MSP if AgencyAnalytics or any integration endpoint goes down. Essential for SLA compliance on managed service contracts.

Prerequisites

  • Agency must have active paid subscriptions to the advertising and analytics platforms they use (Google Ads, Meta Ads, GA4, etc.) — the MSP cannot provide these; they are the agency's own accounts.
  • Admin-level access to a Google Ads MCC (My Client Center) account with all client ad accounts linked under a single MCC umbrella.
  • Admin or Advertiser-level access to a Meta Business Manager account with all client ad accounts accessible.
  • At minimum Viewer-level access to each client's Google Analytics 4 properties. Ideally, access is granted to a shared service account email (e.g., dashboards@agencyname.com).
  • Google Search Console property access (verified owner or full user) for all SEO client domains.
  • API keys or OAuth credentials for SEO tools the agency subscribes to (Semrush API key from Business plan, Ahrefs API token, or Moz API credentials).
  • API keys or OAuth access for email marketing platforms used per client (Mailchimp, ActiveCampaign, Klaviyo, Constant Contact).
  • API credentials for CRM if reporting on sales/lead data (HubSpot Private App token or OAuth, Pipedrive API token).
  • A registered custom domain for the agency's white-label client portal (e.g., reports.agencyname.com) with DNS management access to create CNAME records.
  • A dedicated email address for report sending (e.g., reports@agencyname.com) with DNS access to configure SPF, DKIM, and DMARC records for deliverability.
  • A shared document (spreadsheet) listing every client, the platforms they use, their account IDs, and the designated report recipients with email addresses.
  • Agency stakeholder availability for a 2-hour discovery workshop to define KPIs, report templates, branding guidelines, and distribution schedules.
  • Business-class internet connectivity (25+ Mbps) at the agency office — standard for any modern office, no special requirements.
  • Modern web browser (Chrome 120+, Edge 120+, or Firefox 120+) on admin workstations for platform configuration.

Installation Steps

...

Step 1: Discovery Workshop and Data Source Audit

Conduct a structured discovery session with the agency's leadership and account management team. The goal is to document every client, the platforms used per client, the KPIs that matter for each service type (PPC, SEO, social, email, e-commerce), the desired report format, branding requirements, and distribution schedules. Use the provided audit template spreadsheet to capture all information systematically. This step prevents scope creep and ensures accurate quoting.

Note

Use the Client Data Source Audit Template (provided in custom_ai_components section). Schedule 2 hours. Attendees should include: agency owner/director, lead account manager, and anyone currently responsible for manual reporting. Ask to see examples of their current manual reports — this reveals which KPIs they actually care about vs. what platforms can provide.

Step 2: Provision AgencyAnalytics Account and Configure White-Label Branding

Sign up for the AgencyAnalytics Agency plan ($159/month for 10 client campaigns). Immediately configure the white-label settings: upload the agency's logo, set brand colors (hex codes from their brand guide), configure the custom report header/footer, and set the default report timezone. Then configure the custom domain for the client portal by creating a CNAME DNS record pointing their chosen subdomain to AgencyAnalytics' portal domain.

DNS CNAME record setup and propagation verification
bash
# DNS CNAME Record Configuration (at agency's DNS provider)
# Type: CNAME
# Name: reports (or dashboard, portal, etc.)
# Value: custom.agencyanalytics.com
# TTL: 3600

# Verify DNS propagation
nslookup reports.agencyname.com
# or
dig reports.agencyname.com CNAME
Note

DNS propagation can take up to 24–48 hours but typically completes within 1–4 hours. Configure the CNAME early in the process. AgencyAnalytics automatically provisions an SSL certificate for the custom domain once the CNAME is verified. White-label branding is available on the Agency plan and above — the Freelancer plan does NOT support full white-labeling.

Step 3: Configure Email Deliverability for White-Label Report Sending

Set up the agency's custom email domain for sending automated reports. This involves configuring SPF, DKIM, and DMARC records in the agency's DNS to authorize AgencyAnalytics (and optionally SendGrid) to send emails on behalf of the agency's domain. Without this, automated report emails will land in spam folders. If using SendGrid as a relay, configure the SendGrid domain authentication first, then point AgencyAnalytics to use SendGrid SMTP.

DNS records for SPF, DKIM, and DMARC configuration, plus verification commands
shell
# SPF Record — Add AgencyAnalytics and SendGrid to existing SPF
# Type: TXT
# Name: @ (root domain)
# Value: v=spf1 include:_spf.agencyanalytics.com include:sendgrid.net ~all

# DKIM Record — AgencyAnalytics will provide the specific DKIM selector and value
# Type: CNAME
# Name: aa1._domainkey (example — get exact value from AgencyAnalytics settings)
# Value: aa1._domainkey.agencyanalytics.com

# DMARC Record (if not already configured)
# Type: TXT
# Name: _dmarc
# Value: v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@agencyname.com; pct=100

# Verify SPF
nslookup -type=txt agencyname.com

# Verify DKIM
nslookup -type=cname aa1._domainkey.agencyname.com

# Test email deliverability (use mail-tester.com)
# Send a test report from AgencyAnalytics to check@mail-tester.com
# Score should be 9/10 or higher
Note

SPF record must not exceed 10 DNS lookups (RFC 7208 limit). If the agency already has a complex SPF record, use an SPF flattening service like AutoSPF. DMARC should start with p=none for monitoring, then tighten to p=quarantine after confirming legitimate emails pass. Always test deliverability with mail-tester.com before going live with client reports.

Step 4: Connect Data Sources — Google Ecosystem (GA4, Google Ads, Search Console)

In AgencyAnalytics, create each client campaign. For each campaign, connect the Google data sources using OAuth 2.0 authentication. Log in with the agency's MCC/admin Google account that has access to all client properties. Connect Google Analytics 4 (select the correct property and data stream), Google Ads (select the correct account from the MCC), and Google Search Console (select the verified property). Verify that data is flowing correctly by comparing the last 7 days of data in AgencyAnalytics against the native platform.

Note

Use a dedicated service account email (e.g., dashboards@agencyname.com) for all OAuth connections rather than a personal employee account — this prevents disconnections when staff leave. For Google Ads, ensure the MCC account has Standard Access or higher to all client accounts. If the agency uses Google Analytics 360, the connection process is identical but data may include BigQuery export fields. GA4 data can take up to 24 hours to fully populate on first connection. Always verify data against the source platform: compare at least 3 metrics (sessions, conversions, revenue) for the last 7 days.

Step 5: Connect Data Sources — Meta (Facebook/Instagram Ads)

For each client campaign in AgencyAnalytics, connect Meta Ads using the agency's Meta Business Manager account. The OAuth flow will request permissions for ads_read and ads_management scopes. Select the correct ad account for each client. Also connect Facebook Pages and Instagram Business profiles if social media reporting is in scope. Verify data accuracy by comparing spend, impressions, and conversions for the last 7 days against Meta Ads Manager.

Note

Meta API tokens expire every 60 days unless you use a System User token from Business Manager (which does not expire). STRONGLY RECOMMENDED: Create a System User in the agency's Business Manager (Settings > Users > System Users), grant it access to all client ad accounts, and use that System User's token for the AgencyAnalytics connection. This prevents the #1 cause of dashboard failures — expired personal user tokens. If using personal OAuth, set a calendar reminder for token refresh every 50 days.

Step 6: Connect Data Sources — SEO, Social, Email, and Additional Platforms

Connect remaining data sources for each client campaign based on the audit spreadsheet from Step 1. Common connections include: Semrush or Ahrefs (for keyword rankings and backlink data), Mailchimp or ActiveCampaign (for email campaign metrics), CallRail or CallTrackingMetrics (for call tracking data), Shopify or WooCommerce (for e-commerce clients), HubSpot or Pipedrive (for CRM/lead data), and social platforms (LinkedIn, Twitter/X, TikTok). Each connection uses either OAuth or API key authentication depending on the platform.

  • Semrush API Key Location: Semrush Dashboard > Management > API > Your API Key — Copy and paste into AgencyAnalytics Semrush integration settings
  • Ahrefs API Token Location: Ahrefs Dashboard > Account Settings > API > Create Token — Set permissions: Read-only, Site Explorer + Keywords Explorer
  • HubSpot Private App Token: HubSpot > Settings > Integrations > Private Apps > Create Private App — Required scopes: crm.objects.contacts.read, crm.objects.deals.read — Copy the generated token into AgencyAnalytics
  • Mailchimp API Key: Mailchimp > Account & Billing > Extras > API keys > Create A Key — Format: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-usXX — The suffix (e.g., us14) indicates the data center
Note

Not all clients will use all platforms. Work from the audit spreadsheet and only connect what each client actually uses. Semrush API access requires a Guru plan ($129.95/month) or higher — the Pro plan does not include API access. Ahrefs API is available on all paid plans but with varying row limits. For platforms not natively supported by AgencyAnalytics, check if a Google Sheets or CSV import bridge is available, or use Make.com to push data into a Google Sheet that AgencyAnalytics can read.

Step 7: Design Dashboard Templates by Service Type

Create 2–4 reusable dashboard templates in AgencyAnalytics based on the agency's service offerings. Each template should be designed once and then cloned for each client of that service type. Typical templates: (1) PPC Campaign Dashboard — Google Ads + Meta Ads metrics (spend, impressions, clicks, CTR, CPC, conversions, ROAS, cost per conversion), (2) SEO Performance Dashboard — organic traffic, keyword rankings, backlinks, page speed, Search Console data, (3) Full-Service Dashboard — combines PPC + SEO + social + email metrics, (4) E-Commerce Dashboard — adds revenue, transactions, AOV, cart abandonment. Use the agency's brand colors, logo, and preferred data visualization styles (charts vs. tables vs. scorecards).

Note

Template design is the most time-intensive step but pays dividends across all clients. Invest 2–3 hours per template. Key design principles: (1) Lead with the KPIs the client's executive team cares about (usually revenue, leads, or ROAS) as large scorecards at the top, (2) Show month-over-month and year-over-year comparisons, (3) Include a summary section with key wins and areas of focus (can be manually edited or auto-populated), (4) Keep dashboards to 1–2 pages for email PDF delivery — too long and clients won't read them. Ask the agency to review and approve templates before rolling out to all clients.

Step 8: Configure Automated Report Schedules

For each client campaign, configure the automated report delivery schedule in AgencyAnalytics. Set the report to generate on a specific day each month (e.g., the 3rd business day of each month to allow platforms to finalize the previous month's data). Configure the recipient list (client contacts from the audit spreadsheet), the email subject line template (e.g., '[Agency Name] — [Client Name] Monthly Performance Report — [Month Year]'), and the email body template with a brief personalized introduction. Enable PDF attachment and optional link to the live dashboard portal.

Note

IMPORTANT: Do NOT schedule reports for the 1st of the month. Google Ads, Meta, and GA4 data can take 24–72 hours to fully reconcile at month-end. Schedule for the 3rd–5th of the month to ensure complete and accurate data. Configure a test delivery to the agency's internal team first (Step 6 QA) before enabling client-facing deliveries. Set the email 'from' address to the white-label domain configured in Step 3. Include both a PDF attachment (for offline reading and archival) AND a link to the live dashboard (for interactive exploration).

Step 9: Build Ancillary Automation Workflows in Make.com

Create supporting automation workflows in Make.com that extend beyond AgencyAnalytics' native capabilities. Build the following scenarios: (1) Report Delivery Notification — When AgencyAnalytics sends a report, trigger a Slack/Teams message to the assigned account manager with client name, report link, and a reminder to follow up within 48 hours. (2) PDF Archive — Automatically save each generated PDF report to a structured Google Drive/SharePoint folder (organized by Client > Year > Month). (3) CRM Update — Log a 'Report Sent' activity in HubSpot or Pipedrive against the client contact record. (4) Data Source Health Check — Daily check that all data source connections are active; alert via Slack/email if any connection is broken.

Make.com Scenario Blueprints: Slack Notification, PDF Archive, and Data Source Health Check
plaintext
# Make.com Scenario 1: Report Delivery Slack Notification
# Trigger: Webhook (AgencyAnalytics webhook on report sent)
# Module 1: HTTP > Parse webhook payload (extract client_name, report_url)
# Module 2: Slack > Send Message to #client-reports channel
# Message template: ":chart_with_upwards_trend: Monthly report sent to *{{client_name}}*. View: {{report_url}}. Please follow up within 48 hours."

# Make.com Scenario 2: PDF Archive to Google Drive
# Trigger: Webhook (same AgencyAnalytics webhook)
# Module 1: HTTP > Download PDF from report_pdf_url
# Module 2: Google Drive > Upload File
# Folder path: /Client Reports/{{client_name}}/{{year}}/{{month}}/
# Filename: {{client_name}}_Performance_Report_{{month}}_{{year}}.pdf

# Make.com Scenario 3: Data Source Health Check
# Trigger: Schedule (Daily at 8:00 AM)
# Module 1: HTTP > GET AgencyAnalytics API /integrations/status
# Module 2: Filter > Check for any status != 'connected'
# Module 3 (conditional): Slack > Send Alert to #msp-alerts
# Message: ":warning: Data source disconnected: {{integration_name}} for {{client_name}}. Reconnect immediately."
Note

AgencyAnalytics supports outbound webhooks on report delivery events — enable this in Settings > Integrations > Webhooks. If webhooks are not available on your plan tier, use Make.com's scheduled HTTP request module to poll the AgencyAnalytics API for recent report deliveries every hour. The Data Source Health Check scenario is CRITICAL for MSP SLA compliance — a disconnected data source means a client receives an incomplete or stale report, which is the #1 cause of client complaints. Test each Make.com scenario individually before activating all of them together.

Step 10: Quality Assurance — Data Accuracy Validation

Before enabling live client delivery, perform a thorough data accuracy validation for every client. For each client, pull the same date range (previous full month) from both AgencyAnalytics AND the native source platform (e.g., Google Ads interface, Meta Ads Manager, GA4 Reports). Compare at least 5 key metrics per platform. Document any discrepancies. Acceptable variance is ≤2% for most metrics (minor rounding and timezone differences are normal). Also test the full email delivery chain: send a test report to an internal test address, verify it arrives (not in spam), verify the PDF renders correctly, verify the live dashboard link works, and verify the white-label branding appears correctly.

Note

Data discrepancies are almost always caused by: (1) Timezone mismatches — ensure AgencyAnalytics campaign timezone matches the source platform's timezone, (2) Attribution model differences — GA4 uses data-driven attribution by default; Google Ads uses last-click; make sure you're comparing apples to apples, (3) Date range off-by-one — some platforms use inclusive dates, others exclusive, (4) Currency conversion — ensure all platforms report in the same currency. Document all findings in the QA spreadsheet. Any variance >5% must be investigated and resolved before go-live.

Step 11: Client Portal Configuration and Access Provisioning

For each client who should have interactive dashboard access (beyond the monthly email report), configure their login on the AgencyAnalytics white-label portal. Create a client user account with their email address, set permissions to view-only for their specific campaign data only (critical: clients must NEVER see other clients' data), and send the welcome email from the white-label portal domain. Optionally configure two-factor authentication for clients with sensitive data. Test each client login to verify data isolation.

Note

Data isolation between clients is a COMPLIANCE REQUIREMENT, not just a nice-to-have. After creating each client login, log in as that client and verify you can ONLY see their data. AgencyAnalytics enforces this at the campaign level — each client user is assigned to specific campaigns. Double-check this configuration for every client. Consider creating a 'Client Onboarding' email template that includes: portal URL, login credentials, a brief video walkthrough (Loom recording), and contact info for support.

Step 12: Go-Live: Enable Automated Delivery and Monitor First Cycle

Enable the automated report schedules for all clients. For the first month, run reports in 'preview' mode — generate the reports but send them only to the agency's internal team for review before forwarding to clients. Once the agency approves the reports (typically after reviewing 2–3 examples), enable direct-to-client delivery. Monitor the first automated delivery cycle closely: verify all emails were sent, check for bounce-backs, confirm PDF attachments are present and render correctly, and verify Make.com ancillary workflows triggered successfully (Slack notifications sent, PDFs archived, CRM updated).

Note

The first month should be treated as a 'soft launch.' Have the agency review every report before it reaches clients. This builds agency confidence in the system and catches any template or data issues. After the first successful month of direct delivery, shift to exception-based monitoring — only review reports that trigger quality alerts. Set up a Make.com scenario that checks for anomalies: if a client's spend drops to $0 or a data source shows no data for the period, flag it for manual review before the report goes out.

Step 13: Training Session and Documentation Handoff

Conduct a 2–3 hour training session with the agency team covering: (1) How to add a new client campaign and connect data sources, (2) How to modify dashboard templates and create new widgets, (3) How to manage report schedules and recipient lists, (4) How to handle common issues (disconnected data source, expired OAuth token, client access request), (5) How to interpret the Make.com automation dashboard for troubleshooting. Provide written documentation (runbook) and a recorded video walkthrough. Establish the MSP's support SLA and escalation process.

Note

Record the training session (with permission) and provide the recording as part of the handoff documentation. The most common post-handoff support request is 'a data source disconnected' — spend extra time training on how to identify and resolve this. Emphasize that the agency should contact the MSP (not try to fix it themselves) if any automation workflow fails, to avoid accidental misconfiguration.

Custom AI Components

Client Data Source Audit Template

Type: workflow A structured spreadsheet template used during the discovery phase (Step 1) to systematically document every client, their platforms, account IDs, KPIs, report recipients, and delivery preferences. This template drives all subsequent configuration steps and prevents missed connections or incorrect setups.

Implementation:

  • Create as a Google Sheet or Excel workbook with the following tabs:

Tab 1: Client Master List

  • Client Name — Legal/brand name (e.g. Acme Corp)
  • Primary Contact — Main report recipient (e.g. Jane Smith)
  • Contact Email — Email for report delivery (e.g. jane@acmecorp.com)
  • CC Emails — Additional recipients, semicolon-separated (e.g. bob@acmecorp.com; cfo@acmecorp.com)
  • Service Type — PPC / SEO / Social / Full-Service / E-Commerce (e.g. Full-Service)
  • Report Template — Which template to use (e.g. Full-Service Dashboard)
  • Delivery Day — Day of month for report (e.g. 5th)
  • Portal Access? — Yes/No — does client get live portal login? (e.g. Yes)
  • Client Timezone — For accurate date ranges (e.g. America/New_York)
  • Notes — Special instructions (e.g. Include YoY comparison; CEO prefers charts over tables)

Tab 2: Data Source Connections (One row per client per platform)

  • Client Name — Link to Tab 1 (e.g. Acme Corp)
  • Platform — Name of platform (e.g. Google Ads)
  • Account ID — Platform-specific account ID (e.g. 123-456-7890)
  • Access Method — OAuth / API Key / MCC (e.g. MCC under agency MCC 111-222-3333)
  • Access Granted To — Email/account with access (e.g. dashboards@agencyname.com)
  • Connection Status — Not Started / Connected / Verified / Failed (e.g. Not Started)
  • Verification Date — Date data was verified accurate
  • Variance Notes — Any discrepancies found during QA

Tab 3: KPI Mapping (One row per service type)

  • Service Type — PPC / SEO / Social / Email / E-Commerce (e.g. PPC)
  • Primary KPIs — Top 3–5 metrics for scorecards (e.g. Conversions, ROAS, Cost Per Conversion, Spend)
  • Secondary KPIs — Supporting metrics for detail sections (e.g. CTR, CPC, Impression Share, Quality Score)
  • Comparison Period — MoM / YoY / Both (e.g. Both)
  • Goal Targets — If applicable, numeric goals (e.g. ROAS > 4.0, CPA < $50)

Tab 4: QA Validation Log (One row per client per platform per metric)

  • Client Name
  • Platform
  • Metric
  • Date Range
  • Source Value — Value from native platform
  • Dashboard Value — Value from AgencyAnalytics
  • Variance % — Calculated: ABS(source-dashboard)/source*100
  • Status — Pass (≤2%) / Investigate (2–5%) / Fail (>5%)
  • Resolution — Notes on how discrepancy was resolved

Monthly Report Pre-Flight Check Automation

Type: workflow A Make.com automation scenario that runs 48 hours before the scheduled report delivery date. It checks all data source connections for each client, verifies data freshness (confirms data exists for the reporting period), flags anomalies (e.g., zero spend, traffic drop >50%), and sends a summary to the agency's account management team. This gives the agency time to investigate issues before reports go to clients.

Implementation:

Make.com Scenario: Monthly Report Pre-Flight Check
plaintext
# Make.com Scenario: Monthly Report Pre-Flight Check
# Trigger: Schedule — runs on the 1st of every month at 9:00 AM (2 days before typical report delivery on the 3rd)

## Scenario Flow:

### Module 1: HTTP Request — Get All Campaigns
# Method: GET
# URL: https://api.agencyanalytics.com/v2/campaigns
# Headers: Authorization: Bearer {{agencyanalytics_api_key}}
# Parse response to get array of campaign objects

### Module 2: Iterator
# Iterate over each campaign in the response array

### Module 3: HTTP Request — Get Integration Status per Campaign
# Method: GET
# URL: https://api.agencyanalytics.com/v2/campaigns/{{campaign_id}}/integrations
# Headers: Authorization: Bearer {{agencyanalytics_api_key}}
# Check each integration's 'status' field

### Module 4: Router (two paths)

#### Path A: Disconnected Data Sources
# Filter: Any integration where status != 'active'
# Action: Add to disconnected_sources array
# Fields: campaign_name, integration_name, last_sync_date, error_message

#### Path B: Data Anomaly Check
# For each active integration, make an API call to check the previous month's data
# Method: GET
# URL: https://api.agencyanalytics.com/v2/campaigns/{{campaign_id}}/{{integration_type}}/summary
# Query params: start_date={{previous_month_start}}&end_date={{previous_month_end}}
# Check for anomalies:
#   - Total spend = 0 (for ad platforms) → FLAG
#   - Sessions = 0 (for GA4) → FLAG
#   - Current month value < 50% of previous month → FLAG as significant drop

### Module 5: Aggregator
# Combine all flags and disconnected sources into a single summary object

### Module 6: Slack Message (or Email)
# Channel: #report-preflight (create this channel in agency's Slack)
# Message format:
# ":clipboard: **Monthly Report Pre-Flight Check — {{month}} {{year}}**
# 
# :white_check_mark: **Healthy Campaigns:** {{healthy_count}} / {{total_count}}
# 
# :warning: **Issues Found:**
# {{#each issues}}
# • **{{campaign_name}}** — {{issue_type}}: {{details}}
# {{/each}}
# 
# :arrow_right: Please resolve issues before reports go out on the {{delivery_date}}.
# Contact MSP support at support@mspname.com if you need help reconnecting data sources."

## Variables to Configure:
# - agencyanalytics_api_key: Store in Make.com Connection settings
# - Slack webhook URL or Slack API connection
# - delivery_date: Set to the agency's standard report delivery day
# - anomaly_thresholds: Customize percentage drops that trigger flags

## Error Handling:
# - If AgencyAnalytics API returns 429 (rate limit), add a 60-second delay and retry
# - If API returns 401 (unauthorized), send urgent alert: API key may have expired
# - If any module fails, send error notification to MSP #msp-alerts Slack channel

New Client Onboarding Automation

Type: workflow A Make.com scenario triggered when the agency adds a new client to their CRM (HubSpot or Pipedrive). It automatically creates a campaign in AgencyAnalytics, sends the MSP a notification to configure data source connections, creates the Google Drive folder structure for report archival, and sends the agency account manager a checklist of information needed (account IDs, credentials, KPIs).

Implementation:

  • Make.com Scenario: New Client Onboarding
  • Trigger: HubSpot — New Deal moved to 'Won/Onboarding' stage
  • Alternative trigger: Pipedrive — Deal moved to 'Won' stage

Module 1: HubSpot Trigger

  • Watch: Deals
  • Filter: deal_stage = 'closedwon' or custom 'onboarding' stage
  • Extract: deal_name, contact_email, contact_name, deal_properties.service_type

Module 2: AgencyAnalytics — Create Campaign

  • Method: POST
  • URL: https://api.agencyanalytics.com/v2/campaigns
  • Store response: campaign_id
AgencyAnalytics Create Campaign — Request Body
json
{
  "name": "{{deal_name}}",
  "url": "{{client_website}}",
  "timezone": "America/New_York",
  "currency": "USD"
}

Module 3: Google Drive — Create Folder Structure

  • Parent folder: /Client Reports/
  • Create: /Client Reports/{{deal_name}}/
  • Create: /Client Reports/{{deal_name}}/2025/
  • Create: /Client Reports/{{deal_name}}/2025/Templates/

Module 4: Slack Notification to MSP

  • Channel: #msp-onboarding

Slack Message — MSP Onboarding Notification

:new: **New Client Dashboard Setup Required** Client: {{deal_name}} Service Type: {{service_type}} Primary Contact: {{contact_name}} ({{contact_email}}) AgencyAnalytics Campaign ID: {{campaign_id}} :arrow_right: Please connect data sources within 5 business days. Checklist: {{onboarding_checklist_url}}
Sonnet 4.6

Module 5: Email to Account Manager

  • To: {{account_manager_email}} (from deal owner in HubSpot)
  • Subject: Action Required: Dashboard Setup for {{deal_name}}

Hi {{account_manager_name}}, We're setting up automated reporting dashboards for {{deal_name}}. Please provide the following within 3 business days: □ Google Ads Account ID (format: XXX-XXX-XXXX) □ Meta/Facebook Ad Account ID (format: act_XXXXXXXXX) □ Google Analytics 4 Property ID (format: XXXXXXXXX) □ Google Search Console verified property URL □ Any other platform credentials (Mailchimp, Semrush, etc.) □ Client report recipients (name + email for each) □ Preferred report delivery day (e.g., 5th of month) □ Any specific KPIs or goals the client has communicated Reply to this email or fill out this form: {{intake_form_url}} Thanks, {{msp_name}} Dashboard Team

Error Handling

  • If AgencyAnalytics campaign creation fails, retry once after 30 seconds
  • If still fails, alert MSP and proceed with remaining modules
  • Log all actions to a Google Sheet for audit trail

Data Source Reconnection Alert and Runbook

Type: integration An automated monitoring integration that checks all AgencyAnalytics data source connections every 6 hours and immediately alerts the MSP and agency when a connection breaks. Includes a self-service reconnection runbook for the most common failure scenarios (expired OAuth token, revoked permissions, API key rotation). Implementation:

Make.com Scenario: Data Source Health Monitor — Modules 1–3 Setup
plaintext
# Make.com Scenario: Data Source Health Monitor
# Trigger: Schedule — Every 6 hours (00:00, 06:00, 12:00, 18:00)

## Module 1: HTTP Request — List All Integrations Across All Campaigns
# Method: GET
# URL: https://api.agencyanalytics.com/v2/integrations
# Headers: Authorization: Bearer {{api_key}}
# Parse: Array of integration objects with fields: id, campaign_id, campaign_name, type, status, last_sync

## Module 2: Array Filter
# Filter condition: status != 'active' OR last_sync older than 48 hours
# Output: Array of unhealthy integrations

## Module 3: Router

Path A: If unhealthy integrations found

  • Module 3A-1: Slack Alert — Channel: #dashboard-alerts
  • Module 3A-2: Email to MSP Support Queue — To: support@mspname.com, Subject: [DASHBOARD ALERT] {{count}} disconnected data sources, Priority: High

Slack Alert Message Template

:rotating_light: **Data Source Alert** The following integrations need attention: {{#each unhealthy_integrations}} • **{{campaign_name}}** → {{type}} — Status: {{status}} — Last sync: {{last_sync}} Reconnection guide: {{reconnection_url_for_type}} {{/each}} Please reconnect within 24 hours to avoid incomplete reports.
Sonnet 4.6

Email body: Same content as Slack message + links to each campaign in AgencyAnalytics admin.

Path B: If all integrations healthy

  • No action (silent success)
  • Optional: Log to Google Sheet for uptime tracking

Reconnection Runbook (provide as PDF/wiki to agency)

Cause: OAuth token expired or Google account password changed

1
Log into AgencyAnalytics as admin
2
Navigate to the affected campaign > Integrations
3
Click the disconnected Google integration
4
Click 'Reconnect' — this will open a Google OAuth flow
5
Log in with dashboards@agencyname.com
6
Grant permissions when prompted
7
Verify data starts syncing (check 'Last Sync' timestamp)
Note

Prevention: Use a service account; enabling 'less secure apps' is NOT needed for OAuth.

Meta/Facebook Ads Disconnection

Cause: Personal user token expired (60-day limit) or user removed from Business Manager

1
Log into AgencyAnalytics > affected campaign > Integrations
2
Click disconnected Meta integration > 'Reconnect'
3
Log in with the agency's Meta Business Manager admin account
4
Re-authorize the ad accounts
Note

Prevention: Use a System User token (does not expire): Meta Business Manager > Settings > Users > System Users → Create system user → Generate token with ads_read scope → Use this token in AgencyAnalytics instead of personal OAuth.

Semrush / Ahrefs API Key Expired

Cause: Agency subscription lapsed or API key was regenerated

1
Verify agency's SEO tool subscription is active
2
Generate a new API key from the SEO tool's settings
3
In AgencyAnalytics, update the API key in the integration settings
Note

Prevention: Set calendar reminder for subscription renewal dates.

General Troubleshooting

1
Check if the source platform itself is experiencing an outage (status pages)
2
Verify the connecting account still has the required permissions
3
Try disconnecting and re-adding the integration from scratch
4
If all else fails, contact AgencyAnalytics support or escalate to MSP

Report Delivery Confirmation and Follow-Up Tracker

Type: workflow Tracks whether automated reports were successfully delivered to each client and whether the agency account manager has followed up. Creates accountability by logging delivery status and follow-up completion in a shared Google Sheet, and sends reminder notifications if follow-up hasn't happened within 48 hours of delivery.

Implementation:

Make.com Scenario: Report Delivery Tracker
plaintext
# Make.com Scenario: Report Delivery Tracker
# Trigger: AgencyAnalytics Webhook — Report Sent event
# (Configure in AgencyAnalytics: Settings > Webhooks > Add > Event: report.sent)

## Module 1: Parse Webhook Payload
# Expected fields: campaign_id, campaign_name, report_id, recipients, sent_at, report_url

## Module 2: Google Sheets — Add Row to Delivery Log
# Spreadsheet: 'Report Delivery Tracker' (shared with agency team)
# Sheet: 'Delivery Log'
# Row data:
# | Date Sent | Client | Report URL | Recipients | Follow-Up Status | Follow-Up Date | Account Manager |
# | {{sent_at}} | {{campaign_name}} | {{report_url}} | {{recipients}} | Pending | | {{lookup_am_from_campaign}} |

## Module 3: Slack — Notify Account Manager
# Direct message to the account manager assigned to this client
# (Map campaign_name to account manager via a lookup table in Google Sheets)
# Message:
# ":incoming_envelope: Report sent to **{{campaign_name}}**
# Recipients: {{recipients}}
# :arrow_right: Please follow up with the client within 48 hours.
# Mark as complete: {{google_sheet_url}}"

## Module 4: Delay — Wait 48 Hours
# Use Make.com's built-in delay/sleep module
# Wait 48 hours from the sent_at timestamp

## Module 5: Google Sheets — Check Follow-Up Status
# Read the row added in Module 2
# Check if 'Follow-Up Status' column = 'Complete'

## Module 6: Router
### Path A: Follow-up NOT complete
# Slack DM to account manager:
# ":alarm_clock: **Reminder:** Follow-up for **{{campaign_name}}** is overdue.
# Report was sent 48+ hours ago. Please reach out to the client and update the tracker."
# Also notify agency manager/director if >72 hours overdue

### Path B: Follow-up complete
# No action needed

## Lookup Table (Google Sheet tab: 'AM Assignments'):
# | Campaign Name | Account Manager | Slack User ID | Email |
# | Acme Corp | Jane Smith | U0123ABC | jane@agency.com |
# | Beta Inc | John Doe | U0456DEF | john@agency.com |

Testing & Validation

  • CONNECTIVITY TEST: For each client campaign, verify every connected data source shows a 'Connected' or 'Active' status in AgencyAnalytics. Navigate to each campaign's Integrations tab and confirm green status indicators and a 'Last Sync' timestamp within the last 24 hours.
  • DATA ACCURACY TEST — GOOGLE ADS: For 3 representative clients, compare the following metrics for the previous full month between the AgencyAnalytics dashboard and the Google Ads interface: Impressions (≤1% variance), Clicks (≤1%), Cost (≤0.5%), Conversions (≤2%), Conversion Value (≤2%). Document results in the QA Validation Log spreadsheet.
  • DATA ACCURACY TEST — META ADS: For 3 representative clients, compare Impressions, Reach, Spend, Link Clicks, and Purchases between AgencyAnalytics and Meta Ads Manager for the previous full month. Verify variance ≤2% for volume metrics and ≤0.5% for spend.
  • DATA ACCURACY TEST — GA4: For 3 representative clients, compare Sessions, Users, New Users, Conversions, and Revenue between AgencyAnalytics and the GA4 Reports interface for the previous full month. Note: minor discrepancies (1-3%) are expected due to data sampling differences; flag anything >5%.
  • TIMEZONE CONSISTENCY TEST: Verify that the timezone configured in each AgencyAnalytics campaign matches the timezone setting in the corresponding source platforms (Google Ads account timezone, GA4 property timezone, Meta ad account timezone). Mismatched timezones are the #1 cause of data discrepancies.
  • EMAIL DELIVERABILITY TEST: Send a test report from AgencyAnalytics to check@mail-tester.com. Verify the score is 9/10 or higher. Also send test reports to Gmail, Outlook/M365, and Yahoo test addresses to verify inbox delivery (not spam/junk). Verify the sender name, email address, subject line, and branding appear correctly.
  • PDF REPORT RENDERING TEST: Download the PDF version of a generated test report. Verify: (1) all charts and visualizations render correctly (no broken images), (2) data tables are properly formatted and not truncated, (3) agency branding (logo, colors, fonts) appears correctly, (4) report fits on the expected number of pages, (5) hyperlinks in the PDF work correctly.
  • WHITE-LABEL PORTAL TEST: Log into the client portal using the custom domain (reports.agencyname.com). Verify: (1) SSL certificate is valid (green lock icon), (2) agency branding appears (no AgencyAnalytics branding visible), (3) login page shows correct agency logo, (4) after login, only the assigned client's data is visible, (5) dashboard widgets load and display data correctly.
  • CLIENT DATA ISOLATION TEST: Create two test client logins. Log in as Client A and verify you CANNOT see Client B's campaigns, dashboards, or data. Log in as Client B and verify the reverse. This is a critical security and compliance requirement — failure means an immediate configuration fix before go-live.
  • MAKE.COM WORKFLOW TEST — SLACK NOTIFICATION: Trigger a test report delivery and verify that the Slack notification arrives in the correct channel within 60 seconds, contains the correct client name and report URL, and mentions the correct account manager.
  • MAKE.COM WORKFLOW TEST — PDF ARCHIVE: Trigger a test report delivery and verify that the PDF file appears in the correct Google Drive folder path (/Client Reports/[ClientName]/[Year]/[Month]/), with the correct filename format, within 5 minutes of delivery.
  • MAKE.COM WORKFLOW TEST — DATA SOURCE HEALTH CHECK: Manually disconnect one data source for a test campaign. Wait for the next health check cycle (or trigger it manually). Verify that a Slack alert is generated within 15 minutes identifying the specific disconnected integration and affected client. Reconnect the data source and verify the next health check shows all clear.
  • SCHEDULED DELIVERY TEST: Configure a report schedule for a test campaign set to deliver 'today' to internal email addresses. Verify the report is generated and delivered within the expected time window. Verify the email subject line uses the correct template variables (agency name, client name, month/year). Verify both the PDF attachment and live dashboard link are included.
  • END-TO-END MONTHLY CYCLE TEST: Simulate a full monthly cycle: (1) Pre-flight check runs and produces a summary with no issues flagged, (2) Reports generate on schedule, (3) Emails deliver to all recipients, (4) Slack notifications fire for each delivery, (5) PDFs archive to Google Drive, (6) Follow-up tracker logs the deliveries, (7) 48-hour reminder fires if follow-up is not marked complete. Run this test for at least 3 clients before enabling live delivery to actual clients.
  • FAILOVER TEST: Temporarily revoke API access for one data source and observe the behavior: (1) Health check alert fires correctly, (2) Report generation still proceeds but the affected widget shows a data unavailable message (not a blank or broken chart), (3) Pre-flight check flags the issue 48 hours before next delivery. This validates the monitoring and alerting pipeline.

Client Handoff

Client Handoff Checklist

Training Session (2-3 hours, recorded)

1
Platform Navigation: Walk through the AgencyAnalytics admin interface — how to view campaigns, check integration status, access report history, and manage user accounts.
2
Adding New Clients: Step-by-step demonstration of creating a new campaign, connecting data sources (OAuth flow walkthrough for Google and Meta), and cloning a dashboard template.
3
Template Modifications: How to add/remove/rearrange widgets, change date ranges, edit text sections, and create new dashboard templates from scratch.
4
Report Scheduling: How to create, modify, and pause report schedules. How to change recipient lists and delivery days.
5
Client Portal Management: How to create/disable client logins, reset passwords, and customize portal settings.
6
Common Troubleshooting: How to identify a disconnected data source, how to reconnect (with live demonstration), and when to escalate to the MSP.
7
Make.com Dashboard: Brief overview of the automation scenarios — how to check execution logs, verify workflows ran successfully, and pause/resume scenarios.

Documentation Package (Delivered as PDF + shared Google Drive folder)

  • Admin Runbook: Step-by-step procedures for all routine tasks (adding clients, reconnecting data sources, modifying templates, managing schedules)
  • Reconnection Runbook: Platform-specific guides for reconnecting Google, Meta, Semrush, Ahrefs, Mailchimp, HubSpot, and other integrations
  • Client Data Source Audit Template: Blank template for onboarding future clients
  • Architecture Diagram: Visual overview of the data flow from source platforms through AgencyAnalytics to client delivery
  • Credential Inventory: Secure document listing all service accounts, API keys, and OAuth connections (stored in agency's password manager, NOT in plaintext)
  • SLA Document: MSP's ongoing support scope, response times, and escalation procedures
  • Make.com Scenario Documentation: Description of each automation scenario, its trigger, actions, and expected behavior
  • Training Recording: Video recording of the training session with chapter markers

Success Criteria Review (Jointly with Agency)

Post-Handoff Support Period

  • 30-day hypercare period: MSP provides priority support and proactive monitoring
  • Weekly 15-minute check-in calls during hypercare to address questions
  • MSP monitors second monthly report cycle closely and resolves any issues
  • After 30 days, transition to standard managed service SLA

Maintenance

Ongoing Maintenance Responsibilities

MSP Monthly Maintenance Tasks (Estimated: 2-4 hours/month for 10-20 clients)

1
Pre-Report Health Check (Monthly, 2 days before report delivery): Review the automated pre-flight check results. Investigate and resolve any flagged issues (disconnected sources, data anomalies). Coordinate with the agency if client-side action is needed (e.g., client changed their GA4 property settings).
2
Post-Report Delivery Verification (Monthly, day of delivery): Confirm all reports were generated and delivered. Check for email bounces or delivery failures. Verify Make.com automation logs show successful execution of all scenarios.
3
Data Source Connection Audit (Monthly): Review the health monitoring dashboard. Reconnect any sources that disconnected during the month. Track recurring disconnection patterns (some platforms are more prone to token expiry).
4
Platform Updates and Changelog Review (Monthly): Review AgencyAnalytics changelog for new features, breaking changes, or deprecated integrations. Review Make.com scenario execution history for errors or performance degradation. Apply any necessary adjustments.

MSP Quarterly Maintenance Tasks

1
Template Review: Meet with the agency to review dashboard templates. Add new KPIs, adjust visualizations, or create new templates for new service offerings. Typical: 1-2 hours per quarter.
2
Integration Ecosystem Review: Check if the agency has adopted new marketing platforms that should be added to dashboards. Verify API rate limits have not changed on source platforms.
3
Security Review: Rotate API keys and review OAuth connections. Verify all admin accounts have 2FA enabled. Review client portal access list — disable accounts for churned clients.
4
Performance Benchmarking: Compare report generation times and data freshness. Optimize if reports are taking too long to generate (e.g., reduce unnecessary widgets, archive old campaigns).

MSP Annual Maintenance Tasks

1
Platform Contract Renewal: Review AgencyAnalytics plan level vs. actual usage. Upgrade/downgrade as appropriate. Negotiate annual commitment discounts.
2
Compliance Audit: Review DPAs, data retention policies, and access controls. Ensure GDPR/CCPA compliance if client base has changed.
3
Disaster Recovery Test: Export all dashboard templates and configurations. Verify that backups can be restored. Document recovery time objective (RTO) for full platform failure.

SLA Recommendations

Escalation Path

1
Level 1 — Agency Self-Service: Consult the runbook for common issues (disconnected data source, add recipient to schedule). Most issues are resolved here.
2
Level 2 — MSP Support: Submit ticket to MSP helpdesk for issues not covered in runbook, template modifications, or new client onboarding.
3
Level 3 — MSP Senior Engineer: Platform-level issues, Make.com workflow failures, DNS/email deliverability problems, security incidents.
4
Level 4 — Vendor Support: AgencyAnalytics support for platform bugs, API issues, or feature requests. Make.com support for scenario execution failures.

Monitoring Tools and Cadence

  • UptimeRobot: Monitors client portal URL and AgencyAnalytics dashboard URLs every 5 minutes. Alerts MSP via email and Slack on downtime.
  • Make.com Execution Logs: Review weekly for failed executions. Set up Make.com's built-in error notifications to email MSP on any scenario failure.
  • Google Workspace / M365 Admin: Monitor email delivery reports monthly to track bounce rates and spam complaints for report delivery emails.
  • AgencyAnalytics Activity Log: Review monthly for unauthorized access or unexpected configuration changes.

Alternatives

Google Looker Studio + Supermetrics (Hybrid Approach)

Use Google Looker Studio (free tier or Pro at $9/user/month) as the dashboard rendering engine, with Supermetrics ($29–$99/month) as the data connector pulling from marketing platforms into Google Sheets or BigQuery. Reports are built as Looker Studio dashboards that auto-refresh. Distribution is handled either via Looker Studio Pro's scheduled email delivery (up to 200/month) or via Make.com/Zapier triggering PDF exports and email sends. The agency gets interactive dashboards shareable via URL, plus automated PDF reports.

Self-Hosted Stack: n8n + Metabase + PostgreSQL

Deploy a fully self-hosted automation and reporting stack. n8n (Community Edition, free) handles all workflow orchestration — API data pulls, scheduling, PDF generation, email sending. Metabase (open-source, free) provides the interactive dashboard and visualization layer. PostgreSQL serves as the data warehouse storing all pulled marketing data. Everything runs on a single Linux VM (2 vCPU, 4 GB RAM, ~$40–80/month on DigitalOcean, Linode, or Hetzner). The MSP owns and controls the entire stack with no third-party SaaS dependency.

Use DashThis as a simpler, more affordable alternative to AgencyAnalytics. DashThis offers pre-built dashboard templates, 34+ native integrations, automated monthly email report delivery, and white-label branding (on Professional plan at $139/month for 10 dashboards). The interface is intentionally simplified — less powerful than AgencyAnalytics but faster to set up and easier for non-technical agency staff to manage independently.

Microsoft Power BI Pro + Dataflows

Use Microsoft Power BI Pro ($14/user/month) as the dashboard platform with Power BI Dataflows for scheduled data refresh from marketing APIs. Leverage Power Automate ($15/user/month) for report scheduling and email distribution. Optionally use Supermetrics for Power BI ($29+/month) for pre-built marketing data connectors. Reports are delivered as paginated Power BI reports via email subscription or as embedded dashboards in a Power BI workspace shared with clients.

Vendasta White-Label Platform

Vendasta provides a complete white-label platform designed for MSPs and agencies to resell marketing services. It includes an executive dashboard that pulls data from multiple marketing channels, automated report generation, a branded client portal, and a full marketplace of white-label marketing products. The MSP or agency operates under their own brand while Vendasta powers the backend.

Want early access to the full toolkit?