Page-vs-page comparisons drive real decisions — PR retainers, ad placements, competitive reviews, "why is their engagement triple ours" meetings. Most of them are quietly wrong before the analysis even starts. Here are the five ways they lie, and a procedure that doesn't. It works with any scraper's export and no particular tool.
The five ways comparisons lie
- Duplicates get counted twice. The same post arrives as /posts/301 and /posts/301?ref=share, from www. and from m. — and naive counting books it twice. Worse, this isn't random noise: pages that cross-post and push share links get inflated systematically. Your "most active page" may just be your most duplicated one.
- The windows aren't equal. One page was scraped deeper into the past than another (scrapers paginate unevenly), so page A gets 90 days of history and page B gets 30 — then someone compares totals. Align the window first, and say what it is.
- The mean worships one viral post. A page with 49 dead posts and one 10,000-engagement hit "averages" 200 per post. Report the median for typical performance and list the top posts separately — they're different facts and both matter.
- Absent fields become zeros. Mobile exports often lack shares entirely. Treat missing as zero and that page "has no shares" — a data artifact promoted to a finding. Absent data should render as absent ("—"), never as 0, and the report should say which fields were absent where.
- Nobody states the coverage. "We compared the pages" — on how many rows? After removing how many duplicates? Over what window, in whose timezone? How many posts had no readable date? A comparison that can't answer these isn't evidence; it's vibes with a chart.
The procedure
1. Canonicalize every URL first (hosts folded, tracking params stripped,
identity params kept) — see "The Facebook URL Zoo" for the full rules.
2. Deduplicate on the canonical post key. Record how many you removed.
3. Align the comparison window across all pages; state it, with timezone.
4. Per page: post count, total engagement gained, MEDIAN engagement,
and top posts listed separately.
5. Render absent fields as "—", and note which pages lacked which fields.
6. Print the coverage block INTO the deliverable: rows in, duplicates
removed, window, dateless rows, fields absent. The method is part of
the report, not a footnote you keep to yourself.
Why this matters most in PR and advertising
If you make your living on these numbers, the deliverable is the argument. A competitive audit that states its coverage and shows its dedup survives the hostile question in the client meeting; one that can't explain its denominators dies there, and takes your credibility with it. And if you're an advertiser vetting pages for placements or partnerships: duplicate-inflated engagement is precisely how a mediocre page is made to look lively. The procedure above is how you check before the money moves.
Disclosure: I build tools that implement exactly this. Mentat Page Compare runs the whole procedure on any posts-scraper export and produces a client-ready HTML report — $3.99 per 1,000 unique posts (deduplicated first, so you never pay twice for the same post; platform compute included; the demo is free). Its free sibling, the Facebook Page Identity Resolver, handles step 1-2 alone. The full URL taxonomy is in The Facebook URL Zoo. The procedure works without any of them — that's rather the point.
Top comments (0)