Google Play Store Scraper avatar

Google Play Store Scraper

Pricing

from $0.49 / 1,000 apps

Go to Apify Store
Google Play Store Scraper

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

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

0

Monthly active users

8 days ago

Last modified

Categories

Share

Google Play Store Scraper

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.

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

ParameterTypeDefaultDescription
modestring"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.
searchTermstring"podcast"Keyword to search the Play Store (used in 'search' mode). Example: "podcast", "photo editor".
appIdsarray["com.spotify.music"]Exact Google Play app IDs or full app URLs (used in 'apps' mode). Example: com.spotify.music
developerIdstring(empty)Developer ID or name to list all of a developer's apps (used in 'developer' mode). Example: "Spotify AB".
collectionstring"apps"Deprecated shortcut โ€” use categoryId and chartType.
chartTypestring"topFree"topFree, topPaid or topGrossing. Top grossing is the revenue ranking.
categoryIdstring(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.
startUrlsarray(empty)Full Google Play app detail URLs (used in 'startUrls' mode).
countrystring"US"Storefront country. Drives currency, ratings and localized metadata.
languagestring(empty)Two-letter UI language override. Leave empty to use the country's default language.
priceCountriesarray(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.
maxResultsinteger5Maximum number of apps to return.
priceFilterstring"all"Filter by price.
minPriceinteger(empty)Minimum price in the storefront currency (paid apps).
maxPriceinteger(empty)Maximum price in the storefront currency.
minScoreinteger(empty)Minimum star rating (0โ€“5). Accepts decimals. Apps with no rating are excluded when set.
minInstallsinteger(empty)Minimum number of installs.
contentRatingsarray(empty)Keep only apps whose content rating contains one of these terms (e.g. Everyone, Teen, Mature). Matches across ESRB/PEGI/USK.
genresarray(empty)Keep only apps whose genre contains one of these terms (e.g. Music, Action, Productivity).
adsFilterstring"all"Filter by whether the app contains ads.
iapFilterstring"all"Filter by whether the app offers in-app purchases.
includePermissionsbooleanfalseAdd the Android permissions each app requests, grouped by category.
includeSimilarAppsbooleanfalseAdd a similarApps list of related app IDs to every app record.
customMapFunctionstring(empty)JavaScript applied to every record before saving. Return the transformed record, or null to drop it.
includeReviewsbooleanfalseFetch reviews for every app the run returns. Works with every mode.
maxReviewsPerAppinteger100Maximum reviews per app. No account-level cap โ€” set this as high as you need.
sortReviewsBystring"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.
reviewDaysOldinteger(empty)Only reviews posted within this many days. The pull stops at the cutoff, so the window is exact.
reviewsSincestring(empty)Only reviews on or after this date (YYYY-MM-DD). Overrides reviewDaysOld.
reviewRatingsarray(empty)Keep only these star ratings, e.g. ["1","2"] for complaints only.
reviewKeywordsarray(empty)Keep only reviews whose text contains one of these words, case-insensitive.
reviewsUntilstring(empty)Only reviews on or before this date (YYYY-MM-DD). Combine with reviewsSince for a closed window.
reviewReplyFilterstring"all"all, with, or without. without surfaces complaints that were never answered.
minReviewLengthinteger(empty)Keep only reviews of at least this many characters. Filters out one-word reviews.
reviewsWithReplyOnlybooleanfalseDeprecated โ€” use reviewReplyFilter. Kept so existing runs keep working.
reviewAppVersionsarray(empty)Keep only reviews written against these app versions.
minThumbsUpinteger(empty)Keep only reviews with at least this many helpful votes.
proxyConfigurationobject{"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.

FieldTypeDescription
appIdstringApp id.
urlstringDirect link to the item.
titlestringItem title as published.
summarystringSummary.
descriptionHtmlstringFull item description in HTML.
descriptionTextstringDescription text.
descriptionMarkdownstringDescription markdown.
developerstringDeveloper.
developerIdstringDeveloper id.
developerWebsitestringDeveloper website.
genrestringGenre.
genreIdstringGenre id.
additionalGenresarrayAdditional genres.
additionalGenreIdsarrayAdditional genre ids.
iconstringIcon.
headerImagestringHeader image.
screenshotsarrayScreenshots.
screenshotCountnumberScreenshot count.
videostringVideo.
videoImagestringVideo image.
scorenumberScore.
scoreTextstringScore text.
ratingsnumberRatings.
reviewsnumberReviews.
histogram.1number1.
histogram.2number2.
histogram.3number3.
histogram.4number4.
histogram.5number5.
pricenumberCurrent price (null when no price is published).
priceTextstringPrice text.
currencystringCurrency code of the price.
freebooleanFree.
offersIAPbooleanOffers iap.
inAppPurchasesstringIn app purchases.
iapMinPricenumberIap min price.
iapMaxPricenumberIap max price.
iapCurrencystringIap currency.
adSupportedbooleanAd supported.
containsAdsbooleanContains ads.
installsstringInstalls.
minInstallsnumberMin installs.
realInstallsnumberReal installs.
releasedstringReleased.
updatedstringUpdated.
updatedTimestampnumberUpdated timestamp.
versionstringVersion.
targetSdkVersionnumberTarget sdk version.
minSdkVersionnumberMin sdk version.
minAndroidVersionstringMin android version.
contentRatingstringContent rating.
contentRatingIconstringContent rating icon.
privacyPolicystringPrivacy policy.
dataSafety.dataSharedstringData shared.
dataSafety.dataCollectedstringData collected.
dataSafety.securityPracticesarraySecurity practices.
countrystringCountry.
languagestringLanguage.
scrapedAtstringTimestamp when this record was scraped.

App enrichment fields

FieldTypeDescription
recentChangesstringThe app's "What's New" release notes, as Markdown. null when the developer publishes none.
discoveryRankinteger1-based position in the list that produced this app โ€” search results, top chart, developer catalogue or similar-apps cluster.
discoveryModestringWhich mode produced the app: search, apps, developer, collection, startUrls or similar.
chartTypestringIn collection mode, which chart the app was ranked in: topFree, topPaid or topGrossing. null in other modes.
permissionsarrayOnly with includePermissions. Objects of {group, permissions[]} โ€” e.g. {"group": "Location", "permissions": ["precise location (GPS and network-based)"]}.
permissionCountintegerOnly with includePermissions. Total permissions requested across all groups.
similarAppsarrayOnly 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.

FieldTypeDescription
itemTypestringAlways "review" on review records.
reviewIdstringGoogle's unique review identifier.
appIdstringPackage name of the app the review belongs to.
appTitlestringApp title. null in reviews mode, where no app record is fetched.
ratingintegerStar rating, 1 to 5.
textstringReview body. null when the user left a rating with no text.
authorNamestringReviewer's display name as published by Google.
authorAvatarUrlstringReviewer's public avatar image URL.
reviewDatestringDate posted, YYYY-MM-DD.
reviewDateISOstringFull ISO 8601 timestamp of posting.
thumbsUpCountintegerHelpful votes. 0 when nobody has voted.
reviewAppVersionstringApp version the review was written against (null on a small share of records).
reviewCriteriaarrayGoogle'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.
textLengthintegerCharacter count of the review text. 0 for rating-only reviews.
developerRepliedbooleanWhether the developer replied to this review.
developerReplyTextstringThe developer's reply, verbatim. null when there is no reply.
developerReplyDatestringDate of the reply, YYYY-MM-DD. null when there is no reply.
developerReplyDateISOstringFull ISO 8601 timestamp of the reply.
countrystringStorefront the review was pulled from.
languagestringUI language the review was pulled under.
reviewUrlstringDirect link to the review on Google Play.
sourcestringAlways play.google.com.
scrapedAtstringISO 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

AppsCost
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

ReviewsCost
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 sizeTypical time
100 appsunder 1 minute
1,000 apps2โ€“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. reviewRatings and reviewKeywords are applied after fetching โ€” no scraper can do better, but you are only billed for the reviews that match.
  • reviewAppVersion is 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: country and language determine 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.
  • reviewCriteria is 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