5 min read

Reporting, RPM, EPC, LTV forecasting, snapshot included

Build a clear reporting stack that follows a click to a paid account, calculates EPC and RPM, and forecasts LTV from real retention. Use one snapshot, one data model, clean UTMs, and a weekly readout.

TLDR

You install a reporting snapshot in GoHighLevel. You capture UTMs and subids on first hit, you tag trials and verified paid, and you log refunds. You compute EPC, RPM, CAC, payback, and LTV by source, campaign, page, partner, and creator. You review weekly, you scale winners, and you cut waste.


🚀 Get the SaaSPRENEUR Local Hero Playbook!
Launch your white-label SaaS business with a proven system.
Step-by-step setup. Built-in workflows. Real sales strategies.

Access the Local Hero Playbook Now

Goal

You see which channels and partners create paid users and revenue, not just clicks. You decide budgets and features with numbers you trust.

What you set up

  • One snapshot that adds custom fields, events, dashboards, and workflows.
  • One data layer that stores UTMs, subids, click ids, costs, revenue, and plan info.
  • One event map that standardizes Trial Started, Verified Paid, Refund Processed, Churned.
  • One cost sync that ingests ad spend and partner fees by UTM or subid.
  • One KPI board that shows EPC, RPM, CAC, payback, LTV, refunds, and churn.

Query map

  • Source and intent, seo, sem, meta, partner, community, email.
  • Asset type, pricing page, comparison page, review video, partner feature.
  • Campaign clusters, pricing, migration, onboarding, niche snapshots.
  • Partner and creator ids, subid1 equals partner, subid2 equals asset, subid3 equals variant.
  • Recency windows, 7 day, 30 day, 90 day for trend and seasonality checks.

Data model, minimum fields

  • Contact fields, utm_source, utm_medium, utm_campaign, utm_content, subid1, subid2, subid3, click_id, first_touch_date, last_touch_date.
  • Deal fields, trial_start_date, verified_paid_date, plan_name, plan_period, invoice_amount, currency, refund_amount, refund_date, status_active.
  • Cost fields, ad_cost, partner_fee, cogs_estimate if used, attribution_window_days.
  • Cohort fields, cohort_month, cohort_source, cohort_partner.
  • Flags, verified_buyer, refunded, churned, reactivated.

Template, section order

  1. H1 that names the dashboard and the reporting week.
  2. One line verdict that states what to scale and what to pause.
  3. Metrics table that lists EPC, RPM, CAC, payback, LTV, refunds, and churn.
  4. Breakdown matrix by source, campaign, page type, and partner.
  5. Trend lines for trials, paid, and net revenue by week.
  6. Cohort table for retention and LTV by cohort month.
  7. Notes and actions that assign owners and due dates.
  8. FAQ panel that defines each metric in one sentence.
  9. CTA block that links to the tasks created from today’s readout.
  10. Export buttons for CSV and a clean PDF.

Core formulas, exact

  • EPC equals net revenue divided by tracked clicks.
  • RPM, click based, equals net revenue divided by clicks, multiplied by 1 000.
  • RPM, view based, equals net revenue divided by landing page views, multiplied by 1 000.
  • CAC equals total acquisition cost divided by new verified paid, include ad_cost and partner_fee.
  • Payback days equals CAC divided by ARPU_daily, where ARPU_daily equals MRR divided by 30.
  • Monthly churn rate equals churned this month divided by active start of month.
  • LTV, simple, equals ARPU_monthly divided by churn rate, adjust by gross margin if needed.
  • LTV, cohort, equals the sum of ARPU_monthly multiplied by retention for each future month, optionally discount by 1 to 2 percent per month.

Variants to avoid duplicate feel

  • View 1, performance by source and campaign for media buying.
  • View 2, partner and creator leaderboard for affiliate ops.
  • View 3, page type view for SEO, pricing, vs pages, alternatives, review posts.
  • View 4, cohort view for product and success, retention and refund trends.

Internal linking

  • You link metric cards to the underlying contact or deal lists.
  • You link partner rows to the CRM record and current tasks.
  • You link page rows to the live URL and the edit screen.
  • You link actions to the pipeline stage or owner calendar.

Content ops

  • You lock a weekly reporting slot, same time and owner.
  • You save screenshots of top charts to a shared folder.
  • You keep a “Decision log” that records scale up, pause, and test notes.
  • You review bottom quartile sources monthly and plan cuts or fixes.

Compliance and brand safety

  • You store only the fields you need.
  • You honor consent flags for email and SMS.
  • You mask payout and tax data in general views.
  • You keep disclosures in templates and surface them on all LPs.

Performance targets

  • Data completeness above 95 percent on UTMs and subids.
  • Trial to paid above 25 percent on comparison and pricing traffic with bonus active.
  • Refund rate under 5 percent and involuntary churn under 1.5 percent.
  • EPC and RPM trending up for the top half of sources by spend.
  • Payback inside 30 days for small tests before you scale.

Automation blueprint

  • Trigger, First Page View, capture utm_* and subid_* into custom fields if empty.
  • Trigger, Trial Started, set trial_start_date, write source, and join cohort.
  • Trigger, Payment Verified, set verified_paid_date, add verified_buyer, compute CAC and EPC in a calc field.
  • Trigger, Refund Processed, add refunded flag, subtract refund_amount from net revenue.
  • Trigger, Churned, set churned flag and update retention table.
  • Nightly job, pull ad_cost by UTM from Google Ads or Meta exports, match by date and campaign, write to cost fields.
  • Weekly job, rebuild cohort LTV table and refresh dashboards.

QA checklist

  • You confirm UTMs and subids write on first hit and never overwrite later.
  • You test Paid event with a sandbox card and verify revenue and currency.
  • You compare ad platform cost totals to your import totals, difference under 2 percent.
  • You spot check refunds for correct sign and correct period.
  • You validate cohort counts against CRM totals at month start.
  • You check time zones on exports so days align.

Tracking setup

  • UTMs, utm_source, utm_medium, utm_campaign, utm_content on every link.
  • Subids, subid1 partner id, subid2 asset id, subid3 variant.
  • Cost file, date, source, campaign, adgroup, cost, clicks, currency.
  • Revenue file, date, contact id, plan, amount, currency, refund if any.
  • Join keys, date plus campaign or subids for cost, contact id for revenue.

Troubleshooting

  • If EPC is zero with visible paid users, check Paid event mapping and currency fields.
  • If RPM looks high but CAC is higher, check refund lag and partner fees inclusion.
  • If one source has clicks and no UTMs, fix the link in the asset and add a retro tag rule.
  • If cohorts show sudden churn spikes, confirm billing failures and plan migrations in that month.
  • If cost imports drift, normalize campaign naming and enforce a naming convention.

CTA blocks to paste

  • Primary, Install the reporting snapshot and set your weekly readout.
  • Secondary, Import last 90 days of cost and revenue to backfill baselines.
  • Note, Use verified paid as the primary conversion and adjust refunds in net revenue.

FAQ

What is the difference between EPC and RPM
EPC is earnings per click. It divides net revenue by clicks. RPM is revenue per 1 000 units. You can compute it per 1 000 clicks or per 1 000 landing page views. Use both views to compare ads and pages.

How do I calculate LTV without long history
Start with simple LTV, ARPU_monthly divided by churn rate. Use conservative churn, for example 6 to 8 percent per month for early cohorts. Replace with cohort LTV once you have three to six months of retention.

Which conversion should be primary
Use Verified Paid as the primary conversion. Use Trial Started as a secondary. Optimize budgets and partners to paid, not signups.

How do I handle refunds in EPC and RPM
Subtract refund_amount from revenue in the same period you count the payment or in the next period if the refund occurs later. Keep a refund_rate card so spikes are visible.

What is a good payback target
Aim for payback inside 30 days on tests. Move to 60 to 90 days only after LTV is proven and churn is stable.

How do I reconcile ad costs
Export daily cost by campaign from each platform. Match by utm_campaign and date. Accept a small variance, under 2 percent, from time zone and click filters.

Can I compare partners fairly
Yes. Use EPC and time to first paid by partner and by asset. Remove house-list traffic from partner rows. Pay only on verified paid when terms allow.


Stop earning crumbs from affiliate links. Build your own white-label SaaS business, keep 100% of the revenue and launch your own brand in days using GoHighLevel’s powerful engine.

👉 Yes, Show Me How to Build My Own SaaS