WORKED EXAMPLE · V1.0.0
Record the difference.
Leave room for doubt.
These synthetic exports are not Ohayo traffic or customer data. Both use sc-domain:example.com, all countries and devices, web search, query dimension and the same declared export coverage.
Two processed seven-day windows
Before: 2026-09-01 through 2026-09-07. After: 2026-09-08 through 2026-09-14. Data is declared processed through 2026-09-20; that declaration does not prove the export contains every query.
- compare search windows: 20 clicks / 1,000 impressions becomes 30 / 1,000. CTR moves from 2% to 3%, a 1 percentage point difference; position moves from 12 to 9.5.
- small sample: 1 / 40 becomes 2 / 50. Both are below the default 100-impression review threshold, so the result is marked low_sample.
- omitted later and appears later each lack a row in one export. Their changes remain unknown_missing_row, not zero.
Normalize the original exports
python3 scripts/normalize_gsc.py examples/before.csv --scope examples/before-scope.json --key-column "Top queries" --output before.jsonpython3 scripts/normalize_gsc.py examples/after.csv --scope examples/after-scope.json --key-column "Top queries" --output after.jsonKeep the raw CSVs. Review the metadata yourself before running: filters and export coverage cannot be inferred from row values.
Compare and keep the evidence
python3 scripts/compare_windows.py before.json after.json --json review.json --output review.mdExit 0 means a valid descriptive comparison: 2 comparable rows and 2 unknown rows. It does not mean an SEO improvement or a statistically significant change. SHA-256 values identify the normalized JSON inputs; retain the original CSVs separately.
Reject a different device
python3 scripts/compare_windows.py before.json examples/incomparable-after.json --json rejected.json --output rejected.mdThe supplied mobile-device example returns exit 2 and produces no accepted reports. Mixed reporting scopes cannot be treated as a controlled comparison.
One change, with competing explanations
The included experiment ledger records an owner, one page change, its date, the hypothesis and evidence. Seasonality, competitors, ranking changes and export omissions remain possible explanations. The package does not measure AI citations or GEO performance.
Get Search Experiment Ledger · $2.90 ↗