Google Play Store Scraper
Pricing
from $0.49 / 1,000 apps
Google Play Store Scraper
Scrape Google Play app data: ratings, installs, pricing, in-app purchase range, content rating, data safety and screenshots. 50+ fields, the only scraper with multi-country pricing in one run. Flat pricing, no start fee, no hidden per-event charges.
Pricing
from $0.49 / 1,000 apps
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share

Extract apps and their reviews from play.google.com at scale, in one run. App metadata, multi-country pricing, and full review histories including developer replies. No API key required.
Why this scraper?
๐ฏ Built for play.google.com
A dedicated global scraper tuned for play.google.com โ its categories, price formats and currency (USD), not a generic tool pointed at it.
๐ถ Structured pricing
Current price as a clean number in USD, plus discounts and previous prices where the source shows them. Items without a published price return null, never a guess.
๐ Full item content
Complete description and title for every record, with a direct link back to the source.
โญ Apps and reviews in one run
Search for 50 apps and pull their reviews in the same run. No chaining a second actor, no re-keying app IDs, one bill. Or run reviews on their own with mode: "reviews".
๐ฌ Developer replies
Every review carries the developer's reply text and reply date when one exists, plus the app version the review was written against. Other Play Store review scrapers return neither.
๐ Exact date windows
Ask for the last 7 days and you get the last 7 days โ all of them. Reviews are pulled newest-first and the scraper stops the moment it crosses your cutoff, so a date window is complete, not a sample of whatever fell inside a fixed page budget.
๐ No caps
No run limits, no review limits, no separate free-tier ceiling. Set the number you need.
๐งญ Ranking, not just metadata
Every app carries discoveryRank โ its position in the search results, top chart, developer catalogue or similar-apps cluster that produced it. That is the ASO signal most scrapers throw away.
๐ฌ Review aspects nobody else returns
About 29% of reviews carry Google's structured aspect ratings โ performance, usability, battery efficiency, ad frequency, named features. Returned as reviewCriteria. No other Google Play scraper exposes these.
๐ Permissions and related apps
Optional per-app enrichment: full Android permission groups, and the apps Google shows as related.
๐ Real top charts โ free, paid and grossing
All three Google Play charts, per category and per country, with the rank on every record. Top grossing is the revenue ranking โ the one that shows who is actually making money, not just who is getting installed.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | "search" | How to find apps. 'search' uses a keyword, 'apps' takes exact app IDs, 'developer' lists a developer's apps, 'collection' scrapes a top chart, 'startUrls' takes full Play Store URLs. |
searchTerm | string | "podcast" | Keyword to search the Play Store (used in 'search' mode). Example: "podcast", "photo editor". |
appIds | array | ["com.spotify.music"] | Exact Google Play app IDs or full app URLs (used in 'apps' mode). Example: com.spotify.music |
developerId | string | (empty) | Developer ID or name to list all of a developer's apps (used in 'developer' mode). Example: "Spotify AB". |
collection | string | "apps" | Deprecated shortcut โ use categoryId and chartType. |
chartType | string | "topFree" | topFree, topPaid or topGrossing. Top grossing is the revenue ranking. |
categoryId | string | (empty) | Restrict browsing to a category. Examples: GAME_ACTION, GAME_PUZZLE, MUSIC_AND_AUDIO, PRODUCTIVITY, SOCIAL, FINANCE, TOOLS, PHOTOGRAPHY. Leave empty for the overall top chart. |
startUrls | array | (empty) | Full Google Play app detail URLs (used in 'startUrls' mode). |
country | string | "US" | Storefront country. Drives currency, ratings and localized metadata. |
language | string | (empty) | Two-letter UI language override. Leave empty to use the country's default language. |
priceCountries | array | (empty) | Add country codes to fetch each app's price in multiple storefronts in one run (added to a priceByCountry field). Example: ["US","GB","JP","BR"]. No competitor offers this. |
maxResults | integer | 5 | Maximum number of apps to return. |
priceFilter | string | "all" | Filter by price. |
minPrice | integer | (empty) | Minimum price in the storefront currency (paid apps). |
maxPrice | integer | (empty) | Maximum price in the storefront currency. |
minScore | integer | (empty) | Minimum star rating (0โ5). Accepts decimals. Apps with no rating are excluded when set. |
minInstalls | integer | (empty) | Minimum number of installs. |
contentRatings | array | (empty) | Keep only apps whose content rating contains one of these terms (e.g. Everyone, Teen, Mature). Matches across ESRB/PEGI/USK. |
genres | array | (empty) | Keep only apps whose genre contains one of these terms (e.g. Music, Action, Productivity). |
adsFilter | string | "all" | Filter by whether the app contains ads. |
iapFilter | string | "all" | Filter by whether the app offers in-app purchases. |
includePermissions | boolean | false | Add the Android permissions each app requests, grouped by category. |
includeSimilarApps | boolean | false | Add a similarApps list of related app IDs to every app record. |
customMapFunction | string | (empty) | JavaScript applied to every record before saving. Return the transformed record, or null to drop it. |
includeReviews | boolean | false | Fetch reviews for every app the run returns. Works with every mode. |
maxReviewsPerApp | integer | 100 | Maximum reviews per app. No account-level cap โ set this as high as you need. |
sortReviewsBy | string | "newest" | newest, mostRelevant or rating. Forced to newest when a date filter is set, because that is the only order in which a date window can be pulled completely. |
reviewDaysOld | integer | (empty) | Only reviews posted within this many days. The pull stops at the cutoff, so the window is exact. |
reviewsSince | string | (empty) | Only reviews on or after this date (YYYY-MM-DD). Overrides reviewDaysOld. |
reviewRatings | array | (empty) | Keep only these star ratings, e.g. ["1","2"] for complaints only. |
reviewKeywords | array | (empty) | Keep only reviews whose text contains one of these words, case-insensitive. |
reviewsUntil | string | (empty) | Only reviews on or before this date (YYYY-MM-DD). Combine with reviewsSince for a closed window. |
reviewReplyFilter | string | "all" | all, with, or without. without surfaces complaints that were never answered. |
minReviewLength | integer | (empty) | Keep only reviews of at least this many characters. Filters out one-word reviews. |
reviewsWithReplyOnly | boolean | false | Deprecated โ use reviewReplyFilter. Kept so existing runs keep working. |
reviewAppVersions | array | (empty) | Keep only reviews written against these app versions. |
minThumbsUp | integer | (empty) | Keep only reviews with at least this many helpful votes. |
proxyConfiguration | object | {"useApifyProxy": false} | Google Play is reachable without a proxy. Proxy is optional and off by default โ you do not pay any proxy or compute cost; only per result. |
Output schema
Every field below is present on every record. Fields the source does not publish for a given item are returned as null rather than omitted.
| Field | Type | Description |
|---|---|---|
appId | string | App id. |
url | string | Direct link to the item. |
title | string | Item title as published. |
summary | string | Summary. |
descriptionHtml | string | Full item description in HTML. |
descriptionText | string | Description text. |
descriptionMarkdown | string | Description markdown. |
developer | string | Developer. |
developerId | string | Developer id. |
developerWebsite | string | Developer website. |
genre | string | Genre. |
genreId | string | Genre id. |
additionalGenres | array | Additional genres. |
additionalGenreIds | array | Additional genre ids. |
icon | string | Icon. |
headerImage | string | Header image. |
screenshots | array | Screenshots. |
screenshotCount | number | Screenshot count. |
video | string | Video. |
videoImage | string | Video image. |
score | number | Score. |
scoreText | string | Score text. |
ratings | number | Ratings. |
reviews | number | Reviews. |
histogram.1 | number | 1. |
histogram.2 | number | 2. |
histogram.3 | number | 3. |
histogram.4 | number | 4. |
histogram.5 | number | 5. |
price | number | Current price (null when no price is published). |
priceText | string | Price text. |
currency | string | Currency code of the price. |
free | boolean | Free. |
offersIAP | boolean | Offers iap. |
inAppPurchases | string | In app purchases. |
iapMinPrice | number | Iap min price. |
iapMaxPrice | number | Iap max price. |
iapCurrency | string | Iap currency. |
adSupported | boolean | Ad supported. |
containsAds | boolean | Contains ads. |
installs | string | Installs. |
minInstalls | number | Min installs. |
realInstalls | number | Real installs. |
released | string | Released. |
updated | string | Updated. |
updatedTimestamp | number | Updated timestamp. |
version | string | Version. |
targetSdkVersion | number | Target sdk version. |
minSdkVersion | number | Min sdk version. |
minAndroidVersion | string | Min android version. |
contentRating | string | Content rating. |
contentRatingIcon | string | Content rating icon. |
privacyPolicy | string | Privacy policy. |
dataSafety.dataShared | string | Data shared. |
dataSafety.dataCollected | string | Data collected. |
dataSafety.securityPractices | array | Security practices. |
country | string | Country. |
language | string | Language. |
scrapedAt | string | Timestamp when this record was scraped. |
App enrichment fields
| Field | Type | Description |
|---|---|---|
recentChanges | string | The app's "What's New" release notes, as Markdown. null when the developer publishes none. |
discoveryRank | integer | 1-based position in the list that produced this app โ search results, top chart, developer catalogue or similar-apps cluster. |
discoveryMode | string | Which mode produced the app: search, apps, developer, collection, startUrls or similar. |
chartType | string | In collection mode, which chart the app was ranked in: topFree, topPaid or topGrossing. null in other modes. |
permissions | array | Only with includePermissions. Objects of {group, permissions[]} โ e.g. {"group": "Location", "permissions": ["precise location (GPS and network-based)"]}. |
permissionCount | integer | Only with includePermissions. Total permissions requested across all groups. |
similarApps | array | Only with includeSimilarApps. App IDs Google shows as related on the detail page. |
Review records
Review records carry itemType: "review"; app records carry itemType: "app". Both land in the same dataset, so a single run gives you apps and their reviews together โ filter on itemType to split them.
| Field | Type | Description |
|---|---|---|
itemType | string | Always "review" on review records. |
reviewId | string | Google's unique review identifier. |
appId | string | Package name of the app the review belongs to. |
appTitle | string | App title. null in reviews mode, where no app record is fetched. |
rating | integer | Star rating, 1 to 5. |
text | string | Review body. null when the user left a rating with no text. |
authorName | string | Reviewer's display name as published by Google. |
authorAvatarUrl | string | Reviewer's public avatar image URL. |
reviewDate | string | Date posted, YYYY-MM-DD. |
reviewDateISO | string | Full ISO 8601 timestamp of posting. |
thumbsUpCount | integer | Helpful votes. 0 when nobody has voted. |
reviewAppVersion | string | App version the review was written against (null on a small share of records). |
reviewCriteria | array | Google's structured aspect ratings for this review โ objects of {criteria, criteriaKey, rating}, e.g. {"criteria": "battery efficiency", "rating": 3}. Present on roughly 29% of reviews. Empty array when Google tags none. |
textLength | integer | Character count of the review text. 0 for rating-only reviews. |
developerReplied | boolean | Whether the developer replied to this review. |
developerReplyText | string | The developer's reply, verbatim. null when there is no reply. |
developerReplyDate | string | Date of the reply, YYYY-MM-DD. null when there is no reply. |
developerReplyDateISO | string | Full ISO 8601 timestamp of the reply. |
country | string | Storefront the review was pulled from. |
language | string | UI language the review was pulled under. |
reviewUrl | string | Direct link to the review on Google Play. |
source | string | Always play.google.com. |
scrapedAt | string | ISO timestamp of extraction. |
Reviewer Google account IDs are exposed by the source but are never included in the output.
Example review record
{"itemType": "review","reviewId": "eeadc6e6-1b5d-4d1c-889a-92f9207f04e1","appId": "com.spotify.music","appTitle": "Spotify: Music and Podcasts","rating": 1,"text": "Playlists keep disappearing after the last update and shuffle ignores my settings.","authorName": "Naitik","authorAvatarUrl": "https://play-lh.googleusercontent.com/a/ACg8ocJdKJQSkJl8sCFmylTFcYRhXC4PRQbjZF8KA3Xpagu1WXNeaw=mo","reviewDate": "2026-07-12","reviewDateISO": "2026-07-12T16:50:54.000Z","thumbsUpCount": 34,"reviewAppVersion": "9.1.60.1970","developerReplied": true,"developerReplyText": "Hi. Thanks for sharing your experience. Our catalog depends on permissions from rights holders, and we're passing this on to the team.","developerReplyDate": "2026-07-12","developerReplyDateISO": "2026-07-12T19:39:12.000Z","country": "US","language": "en","reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=eeadc6e6-1b5d-4d1c-889a-92f9207f04e1","source": "play.google.com","scrapedAt": "2026-07-13T17:03:54.737Z"}
Example record
{"appId": "com.whatsapp","url": "https://play.google.com/store/apps/details?id=com.whatsapp","title": "WhatsApp Messenger","summary": "Simple. Reliable. Private.","descriptionHtml": "WhatsApp from Meta is a FREE messaging and video calling app. Itโs used by over 2B people in more than 180 countries. Itโs simple, reliable, and private, so you can easily keep in touch with your frie โฆ","descriptionText": "WhatsApp from Meta is a FREE messaging and video calling app. Itโs used by over 2B people in more than 180 countries. Itโs simple, reliable, and private, so you can easily keep in touch with your frie โฆ","descriptionMarkdown": "WhatsApp from Meta is a FREE messaging and video calling app. Itโs used by over 2B people in more than 180 countries. Itโs simple, reliable, and private, so you can easily keep in touch with your frie โฆ","developer": "WhatsApp LLC","developerId": "WhatsApp LLC","developerWebsite": "http://www.whatsapp.com/","genre": "Communication","genreId": "COMMUNICATION","additionalGenres": [],"additionalGenreIds": [],"icon": "https://play-lh.googleusercontent.com/Gqxk4T0uZsDwFp07DE-508hkyvcNmgFuRwPiwTEfF7D7OzGv1FdHDzEyMxNsSBZLOJlGpe3ULvVM2RgrRAlBqA","headerImage": "https://play-lh.googleusercontent.com/eLX_xvno2Kq_zvpkkP8yPBRfo2TEQSrv7m7WrQ6xloPsDRJ85XQ28kGYuoR-_EBWh2Uoq2GMlDvlBEIxHRyhuSg","screenshots": ["https://play-lh.googleusercontent.com/GQF4h3VL-kklOrVS_f1QRAJJZa2zQyVNcFbKdOIkvI_Pcu1op0Sy3uiryiTxpdcCDs7vEDA9eq0eWbxo0f โฆ","https://play-lh.googleusercontent.com/Q042rTbs53V_jW_c5fMqnNLCf-FBKiO2KiFKJJACa65oMCkaxqDSFKPQ7TH8nYetS-js-fMV7ptXSsF-aC โฆ","https://play-lh.googleusercontent.com/EefxorXU8H0etXPHJsq4Nao8Npj7FqVT_h5rumnUS9KvIN7i-3WRotwduyEGi1Zg33BFHcuYRjQ0i01I3z โฆ","https://play-lh.googleusercontent.com/ZXrWYqhvVeKjNeYwIfLWBcjTXSLG_MuRtvSJ3ve51Kbibq7FHIOJGN5OsyAv7Pj7Ks9D-kbzGQnrG7NR04 โฆ"],"screenshotCount": 9,"video": null,"videoImage": null,"score": 4.65472,"scoreText": "4.7","ratings": 237692131,"reviews": 1962829,"histogram": {"1": 9142122,"2": 2860732,"3": 7824907,"4": 21269757,"5": 196594562},"price": 0,"priceText": "Free","currency": "USD","free": true,"offersIAP": true,"inAppPurchases": "$0.40 - $199.99 per item","iapMinPrice": 0.4,"iapMaxPrice": 199.99,"iapCurrency": "$","adSupported": false,"containsAds": false,"installs": "10,000,000,000+","minInstalls": 10000000000,"realInstalls": 12052044334,"released": "Oct 18, 2010","updated": "Jun 25, 2026","updatedTimestamp": 1782365270,"version": null,"targetSdkVersion": 34,"minSdkVersion": null,"minAndroidVersion": null,"contentRating": "Everyone","contentRatingIcon": "https://play-lh.googleusercontent.com/IciOnDFecb5Xt50Q2jlcNC0LPI7LEGxNojroo-s3AozcyS-vDCwtq4fn7u3wZmRna8OewG9PBrWC-i7i","privacyPolicy": "https://www.whatsapp.com/legal/privacy-policy","dataSafety": {"dataShared": "Learn more about how developers declare sharing","dataCollected": "Location, Personal info and 5 others","securityPractices": ["Data is encrypted in transit","You can request that data be deleted"]},"country": "US","language": "en","scrapedAt": "2026-06-27T05:32:58.615Z"}
Examples
Search for fitness:
{"searchTerm": "fitness","maxResults": 100}
Cap the price:
{"searchTerm": "fitness","maxResults": 100,"maxPrice": 39.99}
Scrape a specific search URL:
{"startUrls": [{"url": "https://www.play.google.com/"}],"maxResults": 200}
Daily monitoring (run on a schedule):
{"searchTerm": "fitness","maxResults": 500}
Schedule this input to run once a day in the Apify Scheduler to track prices, stock and new items over time.
Every 1-star review of a competitor app, last 30 days, with the developer's replies:
{"mode": "reviews","appIds": ["com.spotify.music"],"reviewRatings": ["1"],"reviewDaysOld": 30,"maxReviewsPerApp": 5000}
Search a category and pull each app's recent reviews in the same run:
{"mode": "search","searchTerm": "meditation","maxResults": 25,"includeReviews": true,"maxReviewsPerApp": 200,"reviewDaysOld": 14}
Find out what users say about crashes since the last release:
{"mode": "reviews","appIds": ["com.spotify.music"],"reviewKeywords": ["crash", "freeze", "bug"],"reviewAppVersions": ["9.1.60.1970"],"maxReviewsPerApp": 1000}
Top grossing finance apps in Japan:
{"mode": "collection","chartType": "topGrossing","categoryId": "FINANCE","country": "JP","maxResults": 50}
Audit how a competitor handles complaints:
{"mode": "reviews","appIds": ["com.spotify.music"],"reviewsWithReplyOnly": true,"reviewRatings": ["1", "2"],"reviewsSince": "2026-01-01","maxReviewsPerApp": 2000}
๐ฐ Pricing
Two separate rates. You only pay for records actually saved โ filtered-out apps and reviews are never charged, and failed retries are never charged.
Apps โ $0.69 per 1,000
| Apps | Cost |
|---|---|
| 100 | ~$0.07 |
| 1,000 | ~$0.69 |
| 10,000 | ~$6.90 |
| 100,000 | ~$69 |
Subscription tiers lower this to $0.39 per 1,000 at the highest tier.
Reviews โ $0.05 per 1,000
| Reviews | Cost |
|---|---|
| 1,000 | ~$0.05 |
| 10,000 | ~$0.50 |
| 100,000 | ~$5.00 |
| 1,000,000 | ~$50 |
Flat $0.05 per 1,000 on every tier โ no subscription needed to get the best rate.
Other Google Play review scrapers charge around $0.13 per 1,000 and cap free accounts at 500 reviews. There is no cap here.
Use Max results and Max reviews per app to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 apps | under 1 minute |
| 1,000 apps | 2โ4 minutes |
| 1,000 reviews (one app) | under 30 seconds |
| 10,000 reviews (one app) | 2โ4 minutes |
Known limitations
- Google no longer offers a server-side rating filter on reviews.
reviewRatingsandreviewKeywordsare applied after fetching โ no scraper can do better, but you are only billed for the reviews that match. reviewAppVersionis absent on a small share of reviews, mostly older ones.- Developer replies are uncommon in absolute terms โ typically under 10% of reviews, concentrated on low ratings.
- Reviews are storefront-scoped:
countryandlanguagedetermine which pool you see. To cover several markets, run once per storefront. - Very large result sets are bounded by the source's own paging limits.
reviewCriteriais present on roughly 29% of reviews โ Google tags them selectively. An empty array is correct, not a failure.- Developer contact emails are published by Google but are not returned. A large share are personal addresses, and harvesting them at scale is not something we do.
Technical details
- Source: play.google.com โ app metadata and reviews
- Coverage: everything the public store exposes, filterable via the input parameters above
- Storefronts: 55 countries; reviews and pricing are pulled per storefront
- Retry: automatic retry on network errors with exponential backoff
Need a custom scraper?
Unfenced Group builds Apify actors for any website โ for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results โ we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl