Google Play Store Scraper — Apps, Reviews & Dev Email avatar

Google Play Store Scraper — Apps, Reviews & Dev Email

Pricing

from $9.60 / 1,000 app data

Go to Apify Store
Google Play Store Scraper — Apps, Reviews & Dev Email

Google Play Store Scraper — Apps, Reviews & Dev Email

Scrape app listings and reviews from Google Play. Get title, developer, installs, ratings, description, and developer email. Run with package names or search terms, no Google login. Pricing: $9.90 per 1,000 apps on Free.

Pricing

from $9.60 / 1,000 app data

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

2

Monthly active users

4 days ago

Last modified

Features

Limited permissions

Share

For mobile growth managers, indie developers, and ASO agencies, this Actor scrapes public Google Play listings and up to 20 review rows per app. No Google account, API key, or login is required; each package returns one metadata record plus optional review records.

  • Extract title, developer, installs, star average, per-star counts, category, and description.
  • Read developer email and website when the listing publishes them, to contact that publisher.
  • Compare ratings and install text for one package on another country and language.
  • Download up to 20 review rows (author, stars, text, date, helpful votes, and version).
  • Resolve a search keyword to package IDs, then scrape each listing.

What you get

Metadata comes from AF_initDataCallback on the public app details page. Each kept review is another row and copies app columns, except description and whats_new are null. Filter on record_type.

FamilyFieldsWhat is stored
📱 Listingrecord_type, app_id, title, page_urlapp_meta or review; Android package; details URL with hl and gl.
🏢 Developerdeveloper, developer_id, developer_email, developer_websiteName, numeric id, email, and site. Email and site are null when absent.
🏷️ Categorycategory, category_idLabel and store key (sample: Music & Audio, MUSIC_AND_AUDIO).
⭐ Ratingsrating_avg, rating_count, rating_1, rating_2, rating_3, rating_4, rating_50–5 average, total count, and one integer per star.
📊 Listing figuresinstalls, installs_min, price_usd, price_original, has_iapInstall text, numeric floor, listing price, non-USD text, in-app purchase flag.
📝 Copycontent_rating, description, whats_newAge label (Everyone, Teen, Mature 17+), plain text with HTML removed, changelog.
🕒 Dates and iconupdated, released, icon_url, scraped_atISO 8601 UTC update and release, icon URL, run time YYYY-MM-DDTHH:MM:SSZ.
💬 Reviewsreview_id, review_author, review_rating, review_text, review_date, review_helpful, review_versionOn review rows; null on app_meta. Rating kept for 1, 2, 3, 4, or 5.
🔎 Qualityparse_confidence, warnings0.0–1.0 score and reason strings for anything not found.

Note: Not affiliated with Google LLC or the Google Play Store.

Note: If no price is parsed, price_usd is stored as 0. If a price is parsed in a currency other than USD, price_usd is the micro-amount divided by 1,000,000 and price_original is that figure plus the currency code. has_iap is true only when in-app purchase text is present.

A review is kept only when review_id is a string that does not start with [ or contain http, and has text or a 1–5 rating. Other review objects are dropped.

App row: 0.30 title (title_missing), 0.10 developer (developer_missing), 0.05 category (category_missing), 0.10 on rating (rating_missing), 0.10 description (description_missing). Review row: 0.20 missing id, 0.05 missing author, 0.20 missing rating, 0.05 outside 1–5, 0.15 missing text, 0.10 missing date. These strings are warnings.

Sample output

One app_meta row from a successful run, shortened by dropping whole fields not shown. Values that remain are unchanged except developer_email, which is shown as "

{
"record_type": "app_meta",
"app_id": "com.spotify.music",
"title": "Spotify: Music and Podcasts",
"developer": "Spotify AB",
"developer_email": "<hidden for privacy>",
"rating_avg": 4.349236,
"rating_count": 36606899,
"rating_1": 3722688,
"rating_2": 1067555,
"rating_3": 1310907,
"rating_4": 3107162,
"rating_5": 27398563,
"installs": "1,000,000,000+",
"installs_min": 1000000000,
"price_usd": 0,
"has_iap": true,
"parse_confidence": 1
}

Pricing

Pay per event. Each figure below is that plan’s live price. app-data-item (primary) is charged once per app_meta record (Free $0.0099, which is $9.90 per 1,000 and $99 per 10,000). developer-contact is charged once per app_meta record whose developer_email is present, and is not charged on review rows or when the email is null. review-item is charged once per kept review row. apify-actor-start is charged when the Actor starts; the count is one event per GB of memory, minimum one.

EventPlanUSD per event
App data (app-data-item)Free$0.0099
App data (app-data-item)Bronze$0.009801
App data (app-data-item)Silver$0.009702
App data (app-data-item)Gold$0.009603
App data (app-data-item)Platinum$0.009504
App data (app-data-item)Diamond$0.009405
Developer email (developer-contact)Free$0.0009
Developer email (developer-contact)Bronze$0.000891
Developer email (developer-contact)Silver$0.000882
Developer email (developer-contact)Gold$0.000873
Developer email (developer-contact)Platinum$0.000864
Developer email (developer-contact)Diamond$0.000855
App review (review-item)Free$0.0059
App review (review-item)Bronze$0.005841
App review (review-item)Silver$0.005782
App review (review-item)Gold$0.005723
App review (review-item)Platinum$0.005664
App review (review-item)Diamond$0.005605
Actor start (apify-actor-start)Free$0.00005
Actor start (apify-actor-start)Bronze$0.0000495
Actor start (apify-actor-start)Silver$0.000049
Actor start (apify-actor-start)Gold$0.0000485
Actor start (apify-actor-start)Platinum$0.000048
Actor start (apify-actor-start)Diamond$0.0000475

10 results = $0.099 on Free. That figure is 10 app-data-item events only. A started run also pays apify-actor-start (one event on Free at 1 GB is $0.00005). Emails and reviews are extra events at the prices above.

On this pay-per-event Actor, platform usage (compute, Apify Proxy traffic including residential, and storage) is included in the event prices and is paid by the Actor developer. You are not billed a separate platform-usage line for those resources. The Apify Free plan includes $5 of monthly platform usage credit. After one Free actor-start event, that credit covers 505 app-data-item events on Free and nothing else: floor((5 − 0.00005) / 0.0099) = 505; review events or developer-email events spend the same credit faster.

How to use

  1. Sign in with your own Apify account and open this Actor.
  2. Enter package names, search terms, or both. Direct packages stay in order; each search then appends package IDs that are not already listed.
  3. Set country, language, and whether to include reviews. Change the prefilled proxy if you do not want the residential group.
  4. Start the run. Use the input example below.
  5. Open the dataset when the run finishes, then the OUTPUT record in key-value storage for appsFailed and failedDetails.
  6. Repeat the run through Apify Schedules. A daily schedule is a reasonable starting point for listing and rating checks. Treat that cadence as a starting point only.
{
"appIds": ["com.spotify.music", "com.whatsapp"],
"searchTerms": ["meditation app"],
"country": "US",
"lang": "en",
"includeReviews": true
}

Export the dataset as JSON or CSV, or read the items with the Apify dataset API.

Input parameters

The form prefills appIds with com.spotify.music and Apify Proxy with the RESIDENTIAL group. Defaults below are what the run uses when a field is omitted.

ParameterWhat it doesDefault
appIdsAndroid package names. Blank entries are skipped. Details URL: https://play.google.com/store/apps/details?id=Empty list
searchTermsEach term is a Play Store app search. Package-shaped IDs from that page are added, skipping duplicates. No max-results field.Empty list
countryStorefront as gl, after uppercasing. Examples: US, GB, DE, FR, JP, CA, AU. Other strings are still sent.US
langLocale as hl, after lowercasing. Examples: en, de, fr, ja, pt. Selects description and review language. Other strings are still sent.en
includeReviewsWhen true, up to 20 review rows per app, each kept review as its own row. When false, only app_meta rows.true
proxyConfigurationWhen non-empty, detail, search, and review requests use this Apify Proxy URL. If setup fails, the run logs a warning and continues with no proxy.Empty object if omitted; the form prefills RESIDENTIAL

Limits and edge cases

ConditionWhat you seeWhat to do
appIds and searchTerms are both emptyNo dataset rows. OUTPUT is {"error": "no_input"}. Actor start still applies when the run has started.Pass at least one package or one search term.
Detail fetch fails (HTTP 403, 429, or 503; body under 5,000 characters; a sorry or unusual-traffic page; or no ds:5 block)Package skipped. failedDetails gets app_id and reason trimmed to 200 characters. Rows already pushed stay.Retry that package. Adjust proxyConfiguration, or clear it to run without a proxy.
Review request failsThe app metadata row is still pushed. No review rows. The log records a warning.Rerun with includeReviews true. Metadata does not depend on the review request succeeding.
A search fetch failsThat term adds no packages. Other terms and appIds continue.Check the log, then pass known packages in appIds.
Broad search termEvery package ID parsed from the search page is scraped. Each success is an app-data charge, plus email and review events when those apply.Use appIds when you already know the packages.
includeReviews is falseOnly app_meta rows. No review-item charges.Turn it on before the run if you need reviews.
More than 20 review rowsThe review request asks for 20 and does not page further. At most 20 review rows per app.No input raises that cap.
Review id missing, or no text and no 1–5 ratingThat review is not pushed.Expect fewer than 20 rows even when the request succeeds.
Same package from appIds and searchScraped once.No action.
Proxy setup throwsA warning is logged and the run continues without a proxy.Fix the proxy object or leave it empty.

appsProcessed in OUTPUT counts packages whose detail fetch did not fail. appsFailed is the length of failedDetails. totalItems is the number of dataset rows pushed. scrapedAt is the run timestamp.

These rows are public data from Play Store pages. Whether that collection is legal for a given use depends on Google’s terms and the law that applies to you.

FAQ

How much does it cost to scrape Google Play?

Pay per event at the plan prices in Pricing, including the Free worked example and the $5 credit count.

Why is my Google Play scrape empty?

See Limits and edge cases for an empty input or a failed fetch. A search can add package IDs you did not expect, or none when that request fails. For a specific app, pass the package from the id parameter of a Play details URL.

What if reviews or developer emails do not come back?

See Limits and edge cases for the 20-review cap and for reviews that are dropped or whose request fails. developer_email is null when the listing has no email, and that app is not charged the developer-email event. Description on a review row is null; read it from the app_meta row for that app_id.

Do I need a Google login or a proxy?

No Google account, API key, or login is required. proxyConfiguration is optional. The form prefills Apify Proxy with the RESIDENTIAL group; omit the field, or leave it empty, to run without a proxy.

Is scraping Google Play allowed?

This Actor reads public data on Play Store pages and a public review endpoint without a Google login. Whether that is legal or allowed under Google’s terms, or lawful for your use case, depends on those terms and the law that applies to you. This page does not decide that question.

  • AI Chatbot App Update Tracker — tracks updates for the ChatGPT, Claude, and Gemini apps. This Actor returns updated and whats_new for a Google Play package you name.
  • AI Chatbot ASO Keyword Tracker — tracks App Store keyword rankings. This Actor returns the Google Play listing side: title, category, rating distribution, and installs.

Usage statistics

This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.

A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.

To opt out, set disableUsageStats to true in the input. Nothing is sent then.

Full list of collected fields

⌂ 换网址