Skip to content

Google App Ads Bots: Spot Fake Installs Fast [Guide]

I spent $220 on Google app ads and 60% of the installs were robots - here's the detection checklist, bidding fix, and what actually works after the story blew up.

6 min readBeginner

The #1 mistake after “I spent $220 on Google app ads and 60% of the installs were robots” went viral is treating Google’s install count as ground truth. Cheap installs climb. You smile. Your own logs show almost nobody stayed.

Dayzle’s Nick Abe hit that exact wall. The post ripped through Hacker News, Gigazine, and indie threads – AdMob ban stories, partial refunds, same “the system feeds the farm” loop. This piece is not a recap. It’s the checklist and setup changes that stop the bleed on small budgets.

Why bidding only on installs backfires

App campaigns hand targeting, creatives, and bids to Google. You ship assets and a goal. Goal = install or first open? Anything that looks like an install gets paid – including view-through conversions.

Google’s own Help docs spell it out: a view-through conversion can count when someone sees the ad (no click) and installs inside the window – often about a day for apps, as documented there. Farms abuse it. Watch the shortest video. Skip the click. Sideload a saved APK. Open once. The algorithm sees a conversion and ships more spend. Real people cost more; the farm looks “efficient.”

The usual playbook – more assets, bigger budget, wait out learning – never questions whether the conversion signal is clean. MMPs and fraud tools exist. Most beginners still light $200 on fire before wiring them.

Dashboards feel authoritative because the numbers move every hour. That calm is the trap. A rising install graph can be a farm teaching your campaign what “success” looks like.

The detection checklist you run this week

Three sources, side by side, daily for the first two weeks: Google Ads installs, Play Console or Firebase first-opens, raw device/session logs from your backend or export.

  1. Install vs first-open gap – Dayzle: Google billed 56; only 13 acted like people. Over ~20-30% gap? Red flag.
  2. App version skew – bots often run builds Play stopped serving. You can’t get those from a clean store install. They still claim “Google Play” as installer.
  3. Session quality – 0s on every screen, one open, gone. Dayzle’s 13 real users finished 92 games.
  4. Geo/device clusters – outside your targets, or 20+ “users” on mixed models all doing the same zero-engagement script.

Export the raw CSV. Filter new devices to campaign dates. Sort by version and session length. Turns out the bot blob is ugly and obvious once it’s in a spreadsheet.

Setup that starves the farm

Flip the incentive. Stop paying for opens. Pay for something a script hates.

In Google Ads, create or import a conversion for a hard in-app action – puzzle solved, level 3, verified account, first purchase. Make that the primary App campaign goal. Dayzle moved to “won a puzzle.” Opening is free for bots; finishing a Sudoku-style puzzle is not.

Keep Firebase (or your MMP) tight so the event fires server-side or with strong device signals. Align windows so Google and your analytics agree. Set target CPA from real LTV math, not a race-to-bottom CPI.

Pro tip: Google’s documented floor is about 50× target CPI daily budget for install App campaigns, or 10× target CPA for action campaigns (App campaign tips, as stated in Help). Starve the budget and the campaign stays hungry for any cheap signal – farms included. Fund the floor. Then change bids or budget by no more than ~20% at a time.

Review view-through settings on purpose. Know whether VTCs feed your main Conversions column. Android-only? You can tune this. Treat pure view signals as unproven until post-install engagement shows up.

What the $220 Dayzle run actually shows

Two weeks. About CA$40/day. tCPI $1.50 barely spent. Kill the target → ~CA$80 in a day and 21 reported installs vs 1 in the admin panel. Raw: ~20 devices on dead versions, 0s dwell, identical pattern. Full run: 56 billed, ~33 farm-shaped, 7 geo mismatches, 13 humans who played. Numbers from Abe’s Sept 2025 write-up (community post; figures as published there).

Every fake install made the campaign look better, so Google sent more inventory to the same sources. Trust-the-dashboard dies right there.

Abe filed Google’s invalid-traffic investigation form and was still waiting when he posted. Big advertisers sometimes get reps; small ones get automation. File anyway – traffic from the past 60 days can be reviewed, and credits show as billing adjustments when Google agrees (invalid traffic Help).

When Google’s filters help – and the App-campaign gap

You don’t pay for everything the Ad Traffic Quality stack catches pre-invoice. Post-invoice, invalid-activity credits can still land. Add an “Invalid clicks” column. Watch adjustments.

The catch is App campaigns. Detailed Invalid Activity Credit Report templates are built around Search and Performance Max. App advertisers get thinner campaign-level breakdown and lean on the manual investigation form. Your own CTIT spreads, version lists, and retention curves still do the real work.

Google’s traffic-quality materials and an Aug 2025 blog note ML/LLM-assisted cuts – including a claimed ~40% drop in some deceptive IVT classes on Ad Traffic Quality. That does not erase device-farm + sideload + VTC patterns on tiny budgets. As of those public notes, small App campaigns remain exposed.

If a few hundred dollars already bought a bot classroom for your bid system, what happens when the next indie ships on a CA$40/day cap with install-only goals? The public refund record is still thin.

FAQ

Should I pause the moment installs and opens diverge?

Yes. Kill the install-primary campaign. Switch the goal to a hard in-app event, fund the budget floor, restart. Leaving it up trains on garbage.

Do I need a paid MMP on day one?

On a tiny test, Firebase plus your backend CSV already catches the Dayzle pattern – version skew, zero dwell, install/open gap. Example: one evening export, filter campaign dates, sort session length; the 0s cluster shows up without another vendor. When daily spend rises or you add networks, an MMP with click-injection and SDK checks starts to pay rent. Buying the suite before you’ve opened one raw export is how beginners waste money twice.

Will Google refund bot installs?

Sometimes – not a promise. Send the investigation form with evidence: version lists, session zeros, geo mismatches, Google-vs-backend counts side by side. Approved credits appear in billing. A common misconception is “invalid traffic always means automatic full clawback.” Filters miss traffic that looked valid enough in the moment. HN threads on the Dayzle fallout report partial or zero recovery on small spends. Snapshot everything the day you notice the gap; waiting softens the paper trail.

Open Google Ads next to your analytics now. Export the last 14 days of device-level data. If installs and engaged users already diverge by more than about a third, change the conversion goal before the next dollar.