Key takeaways
- Google Play Integrity and Apple App Attest prove that a request comes from your genuine app on a genuine device, and they must be verified on your server, never inside the app.
- Phone farms often use real, unmodified phones that pass attestation, so you catch them with server-side patterns such as accounts per device, request velocity and shared payout destinations.
- Respond in tiers and hold new or risky earnings before cash-out, so a false positive costs an honest user a short wait instead of their account.
How do rewards apps detect emulators and device farms?
Rewards apps detect emulators and rooted devices with platform attestation: Google’s Play Integrity API on Android and Apple’s App Attest on iOS, both checked on your server. They detect phone farms, which often run on real phones that pass attestation, with server-side patterns: many accounts per device or network, activity faster than a person could manage, the same offers completed in the same order, and several accounts cashing out to one destination. Then they hold new and risky earnings before cash-out, so a reversal cancels a reward that never left the site.
This guide is for owners of rewards apps, games with an earn screen, and rewards websites. It explains what each signal proves, what it does not prove, and how to act on it. It does not describe how abusers get around detection.
Emulators, rooted devices and phone farms
Three different setups get lumped together as “device fraud”. They need different checks, so it helps to keep them apart.
| Setup | What it is | Why it matters on a rewards app | Best first signal |
|---|---|---|---|
| Emulator | Software that runs Android on a computer or server, often many copies at once | One machine can pose as dozens of phones and claim new-user rewards on each | Play Integrity device verdict |
| Rooted or modified device | A real phone with an unlocked or altered system, or a tampered copy of your app | Lets someone change what your app reports, fake device details, or automate taps | Play Integrity device and app verdicts, App Attest |
| Phone farm | Racks of real phones run by one operator, often with automation or low-paid workers | Real hardware passes most device checks, so the farm earns like many separate users | Server-side patterns and payout links |
All three aim at the same thing on a rewards app: being paid many times for what is really one person. That is why device checks belong next to the account checks in Stop multi-accounting and VPN abuse and the sign-up checks in Stop fake sign-ups on a rewards site, not in place of them.
What the Google Play Integrity API attests
Google’s Play Integrity API overview says the API helps you check that requests come from “your genuine app, installed by Google Play, running on a genuine and certified Android device”, and that it uses hardware-backed security signals. Your app asks for an integrity token, sends it to your server, and your server reads the decrypted verdict. The integrity verdicts reference lists what is inside (checked on November 5, 2026):
Baseline checks, before anything else
- Request details: the package name, the request hash (standard requests) or nonce (classic requests), and a timestamp. Google says to check these match the original request first, which stops a token from one request being replayed for another.
- App integrity:
PLAY_RECOGNIZEDmeans the app and certificate match what Google Play distributes.UNRECOGNIZED_VERSIONmeans the certificate or package name does not match Play records, a sign of a modified or repackaged app. - Account details:
LICENSEDmeans the user installed or updated your app from Google Play.UNLICENSEDcovers sideloaded copies.
Device labels
MEETS_DEVICE_INTEGRITY: a genuine and certified Android device. On Android 13 and higher there is hardware-backed proof that the bootloader is locked and the system is a certified manufacturer image.- No label at all: Google says this means signs of attack such as API hooking, system compromise such as root, or an app not running on a physical device, such as an emulator that does not pass Google Play integrity checks.
MEETS_BASIC_INTEGRITY(opt in): the device passes basic system checks, but the bootloader may be unlocked and the device may not be certified.MEETS_STRONG_INTEGRITY(opt in): a genuine certified device with a recent security update. On Android 13 and higher that means security updates within the last year.MEETS_VIRTUAL_INTEGRITY: only for apps released to Google Play Games for PC, an approved emulator with Google Play services. A rewards app on phones should not expect it.
Optional signals that matter for farms
- Recent device activity: how many integrity tokens your app requested on that device in the last hour, in four levels. Google suggests it for finding hyperactive devices and says high-volume abusers commonly generate valid attestations on real devices and hand them to bots on rooted devices and emulators.
- Device recall (beta): three bits you set per device, stored on Google’s servers, that survive a reinstall or device reset. You could use one to mark “already claimed the welcome bonus”.
- App access risk: whether apps are running that could capture the screen, show overlays, or control the device. Remote control and automation tools show up here, though verified accessibility services are excluded.
- Play Protect verdict: whether Play Protect is on and has found harmful apps.
Google is direct about the limits. The overview says the API “works best when used alongside other signals” and not as your sole anti-abuse mechanism, recommends a range of server responses such as allow, allow with limits, and deny, warns against caching verdicts, and sets a default of 10,000 requests per day across all installs, which you can ask to raise (checked on November 5, 2026). It also suggests running the API without enforcement first, so you see what your real users return before you block anyone.
What Apple App Attest and DeviceCheck attest
On iOS the tools live in Apple’s DeviceCheck framework, which has two parts.
App Attest
Apple’s guide to establishing your app’s integrity says you cannot rely on your app to check itself, because a compromised app can falsify the results. Instead the app creates a key pair in the Secure Enclave, Apple certifies that the key belongs to a valid instance of your app on Apple hardware, and the app signs sensitive requests with that key. Your server checks every attestation and assertion against a one-time challenge it issued. Practical details from Apple’s pages:
- Not every device supports the service, so your app checks
isSupportedand your server must handle devices that cannot attest. Apple says the value is false on a Mac, including iOS apps running on Apple silicon. - Keys survive app updates but not a reinstall, device migration, or restore from backup.
- The attestation records how the app was distributed, for example App Store, TestFlight, or a development build.
Apple’s page on assessing fraud risk adds the signal most useful against farms: your server can request a risk metric, the approximate number of attested keys for your app on that device over the past 30 days. Apple says to look for a low number. A device that keeps generating new keys may be one compromised device serving many fake app instances.
DeviceCheck bits
The same framework lets your server set and read two bits per device, stored by Apple. Apple’s example is marking a device that has already used a promotional offer or that you found to be fraudulent. You decide what the bits mean and when to reset them, for example when a phone is sold.
Apple is as clear as Google about the ceiling: “No single policy can eliminate all fraud”, and App Attest “can’t definitively pinpoint a device with a compromised operating system.” Treat its result as one input to a risk score.
Server-side checks that catch phone farms
A farm of real, unmodified phones passes attestation. What it cannot hide is that one operator runs it, so the evidence shows up in your own data. Store the device ID your app generates, the network, and the payout destination with every account, and look across accounts, not one at a time.
| Signal | What to look for | How reliable |
|---|---|---|
| Payout destination | Several accounts cashing out to the same wallet, payment account or gift card email | Strong. The money has to go somewhere |
| Accounts per device | More than one account on one install, one DeviceCheck bit, or one device recall flag | Strong on mobile with attestation, weaker on the web |
| Accounts per network | Many sign-ups or earners behind one IP range in a short time | Medium. Schools, offices and mobile carriers share addresses |
| Velocity | Sign-ups, offer starts or integrity requests faster than people manage | Medium to strong, especially when it repeats |
| Behavior sequence | The same offers in the same order at the same times across accounts | Strong when many accounts match |
| Cash-out timing | Accounts that earn to the minimum and withdraw at once, then go quiet | Medium. Also typical of honest one-time users |
| Reversal rate per account | Results that keep coming back reversed | Strong but late. It arrives after the credit |
Reversals are the feedback loop. When an advertiser finds fraud, the result is taken back, and if you have already paid the user you lose twice. What is a reversal rate? shows how to track it per user, and How to prevent referral fraud covers farms that pass earnings up a referral chain.
Detecting emulators on a rewards website
A web page cannot call Play Integrity or App Attest, so a rewards website has weaker device evidence. Browser signals, such as screen size, graphics details and time zone, can show that a “phone” visitor is really a desktop browser pretending to be one, or that many accounts share one setup. They are probabilities, not proof: many people own the same phone model, and privacy browsers change their values on purpose. What is device fingerprinting? explains why, and the privacy rules that apply.
That makes the server-side patterns above, payout matching, and holds even more important on the web. If your property has both an app and a site, consider letting cash-outs happen in the app, where attestation is available.
What to do when a check fails
Do the check where the money moves: sign-up, the welcome bonus, opening the earn screen, and above all cash-out. Then answer in tiers instead of a single yes or no.
- Allow: a genuine app on a device with full integrity, no linked accounts. Normal hold rules.
- Allow with limits: basic integrity only, an unsupported device, or one soft signal. Let the user earn, but no welcome bonus and a longer hold.
- Review: several signals together, such as a linked payout destination plus high velocity. Pause cash-out and look by hand.
- Deny: an unrecognized app version, a device you already flagged, or a confirmed farm. Block earning and record it with device recall or a DeviceCheck bit.
Illustrative hold policy tied to device trust
Strong or device integrity and an account older than 30 days: rewards released after 3 days. Basic integrity, no attestation, or a new account: 14 days, and no cash-out until the first offer is confirmed. Any linked payout destination: hold everything until reviewed. These numbers are a starting template, not a benchmark. Reward hold periods shows how to set yours from your own reversal data, and KYC for rewards sites covers when an ID check at cash-out is worth the friction.
Mistakes that let farms through or punish honest users
Checking the verdict inside the app instead of on your server. Caching one verdict and trusting it for days. Banning on a missing device label alone, which hits users with older phones, custom software, or devices without Google Play services. Removing earnings with no explanation and no appeal. Telling a flagged user exactly which check fired.
Honest limits of emulator and farm detection
- Real phones pass. Attestation proves the device and app are genuine, not that the person is a separate, honest user. A rack of unmodified phones looks clean to Play Integrity and App Attest.
- Verdicts can be relayed. Google itself warns that abusers generate valid attestations on real devices and feed them to bots. Content binding (the request hash), short token lifetimes and recent device activity reduce this, but do not end it.
- Coverage gaps. Play Integrity depends on Google Play, so phones sold without it, and apps installed from other stores, return weaker verdicts. App Attest is not available everywhere either. A fail is often “could not check”, not “fraud”.
- Many honest users look odd. Shared family devices, students on one campus network, and people who reinstall often all trip single signals. Act on combinations.
- Detection is late by design. Some fraud only shows when an advertiser reverses a result days later. That is the job of the hold, not of the device check.
For the wider picture of bots, click farms and fake sign-ups, read Ad fraud and bot traffic, and for attribution fraud on Android, Click injection and SDK spoofing explained.
How Moonetix fits with your own device checks
Moonetix is a pay-per-result affiliate network, and its offerwall blocks users on VPNs, proxies, Tor and data center networks before any offers load, so a farm hiding behind hosted servers is stopped at the wall. Device trust inside your own app stays your job, and the integration makes room for it: the Moonetix SDKs for Android, iOS, Unity, Flutter and React Native open the wall with a single-use session token your server requests from POST /v1/session, so your server can run its Play Integrity or App Attest check first and decline to create a session for a device that failed. Every credit and reversal reaches your server as a signed postback (status 1 credited, 2 reversed, same transaction ID), so a hold on your side can cancel a reversed reward before it is paid out, and your reports break clicks, conversions and reversals down by country, offer and sub ID, next to a traffic quality report. See how the wall works, read Publisher earnings and reversals, or get in touch with questions.
Frequently asked questions
How do I detect an Android emulator in my app?
Use the Play Integrity API and read the verdict on your server. A device that returns no device label, or only MEETS_BASIC_INTEGRITY, may be an emulator, a rooted phone, or simply an uncertified device. Google advises a tiered response rather than relying on a single label.
Does Play Integrity detect rooted phones?
Google’s verdict reference says an empty device verdict can mean system compromise such as root, signs of attack such as API hooking, or an emulator. It does not tell you which one, and a rooted phone may still return MEETS_BASIC_INTEGRITY if you opted in to that label.
Can App Attest detect a jailbroken iPhone?
Not reliably. Apple says App Attest cannot definitively pinpoint a device with a compromised operating system. It proves that requests come from a valid instance of your app on Apple hardware, and its risk metric helps you spot one device serving many app instances.
How do you catch a phone farm if the phones are real?
Look across accounts on your server: shared payout destinations, many accounts per device or network, matching offer sequences, bursts of activity, and high reversal rates. Device recall on Android and DeviceCheck bits on iOS let you remember a flagged device after a reinstall.
Should I ban every user who fails an integrity check?
No. Some honest users have older or uncertified phones, and some checks fail for technical reasons. Limit and hold first, review combinations of signals, and keep outright bans for confirmed abuse, with a way to appeal.
Can a rewards website use Play Integrity?
No. Play Integrity and App Attest work only inside native apps. A website relies on browser signals, network checks, payout matching and holds, which is one reason some owners route cash-outs through their app.


