Google Play Apps Scraper
Scrape Google Play apps by keyword, category or package ID: title, developer, rating, installs, price, version, icon. $0.25 per 1,000 apps.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchTerms,appIds,category(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00025 per Google Play app = $0.25 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Google Play app | One Google Play app listing successfully saved to the dataset. Sample and diagnostic rows are never charged. | $0.00025 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-15, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchTerms | Words or phrases to search the Google Play Store for, exactly as you would type them into the store search box. Up to 20 per run. Each term contributes its share of the row limit below. | array |
appIds | Android package ids such as com.whatsapp, or full Play links such as https://play.google.com/store/apps/details?id=com.whatsapp. You can mix both forms in the same list. These are fetched before anything else, one row each. | array |
category | Optional. Returns the apps Google Play features on that category page - its top free, top grossing, top paid and trending shelves - in Play's own order. Leave empty if you are searching or passing app ids. | string |
country | Two-letter country code for the storefront to read, for example us, gb, de, in, br. Google Play is a store per country: price, currency, install band, content rating and even whether the app exists depend on this. | string |
language | Two-letter language code for the text, for example en, de, es, pt, fr. Controls the title, summary, description and changelog. It does not change any of the numbers. | string |
maxItems | Total number of apps to return. App ids are taken first, then whatever budget is left is split evenly between the search terms and the category. Keep it low while you are testing - you pay per row. | integer |
proxyUrls | Leave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port. | array |
What you get
A structured dataset — each result includes fields like:
queryappIdtitledeveloperscoreratingsinstallspriceTextoffersIAPcontentRatingupdatedversionurliconExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Google Play Apps Scraper: app listings by keyword, category or package id
Give it search terms, Android package ids, Play links or a store category, and get one row per app: title, developer, rating, ratings count, price, in-app purchase range, install band, content rating, version, last update, icon and screenshots. No Google account and no API key.
Two things to know before you start. Install counts are Google's own band, so you get 1,000,000+ and never an exact figure, though realInstalls carries Play's closer estimate where it publishes one. And a search term reads the first page of results, which is roughly the screenful a person sees, not the whole catalogue.
| Input | Search terms, package ids or Play links, and a store category |
| Output | One row per app |
| Ceiling | 2,000 apps per run |
| Account needed | None, and no Google API key |
| Price | $0.25 per 1,000 apps, flat on every plan |
🔍 What Google Play Apps Scraper does
Three ways in, and you can mix them in one run.
Search terms work the way the store's own search box does. Type budget tracker and you get the apps Play puts in front of somebody who typed that.
Package ids or Play links go straight to the listing. com.whatsapp and https://play.google.com/store/apps/details?id=com.whatsapp both work, in the same list.
A store category returns what Play features on that category page: its top free, top grossing, top paid and trending shelves, in Play's own order.
Whichever way you came in, every app is then read from its own listing, so the row is the same shape each time. Package ids are fetched first and the rest of your row budget is split evenly between the search terms and the category, so five terms and 50 rows gives ten of each rather than fifty of the first.
📥 What you give it
{
"searchTerms": ["budget tracker"],
"appIds": ["com.whatsapp"],
"country": "us",
"language": "en",
"maxItems": 50
}
| Field | Default | What it is |
|---|---|---|
searchTerms | box starts at budget tracker, habit tracker | Words or phrases, exactly as you would type them into Play. Up to 20. |
appIds | none | Package ids like com.whatsapp, or full Play links. Both forms in one list. Up to 500. |
category | none | A Play category such as FINANCE or GAME_PUZZLE, picked from the dropdown. |
country | box starts at us, and an empty box falls back to it | The storefront to read. Price, currency, install band, content rating and even whether the app exists all depend on it. |
language | box starts at en, and an empty box falls back to it | The language of the text. It changes no numbers. |
maxItems | box starts at 20 | Total apps for the run, up to 2,000. |
proxyUrls | none | Optional. Your own servers, used exactly as given. |
One storefront per run. country is a single code, so comparing prices across five markets means five runs, one per market.
An unrecognised category is dropped rather than refused. Alongside search terms or package ids you get a BAD_INPUT notice and the rest of the run still happens. On its own, the run has nothing left to do and returns the free sample row, which is easy to misread as a failure.
📤 What you get back
A real row from a recent run, with the long text and links trimmed:
{
"ok": true,
"recordType": "app",
"query": "budget tracker",
"searchType": "search",
"appId": "com.thebudgetingapp.thebudgetingapp",
"url": "https://play.google.com/store/apps/details?id=com.thebudgetingapp...",
"title": "Budgeting App - Spend Tracker",
"summary": "Budget planner and expense tracker to help manage your personal finance.",
"description": "The Budgeting App is a simple and easy-to-use budget planner and daily expense tracker designed to simplify your personal finance...",
"descriptionHtml": "The Budgeting App is a simple and easy-to-use budget planner and daily expense tracker...",
"developer": "The Budgeting App",
"developerId": "4918164273133767251",
"developerUrl": "https://play.google.com/store/apps/developer?id=4918164273133767251",
"developerLegalName": "THE BUDGETING COMPANY LIMITED",
"developerEmail": "[email protected]",
"developerWebsite": "https://thebudgeting.app",
"developerAddress": "Suite 15021, Level 1, 6 Johnsonville Road\nJohnsonville 6037\nNew Zealand",
"privacyPolicy": "https://thebudgeting.app/privacy-policy",
"genre": "Finance",
"genreId": "FINANCE",
"score": 4.71,
"scoreText": "4.7",
"ratings": 4207,
"reviews": 100,
"histogram": { "1": 167, "2": 0, "3": 83, "4": 377, "5": 3573 },
"installs": "100,000+",
"minInstalls": 100000,
"realInstalls": 226245,
"price": 0,
"currency": "USD",
"priceText": "Free",
"free": true,
"offersIAP": true,
"inAppPurchaseRange": "$2.99 - $89.99 per item",
"containsAds": false,
"adsLabel": null,
"contentRating": "Everyone",
"contentRatingDescription": null,
"released": "Aug 13, 2022",
"releasedAt": "2022-08-14T04:31:42.000Z",
"updated": "2026-09-11T07:25:11.000Z",
"updatedText": "Sep 11, 2026",
"recentChanges": "- Budget home screen widget\n- Tracker insights - see when you'll get there...",
"version": "7.2.2",
"androidVersion": "11",
"androidMinSdk": 36,
"icon": "https://play-lh.googleusercontent.com/yIlsuOo3M2rthxd8QputTbLqQVqW0nMa...",
"headerImage": "https://play-lh.googleusercontent.com/BESOXa68gKo6WUQAPsCa-gFs24X18cy0...",
"screenshots": ["https://play-lh.googleusercontent.com/fduMeD1CdniW-mRkz76TN3iC5Xtl..."],
"video": null,
"topChartRank": null,
"available": true,
"country": "us",
"language": "en",
"scrapedAt": "2026-09-21T01:23:09.777Z"
}
| Field | What it is |
|---|---|
appId | The Android package id. Stable, and the right key to join and dedupe on. |
searchType | How this app was reached: search, appId or category. query holds the term, id or category behind it. |
installs | Google's band, like 1,000,000+. minInstalls is the same band as a number, realInstalls is Play's closer estimate. |
score, scoreText | The raw average and the rounded label Play prints. ratings counts stars, reviews counts written ones. |
histogram | Star counts one to five, so you can see the shape rather than just the mean. |
price | In whole currency units for the country you asked for, with priceText and free beside it. |
offersIAP, inAppPurchaseRange, containsAds | The monetisation labels off the listing. The range is null when Play shows none. |
version, androidVersion | null on apps that ship a different build per device, which Play shows as varying. |
available | False when the listing exists but the storefront has no offer for it. |
screenshots | Every screenshot on the listing, in order. The row above has 24 and shows the first. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Charged |
|---|---|---|
| An app | _sample and _diagnostic both absent | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Filter on _sample and _diagnostic, not on recordType. The free sample row also carries recordType: "app", so a filter on that alone keeps it.
| Code | What it means |
|---|---|
BAD_INPUT | Something in the input could not be used. details says what to change. |
NO_RESULTS | Play answered, and had nothing for that term or category. |
NOT_FOUND | That package id does not exist, or is not published in this country. |
BLOCKED | Play would not return a list for that search. Re-run it. |
NETWORK | Play was unreachable or answered badly. |
TIME_BUDGET | The run hit its time limit before reaching this app. Everything already delivered is complete. |
PROXY_INPUT_ADJUSTED | A network setting in your input was not usable, so the run used its own. |
CHARGE_ERROR | A charge could not be recorded. The run stops handing over rows rather than continuing quietly. |
▶️ How to run it
1. Open Google Play Apps Scraper and click Try for free. 2. Put your terms into Search terms, or package ids into App IDs or Play links. Delete the examples first. 3. Set Country to the storefront you care about, and Maximum rows. Start around 20. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
💰 How much does it cost?
$0.25 per 1,000 apps. Flat on every Apify plan, no volume tiers.
One row is one app. An app that turns up under two of your search terms is fetched and counted once. Sample rows, diagnostic rows, a term that matches nothing and a package id that does not exist are all free.
💡 What people use it for
- Watching a category shelf week by week to see which apps climb and which drop off.
- Pulling the twenty apps that answer a search term, then reading their ratings, install bands and
in-app purchase ranges side by side before building something in that space.
- Checking how an app is priced across markets by running the same package id per
country. - Tracking a competitor's release notes and version numbers with a scheduled run on its package id.
- Collecting icons, screenshots and store text for a competitive teardown.
🚧 What it does not do
- No reviews. Ratings, the count and the star histogram are here, but review text is a different
actor, linked below.
- Install counts are a band.
1,000,000+is what Play publishes.realInstallsis its own
estimate and is not an exact number either.
- A search reads one page per term, so it is the front of the results, not everything Play would
ever show for it.
- A category returns the featured shelves, which is what that page shows, not every app filed
under it.
- One storefront per run. Five markets means five runs.
versionisnullfor apps that vary by device, because the listing says so rather than
giving a number.
- Rows are a snapshot. Ratings, prices and rankings move daily, and
scrapedAtrecords when the
row was read.
- Developer fields are whatever the developer filled in. An email or a website can be missing or
stale, and the address is free text.
🧭 Which app scraper do you need?
| If you want | Use |
|---|---|
| App listings by keyword, category or package id | This one |
| The review text for those apps | Google Play Reviews Scraper |
| The same job on the iOS App Store | App Store Scraper |
| Which app names people search for over time | Google Trends Scraper |
| Search results rather than store listings | Google Search Results Scraper |
❓ Questions people ask
Do I need a Google account or a Play API key? No. Nothing to sign up for and no quota.
Can I get the exact install count? No, and nobody can. Play publishes a band. realInstalls is the closest number it gives out.
Why did a package id return nothing? Usually it is not published in the country you asked for. You get a NOT_FOUND row saying so, and it costs nothing.
How many apps does one search term return? Whatever fits on Play's first page of results for it, capped by your share of maxItems.
Can I run it on a schedule? Yes. appId is stable, so diffing runs on it shows what changed in rating, price or version.
Is this legal? These are public store listings. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the term or package id and the run ID. The errorCode and details on the diagnostic row usually name the problem on their own.