Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Google Play Apps Scraper icon

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.

247 runs on Apify $0.00025 per Google Play app ($0.25 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust searchTerms, appIds, category (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export 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 forWhenPrice
Google Play appOne 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

FieldWhat it doesType
searchTermsWords 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
appIdsAndroid 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
categoryOptional. 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
countryTwo-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
languageTwo-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
maxItemsTotal 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
proxyUrlsLeave 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:

queryappIdtitledeveloperscoreratingsinstallspriceTextoffersIAPcontentRatingupdatedversionurlicon

Export 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 iconDeveloper & Research Tools

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.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

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.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

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.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

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.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

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.

2 use cases

See all 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.

InputSearch terms, package ids or Play links, and a store category
OutputOne row per app
Ceiling2,000 apps per run
Account neededNone, 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
}
FieldDefaultWhat it is
searchTermsbox starts at budget tracker, habit trackerWords or phrases, exactly as you would type them into Play. Up to 20.
appIdsnonePackage ids like com.whatsapp, or full Play links. Both forms in one list. Up to 500.
categorynoneA Play category such as FINANCE or GAME_PUZZLE, picked from the dropdown.
countrybox starts at us, and an empty box falls back to itThe storefront to read. Price, currency, install band, content rating and even whether the app exists all depend on it.
languagebox starts at en, and an empty box falls back to itThe language of the text. It changes no numbers.
maxItemsbox starts at 20Total apps for the run, up to 2,000.
proxyUrlsnoneOptional. 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"
}
FieldWhat it is
appIdThe Android package id. Stable, and the right key to join and dedupe on.
searchTypeHow this app was reached: search, appId or category. query holds the term, id or category behind it.
installsGoogle's band, like 1,000,000+. minInstalls is the same band as a number, realInstalls is Play's closer estimate.
score, scoreTextThe raw average and the rounded label Play prints. ratings counts stars, reviews counts written ones.
histogramStar counts one to five, so you can see the shape rather than just the mean.
priceIn whole currency units for the country you asked for, with priceText and free beside it.
offersIAP, inAppPurchaseRange, containsAdsThe monetisation labels off the listing. The range is null when Play shows none.
version, androidVersionnull on apps that ship a different build per device, which Play shows as varying.
availableFalse when the listing exists but the storefront has no offer for it.
screenshotsEvery 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.

RowHow to spot itCharged
An app_sample and _diagnostic both absentyes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

Filter on _sample and _diagnostic, not on recordType. The free sample row also carries recordType: "app", so a filter on that alone keeps it.

CodeWhat it means
BAD_INPUTSomething in the input could not be used. details says what to change.
NO_RESULTSPlay answered, and had nothing for that term or category.
NOT_FOUNDThat package id does not exist, or is not published in this country.
BLOCKEDPlay would not return a list for that search. Re-run it.
NETWORKPlay was unreachable or answered badly.
TIME_BUDGETThe run hit its time limit before reaching this app. Everything already delivered is complete.
PROXY_INPUT_ADJUSTEDA network setting in your input was not usable, so the run used its own.
CHARGE_ERRORA 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. realInstalls is 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.
  • version is null for 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 scrapedAt records 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 wantUse
App listings by keyword, category or package idThis one
The review text for those appsGoogle Play Reviews Scraper
The same job on the iOS App StoreApp Store Scraper
Which app names people search for over timeGoogle Trends Scraper
Search results rather than store listingsGoogle 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.