App Store & Google Play App Details + Download Estimates
Pricing
from $2.00 / 1,000 app returneds
App Store & Google Play App Details + Download Estimates
Give App Store or Google Play ids or links, get one row per app: name, developer, rating, rating and review counts, price, category, last update, Play installs, plus a monthly download and revenue range marked as an estimate. Public store sources only. $2 per 1,000 apps, failed apps free.
Pricing
from $2.00 / 1,000 app returneds
Rating
0.0
(0)
Developer
Nguyen Vu Trung Hieu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
What does App Store & Google Play App Details do?
Give it App Store or Google Play apps by id or link, and it returns one row per app with the store's public details and our download and revenue estimate. Both stores share one output schema, so a mixed list of iPhone and Android apps comes back as one table.
Use it for competitor tracking, ASO research, app market sizing, investor and M&A screening, lead lists of app publishers, and AI agents that need app facts in one call.
Price: $2.00 per 1,000 apps returned. Apps that are not listed, invalid input and store pages that come back without their details are free.
What data do you get for each app?
Store facts
name,developer,category,urlandicon.rating(average stars, 2 decimals) andratingCount(number of star ratings) on both stores.reviewCount: written reviews, on Google Play only. The App Store's public lookup publishes rating counts, not review counts, so it isnullthere.price,currencyandfree.releaseDate,lastUpdatedandversion.- Google Play only:
installs(the exact install count behind the "1B+" band),installsTextandinAppPriceRange.
Estimates
Every field whose name starts with estimated is our estimate, not a figure the store or the developer published.
estimatedMonthlyDownloadsLowandestimatedMonthlyDownloadsHigh: a monthly download range. On Google Play it is the exact install count over the app's age, plus or minus 30%. On the App Store it is the app's ratings per day over its life, times 30 to 50 downloads per rating; this understates apps that are growing fast.estimatedMonthlyRevenueLowandestimatedMonthlyRevenueHighinestimateCurrency: a monthly revenue range when a price is known, from the app price or the low end of Google Play's in-app price range, assuming 1.5 to 3.5% of downloads pay for 3.5 to 4.5 months. Free App Store apps get no revenue range, because their in-app prices are not in a public source we read.estimateBasis(installsorratings) andestimateNotesay how each range was made.
The estimates come from the engine behind our App Store Opportunity Tracker, which also scores chart apps and tracks their movement every day.
Status
status is ok on every billed row.
Any other status is a free row with the reason in error: invalid_input, not_found, rate_limited, upstream_error, source_off (the store's robots.txt does not allow the read) or parse_error.
A parse_error row lists the missing fields in missing.
Input
| Field | Description |
|---|---|
apps | One app per line: an App Store link or numeric id (310633997 or id310633997), or a Google Play link or package name (com.spotify.music). Both stores can be mixed. Up to 1,000 apps; the same app twice is read and billed once. |
country | Two-letter store country, default us. Rating, price and currency are the ones that store shows in that country. |
store | auto (default) reads App Store links and numeric ids as App Store apps and everything else as Google Play. Pick apple to read bundle ids such as com.burbn.instagram on the App Store. |
{"apps": ["https://apps.apple.com/us/app/whatsapp-messenger/id310633997","570060128","https://play.google.com/store/apps/details?id=com.spotify.music","com.duolingo"],"country": "us"}
Example output
A Google Play row, from a run on 2026-10-25 (icon URL cut):
{"status": "ok", "input": "com.duolingo", "store": "play", "appId": "com.duolingo", "country": "us","url": "https://play.google.com/store/apps/details?id=com.duolingo","name": "Duolingo: Learn Languages", "developer": "Duolingo", "category": "Education","rating": 4.75, "ratingCount": 51282112, "reviewCount": 966953, "price": 0, "currency": "USD", "free": true,"releaseDate": "2013-05-29", "lastUpdated": "2026-10-20", "version": null,"installs": 988483551, "installsText": "500,000,000+", "inAppPriceRange": "$0.99 - $239.99 per item","icon": "https://play-lh.googleusercontent.com/tw_coGKgk1K...","estimatedMonthlyDownloadsLow": 4238953, "estimatedMonthlyDownloadsHigh": 7872342,"estimatedMonthlyRevenueLow": 220320, "estimatedMonthlyRevenueHigh": 1227495, "estimateCurrency": "USD","estimateBasis": "installs","estimateNote": "Estimate: lifetime exact installs over app age, plus or minus 30 percent; revenue assumes 1.5 to 3.5 percent of downloads pay.","missing": [], "error": null, "fetchedAt": "2026-10-25T07:58:17.949Z"}
Google Play shows no version for apps whose version varies with the device, so version can be null there.
An App Store row from the same run (icon URL cut):
{"status": "ok", "input": "479516143", "store": "apple", "appId": "479516143", "country": "us","url": "https://apps.apple.com/us/app/id479516143","name": "Minecraft: Play with Friends!", "developer": "Mojang AB", "category": "Games","rating": 4.51, "ratingCount": 844029, "reviewCount": null, "price": 6.99, "currency": "USD", "free": false,"releaseDate": "2011-11-17", "lastUpdated": "2026-09-28", "version": "26.52","installs": null, "installsText": null, "inAppPriceRange": null,"icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/...","estimatedMonthlyDownloadsLow": 139228, "estimatedMonthlyDownloadsHigh": 232046,"estimatedMonthlyRevenueLow": 973204, "estimatedMonthlyRevenueHigh": 1622002, "estimateCurrency": "USD","estimateBasis": "ratings","estimateNote": "Estimate: 30 to 50 downloads per rating; revenue is downloads times the app price.","missing": [], "error": null, "fetchedAt": "2026-10-25T07:58:16.259Z"}
A free row for an app the store does not list:
{ "status": "not_found", "input": "com.nonexistent.zzzz.app", "store": "play", "appId": "com.nonexistent.zzzz.app","country": "gb", "error": "Google Play app com.nonexistent.zzzz.app is not listed in GB.", "missing": [] }
What it reads, and what it does not
It reads only public store sources whose robots.txt and terms allow it:
- The App Store side uses Apple's published iTunes lookup (
itunes.apple.com/lookup), many ids per request. - The Google Play side reads the app's public details page (
play.google.com/store/apps/details), which no robots.txt line covers.
It does not read Apple's web catalog API, Apple search pages or Google Play's internal RPC channel, because their robots.txt disallows them. That is why App Store rows have no review count, in-app price list or rating split.
Every run reads each host's robots.txt before anything else and skips a path it disallows, as RFC 9309 says. It sends one request at a time to each host, at least 1 second apart, and backs off when a store asks it to. That makes it about 1 Google Play app per second, and about 50 App Store apps per second. It needs no login, no proxy and no key.
If a store changes its format, a row that loses a paid field (name, developer, category, last update, price, rating count, rating, review count or installs) comes back as a free parse_error row.
The run fails with a message once more than 1 in 10 rows of a store are like that, so you never pay for blank details.
Google Play apps with no public ratings yet (new and early-access apps) also come back as free parse_error rows, because their page looks the same as a broken one; the error says so.
More Actors from OpenKrill
- Public Job Board Scraper: jobs from Greenhouse, Lever, Ashby, Workday and dozens more hiring systems in one schema.
- Need reviews too? Google Play & App Store Reviews returns review text, ratings and dates for the same apps.
Questions
Open an issue on the Actor's Issues tab; we answer within 2 working days.