Comparing Real Ad Revenue Between AdSense and Adsterra

AdSense RPM Isn’t What You Think It Is

Most people misunderstand how Google calculates RPM (Revenue per Mille). It’s not what you earn per 1000 pageviews — it’s per 1000 ad views. Meaning: if you’ve got lazy loading, or ads that fail to render (which happens way more than you’d think), your RPM tanks even if traffic doesn’t. And no, Google doesn’t always tell you when an ad failed to load. You just see ghost impressions, or worse, placement space that collapses and ruins your layout.

Adsterra, meanwhile, calculates revenue based on what their internal campaign logic allows them to serve you. It’s not impression-calibrated in the same detailed way. They try to simplify with flat CPM rates per country and category (e.g. US traffic might get $1–$2 CPM for display banners), but they don’t always account for session behavior (e.g. whether the user interacts at all). That might sound like a plus, but it can also hide underperformance until the monthly payout report.

Aha moment: One day I saw an AdSense RPM take a nosedive during peak traffic just to realize the site’s top ad was blocked due to a site-level cache misconfiguration delaying the JS load. It had nothing to do with traffic. My RPM dropped by half, and Google didn’t even notify me — I had to catch it in the HAR file manually.

Latency and Ad Load Timing Differences

Upper fold load times matter way more than people admit — especially if your audience is mobile-heavy. AdSense will just… not show ads if the slot’s load is too slow. It’s silent failure. And it happens more often on CMSes like WordPress with three sliders, an interstitial pop-up, and a newsletter modal preloaded “for performance.”

Adsterra runs a slightly scrappier operation here. Their ad calls don’t care much about CLS or Core Web Vitals — which means they’re more likely to push something through, often with aggressive rendering. This can increase fill rate on poorly optimized sites. But good luck if you’re worried about Google Page Experience scores.

Small anecdote: I once had a subdomain where Adsterra ads consistently outperformed AdSense by around $3 RPM because the site had clunky video autoplay elements. AdSense flagged it for layout shift; Adsterra just shrugged and filled the slot anyway. Google’s JS choked, they didn’t.

Unlogged Click Discrepancies (And Where the Money Vanishes)

This one’s infuriating. AdSense occasionally logs clicks that don’t convert into revenue — at least not that you can see. One theory is that some of those get flagged as invalid (via Google’s own ML-based fraud detection), and they just don’t tell you. Another is bot clicks that look just legit enough to be tallied upstream but get smacked down before payout time. Either way, there’s often a gap.

Adsterra actually over-logs early clicks and impressions sometimes — and then claws them back. Their reporting dashboard usually adjusts a few days later, which is disorienting. Don’t trust their daily totals. I’ve had days where initial revenue looked like $48 and settled around $28 later. Kids clicking popunders? I can’t say.

{
  "AdSense Clicks": 57,
  "Earnings": "$9.84",
  "Adsterra Clicks": 112,
  "Initial Earnings": "$21.43",
  "Final Earnings": "$13.17"
}

Payout Schedule Realities and Weird Delays

If you’ve never had an AdSense payment delayed “for verification,” congrats. I have. Took two weeks once because my bank routing number had a silent character variant — like a hidden hyphen — that only caused an error during batch transfers. There was no warning. Legit thought I was banned until I got some soft-spoken response from Google Payments.

Adsterra pays on two schedules: NET15 and NET30 — but only if you’ve hit the threshold and passed some internal review. That internal review is… opaque. I had to email them after my first $150 held on “pending for compliance check.” Was resolved, but they never explained what the check was. Risk scoring? Address mismatch? Nobody would say.

Also: Adsterra dumps you into crypto if you don’t choose PayPal or wire. BTC drops are inconsistent in value due to their conversion logic (they seem to batch-process twice a week). One month, my US-based site earned what should’ve been ~$240, ended up receiving just under $200 in BTC due to TX fee volatility. No disclosure until I asked.

Script Behavior When Combined with Other Ad Networks

If you’re running AdSense and Adsterra on the same domain — or worse, same page — good luck. AdSense hates competition. Literally. They’ve got auto-detection that can suppress ad fill in certain CTS overlap zones. I learned this the hard way: running AdSense up top, Adsterra bottom sticky. AdSense’s top slot just… stopped rendering.

Quick script behavior tips:

  • Keep AdSense and Adsterra scripts in separate JS scope blocks. Never include Adsterra init inside an AdSense logic block.
  • Delay Adsterra load by 2–3 seconds for better AdSense priority.
  • Avoid injecting both scripts with async unless you control the order. It’s race-condition roulette otherwise.
  • Don’t use Adsterra’s inPagePush AND AdSense AutoAds on the same viewport. They override each other’s scroll listeners.
  • If using WordPress, explicitly enqueue each ad network via separate hooks — not bundled in the footer enqueue mess.
  • Mobile can misfire scripts more due to limited concurrent connections. Use lighthouse to check time-to-first-byte per script.

Country-Based CPM Differences Aren’t Static

Most comparison posts between AdSense and Adsterra pretend that CPM by country is fixed. It isn’t. AdSense responds to seasonal bidding pressure from advertisers (especially around Black Friday, back-to-school, political windows). CPMs in the US and Canada can spike or drop ~40% week to week. I’ve seen CPMs burn through bull runs only to crater right after Election Week.

Adsterra, by contrast, tends to run flatter. More consistent globally — especially on non-display formats like popunders and direct link ad placements. But this only helps if your traffic isn’t concentrated in Tier 1 markets. If 90% of your traffic is US desktop? You’ll earn more with AdSense by default. If it’s 60% India and Indonesia mobile? Adsterra might edge out in pure volume-based pops.

Ad Blocking Behavior Across Both Platforms

UBlock Origin eats AdSense for breakfast. Seriously — especially with certain filter lists or if you’ve got AMP caching breaking monetization. One reader sent me a screenshot of my site where three major AdSense units didn’t render at all. Checked their browser: 3 content-blocking extensions, one script firewall. All legal. Gone.

Adsterra’s ads, on the other hand, are designed to sneak through various blockers — but this is a double-edged sword. Out-of-frame rendering and iframe occlusion tricks may trigger browser-level sandboxing or get caught by Brave’s built-in shields. One Chrome Canary build actually flagged their pop-under mechanism as a malware vector temporarily. Not blocked — just red-boxed.

So yeah, Adsterra may show more ads on ad-blocked browsers — but they carry more brand risk. If you run a product comparison site or a review vertical, brace for the possibility of Adsterra ads crossing into crypto-banner territory that offends your readers.

Poorly Documented AdUnit Size Impacts

This is one of those things Google used to tell you mattered — but now only reference in ambiguous sentences. AdSense “recommends” responsive ad units, but won’t penalize you for sticking to 728×90 or 300×250. However, from what I’ve seen, 300×250 does worse on mobile even though it technically fits.

Adsterra lets you declare fixed ad sizes or responsive units for banners — but if your declared size doesn’t match your CSS constraints, they’ll still shove a filled creative in there. That’s how I once ended up with a gangly 970×250 filling a half-page mobile slot. It broke layout. Their fault? Mine? Doesn’t matter. It looked janky and reduced session time.

Fun find buried in AdSense logs: “640×100 ad slot not served due to low demand in region.” That wasn’t in the docs.

When Revenue Falls and Nothing Looks Broken

This is the worst one. Traffic’s fine. Click rate is stable. You haven’t changed layouts. But one day your AdSense earnings drop by 30%. Support says nothing’s wrong. You’ll check coverage reports, crawl behavior, AMP performance, and still find nothing.

The cause? I once traced it back to a Chrome update (version 98 or 99 or something random) that altered how top frame iframes loaded. AdSense’s script switched behavior subtly. On devices with compositing lag, the viewport intersection failed to fire fast enough for above-the-fold detection — especially under crummy conditions like hotel Wi-Fi. Suddenly ads were “loading too late” and got considered below-the-fold. My CTR dipped without visually changing anything.

This behavior wasn’t documented. Not even mentioned in Chrome release notes. Found it by comparing devtools timeline on two machines with the same build but different CPU throttling profiles.

Similar Posts