Google Play Store Scraper avatar

Google Play Store Scraper

Pricing

Pay per event

Go to Apify Store
Google Play Store Scraper

Google Play Store Scraper

Scrape Google Play app data: keyword search, app details, top charts, developer portfolios and similar apps. Every record carries 57 fields — installs, ratings histogram, screenshots, IAP range, developer legal contact, permissions, data safety and reviews. No headless browser.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Crikit

Crikit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Pull Android app data straight from the Google Play Store — by keyword, by package name, off the top charts, out of a developer's portfolio, or from Google's own "similar apps" graph. Every app comes back as one flat row with 57 fields: installs, ratings histogram, screenshots, in-app purchase range, release and update dates, content rating, and the publisher's contact and legal details.

No headless browser, no API key, no login. Roughly 6 apps per second at default concurrency.

What it does

Pick a mode, fill in the one list it reads, and run:

ModeReadsReturns
SearchsearchTermsApps matching each keyword, in store rank order
App detailsappIdsThe full record for package names or Play Store URLs you already have
Top chartscollection + categoryA ranked chart — Top free, Top paid or Top grossing, overall or per category
DeveloperdeveloperIdsEvery app a publisher has on the store
SimilarappIdsThe apps Google shows as similar to yours — your real competitive set

Any mode can be enriched per app with user reviews, declared Android permissions, the Data Safety disclosure, and the similar apps list.

Fields

Every row carries the same keys, so a dataset mixing modes still exports to one clean CSV.

Identity appId · url · title · summary · description · descriptionHtml Media icon · headerImage · screenshots · video · videoImage · previewVideo Ratings score · scoreText · ratingsCount · reviewsCount · histogram (1–5 star counts) Installs installs · minInstalls · maxInstalls Money price · currency · priceText · free · originalPrice · discountEndDate · offersIap · iapRange Availability available · preregister · earlyAccessEnabled · isAvailableInPlayPass Taxonomy genre · genreId · categories Publisher developer · developerId · developerInternalId · developerEmail · developerWebsite · developerAddress · developerLegalName · developerLegalEmail · developerLegalAddress · developerLegalPhone · privacyPolicy Compliance contentRating · contentRatingDescription · adSupported Release released · updatedTimestamp · updatedAt (ISO) · version · recentChanges · androidVersion · androidVersionText · androidMaxVersion Provenance source · searchTerm · collection · category · developerQuery · similarTo · rank Enrichment (opt-in) permissions · dataSafety · similarApps · reviews Run context country · language · scrapedAt

rank is the app's position in the result Google returned, preserved per keyword or chart — which is what makes this usable for ASO tracking rather than just a list of apps.

Example input

Keyword research with full records and 50 reviews each:

{
"mode": "search",
"searchTerms": ["habit tracker", "budget planner"],
"maxItems": 100,
"fullDetail": true,
"maxReviewsPerApp": 50,
"country": "us",
"language": "en"
}

The top 200 free finance apps in Germany:

{
"mode": "topCharts",
"collection": "TOP_FREE",
"category": "FINANCE",
"maxItems": 200,
"country": "de",
"language": "de"
}

Your competitive set, with permissions and data-safety disclosures:

{
"mode": "similar",
"appIds": ["com.myfitnesspal.android"],
"maxItems": 50,
"includePermissions": true,
"includeDataSafety": true
}

Example output (trimmed)

{
"appId": "com.spotify.music",
"url": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us",
"source": "search",
"searchTerm": "music streaming",
"rank": 1,
"title": "Spotify: Music and Podcasts",
"score": 4.32,
"ratingsCount": 34781234,
"histogram": { "1": 1820331, "2": 512980, "3": 1104772, "4": 3241009, "5": 28102142 },
"installs": "1,000,000,000+",
"minInstalls": 1000000000,
"free": true,
"offersIap": true,
"iapRange": "$0.99 - $199.99 per item",
"genre": "Music & Audio",
"developer": "Spotify AB",
"developerEmail": "support@spotify.com",
"developerLegalName": "Spotify AB",
"contentRating": "Teen",
"adSupported": true,
"released": "Oct 6, 2011",
"updatedAt": "2026-08-04T09:12:18.000Z",
"version": "9.0.42.123",
"country": "us",
"language": "en"
}

Things worth knowing

Search returns 22–30 apps per keyword. That is Google's own limit — the store renders a single results cluster and there is no deeper page to fetch, for anyone. For more volume, pass more keywords, or use Top charts, which paginates properly (200+ apps in one call).

fullDetail is on by default, and it is the point. With it off you get only the 12 fields the listing page carries — title, ID, icon, developer, price, score, summary. With it on, each app is fetched individually for the complete 57-field record. Turn it off when you only need a ranked list of package names and want it fast.

maxItems is a hard cap on billable rows across the whole run, counted after de-duplication. Set it to 0 to take everything the store returns.

Nothing charges except a real app record. If a query legitimately returns nothing, the run still writes one row explaining what happened, free. If a single app 404s mid-run, that failure is written as its own free row and the rest of the run continues. You are never billed for a miss.

Country changes the answer. Prices, availability and chart order are all per-store. Set both country and language; a mismatched pair returns English copy with local pricing.

Proxy. Google Play serves datacenter IPs the same payload as residential ones, so the default Apify datacenter proxy is all this needs. Residential is available but is not worth the cost here.

Reliability

Each app lookup is retried with exponential backoff on transient failures and abandoned immediately on a genuine 404. Enrichment calls (permissions, data safety, similar, reviews) can never sink a record — they fail to null and the app row is still written. A RUN_SUMMARY record in the run's key-value store reports what was requested, what was written, and every query that failed.