Dashboard
Top Sources
Top Pages
Devices
Widget Placements
Sources
last 30 minDevices
last 30 min🖱 Widget clicks
last 30 min — these are the money momentsMonetization Funnel
where visitors drop out between landing and earning🚫 Traffic, no widget seen
widget missing or below the fold👀 Seen, never clicked
weak placement or listings🖱 Clicked, no revenue yet
leads not converting on Esy's sideMovers vs previous period
📈 Gainers
📉 Losers
Page decay
second half of the selected range vs the first half — money pages quietly sliding💸 Revenue decaying
📉 Traffic decaying
Engaged vs. Earns
each bubble is a page (size = visitors). Top-left = deeply read but under-monetized — your best widget-placement opportunities.Content Performance
every page's traffic, engagement, and revenue side by side — click a column to sort. RPM = revenue per 1,000 pageviews.Web Vitals
real-visitor page speed (p75, Google's threshold percentile). LCP = load, CLS = layout shift, INP = responsiveness. Green meets Google's "good" bar; red is "poor" and can cost rankings.Improve — striking-distance queries
search queries ranked 4–20 on pages that already earn revenue. These are the cheapest wins: better internal links, refreshed content, or a dedicated page pushes them to page one.Write — under-built high-RPM trades
trades that earn far more per pageview than the portfolio average but have thin content. Headroom = monthly $ if traffic grew to the portfolio's 75th percentile at current RPM.Refresh — decaying earners
pages whose revenue or traffic dropped sharply between the first and second half of the period. Rescue these before rankings follow the trend.Geo & Trades Performance
Rolled up from page URL slugs across every site — pageviews, widget CTR, conversions, revenue, and RPM per dimension. Click a column header to sort.
Search Performance
Search clicks & impressions joined to revenue by landing page. Revenue / query distributes each page's conversion revenue across the queries that drove its clicks — which search terms actually feed the money pages. Import data in Settings → Data & Integrations.
A/B Experiments
Variant performance from tracker-tagged widget events. Configure with data-experiments="listing_copy:2" on the tracker tag, and vary your page by window.hkaVariant('listing_copy'). Significance is a two-proportion z-test vs the control variant.
Tracking Health
Per-site last-seen pageview, tracker version, and 24h volume. A site going silent during active hours is the earliest sign of a broken tracker (the worst kind of outage — silent data loss).
⚠️ Alerts
Conversion data freshness
Backups & delivery
Esy Widget Performance
impression → view → click funnel from the tracker · conversions & revenue from your CSVs, joined by unique placement IDsClick economics by widget type
listing (request-info) vs search (find-schools) — which widget kind earns the clicksThis month's pace
month-to-date vs the same point last month, with a straight-line projection to month-endRevenue Attribution
⏱ Time to convert
widget click → Esy payout lag🧭 Path to conversion
page journey of recent converters (exact-attributed)Manual revenue adjustments
For revenue with no per-conversion CSV row — e.g. Esy's "3rd Party Aggregators" line. Added to the chosen day's totals; re-entering the same site + date + label updates the amount.
Recent Conversions
Accounting — estimated vs. paid
Estimated = revenue we tracked (conversions). Paid = what you enter from your Esy statement. The difference surfaces scrubbing / bad-lead clawbacks. Negative = paid less than tracked. Click a Paid cell to edit.
AI Briefs
compiles the selected sites + period into a markdown report with an analysis prompt — copy it into ClaudeYour account
Scan this with Google Authenticator, 1Password, or Authy, then enter the 6-digit code to turn on two-factor:
Or enter manually: