Two pages, one for each network. Google Ads goes campaign → ad group → keyword; Meta Ads goes campaign → ad set → ad. Every metric is shown beside its change against the period immediately before, of the same length — so every comparison is like-for-like by construction. Both read your live account on every request. There is no sync to wait for.
How it reads
Most reporting tools are wrong in ways that look right. These are the decisions that stop that happening.
One comparison mode: the period immediately before yours, of the same length. It replaced WoW / MoM / QoQ, which with "Last 30 days" selected compared two 30-day windows overlapping by 23 days under a label saying week.
Counts move in percentages; proportions — impression share, CTR, conversion rate — move in percentage points. 55% to 60% is +5pp, not +9.1%.
Something that ran in the comparison window and not in this one is listed, blanked and badged. "$4,000 last month, nothing this month" is the most useful thing a comparison can say, and it is invisible in the current window by definition.
It opens showing rows that spent money inside the range, because most accounts carry more retired campaigns than live ones. A paused campaign that spent real money still shows — so the visible rows always sum to what the account actually spent.
CPC, CTR and cost per conversion are recalculated from the totals in view rather than averaged from the platform's per-row averages — which is a different number the moment rows differ in click volume.
On the daily trend chart a day with no delivery is a gap, never a zero and never omitted. A zero asserts the campaign ran and achieved nothing; a bridged line draws spend that never happened.
Per network
The two pages are deliberately not identical, because the two platforms do not measure the same things.
Cost, Impressions, Clicks, CTR, CPC, Conversions, Conversion rate, Cost / conv., Search impression share, Lost IS (rank), Lost IS (budget) — plus keyword-grain Final URL, URL suffix (UTM) and Tracking template.
Impression share is never derived: Google computes it over the whole range, and a campaign's share is not the average of its ad groups'. Google clamps the figure, so the table prints > 90% and < 10% rather than false precision. Lost IS (budget) exists only on a campaign, because budgets are a campaign resource.
Spend, Impressions, Reach, Frequency, Clicks, CTR, CPC, CPM, Results, Result rate, Cost / result.
Meta publishes no impression share at any level, so those columns are absent rather than permanently empty — CPM is the closest read on auction pressure, and rising frequency against flat reach is the saturation signal. Reach and frequency deliberately don't add up: Meta deduplicates people across an ad set's ads, so each level is queried on its own rather than rolled up.
Act on it
Reporting that can only report sends you to another tab to act, and the context goes with you. These writes are deliberate clicks by a person — never something an AI agent can trigger.
Three levels, both networks, every metric beside its change — and the pause button in the same place as the number that justifies it.