Skip to content

About

Google Play scraper for Python and the command line: app details by package name or store URL (rating, review count, installs, price, category, last update, developer, ads and in-app purchases) for up to 50 apps per run, in any country and language, as JSON or CSV. Free and open source; no proxies or headless browser to run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Google Play Scraper

ci python license dependencies

Read Google Play app pages from Python or the command line: rating, review count, install band, price, category, content rating, last update, developer, ads and in-app purchase flags, Editors' Choice badge, screenshots and the full description, for up to 50 apps per run, by package name or store URL, as JSON or CSV. The code is free and open source (MIT). It runs on the QuanticData Data API, so there are no proxies to rotate and no headless browser to keep alive: sign in once and run a command.

pip install git+https://github.com/quantumproxies/google-play-scraper
google-play-scraper login
google-play-scraper apps com.spotify.music com.whatsapp --country us --lang en -o apps.csv

login opens the QuanticData sign-in page in your browser. New accounts get $2 of free usage every month, no card required: create one.

What it scrapes

Command Input Returns Per run
google-play-scraper apps package names or Play URLs Rating, reviews, installs, price, category, update date, developer, 26 fields per row (fields and price) up to 50

Read any market with --country and --lang, e.g. --country it --lang it; the url of each row is the localized store page that was read.

Sample output

A real row from google-play-scraper apps com.spotify.music com.whatsapp --country us --lang en --max-results 2 (2026-10-23):

{
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us",
  "free": true,
  "icon": "https://play-lh.googleusercontent.com/IzQgYCcnCFCD08GR-3bdtcT8xzOvrNkC84avGT5CwTX2VIqmTmKKJcP_Cd4JoBOdmCMlTndlOzV6hrthg2fOWA",
  "price": 0,
  "title": "Spotify: Music and Podcasts",
  "genres": [
    "Music & Audio"
  ],
  "rating": 4.35,
  "package": "com.spotify.music",
  "reviews": 36525631,
  "updated": "Oct 21, 2026",
  "category": "MUSIC_AND_AUDIO",
  "currency": "USD",
  "installs": "1B+",
  "developer": "Spotify AB",
  "updated_at": "2026-10-21",
  "description": "Listen to songs, play podcasts, create playlists and discover music you'll love",
  "screenshots": [
    "https://play-lh.googleusercontent.com/c1jnjL-9CIFlwlTMX3xNyeo8aEH39sNuC5zpTHhfW8keGxQE3TBMRX9Rm3VqM3E03Cyl9AqtnxuKvxJpcW0WCA",
    "https://play-lh.googleusercontent.com/YxWsaNLSEBvLh04geMOADhSq6Ln5LmRrpa51ixZ7YkcEwmPQ-wdtnvoZDjVAgufbi2et0IlTVDAsvCCmlsJYnNA"
  ],
  "availability": "InStock",
  "contains_ads": true,
  "developer_id": "Spotify AB",
  "developer_url": "https://www.spotify.com",
  "content_rating": "Teen",
  "editors_choice": true,
  "full_description": "With the Spotify music and podcast app, you can play millions of songs, albums and original podcasts for free. We have even added audiobooks, so you can enjoy thousands of stories wherever you are!",
  "in_app_purchases": true,
  "operating_system": "ANDROID"
}

Python

from quanticdata_google_play_scraper import GooglePlayScraper

play = GooglePlayScraper()  # saved login, or QUANTICDATA_API_KEY

apps = play.apps(["com.spotify.music", "com.whatsapp"], country="us", lang="en")
for a in apps:
    print(a["package"], a["rating"], a["reviews"], a["installs"], a["updated_at"])
apps.to_csv("apps.csv")

italy = play.apps(["com.spotify.music"], country="it", lang="it")
print(italy.rows[0]["title"], italy.rows[0]["description"])

Each call returns a Run: iterate it for the rows (plain dicts), take len(), or save it with to_csv(), to_json(), to_jsonl() or to_dataframe() (pandas). Errors are specific: InsufficientCredit, RateLimited, InvalidInput, JobFailed, AuthError.

Examples

  • App tracking: Record the rating, review count, install band and last update of a list of apps on every run and keep the history in a CSV, with the change since the previous check. See examples/app_tracker.py.
  • Country comparison: Read the same apps in several countries and languages side by side: title, rating, price and content rating per market. See examples/compare_countries.py.
  • Monetization map of a category: Check a list of apps for ads, in-app purchases, price and Editors' Choice, and print how many apps of the list use each model. See examples/monetization_map.py.

Command line

Results print as a table; -o file.csv, -o file.json or -o file.jsonl writes a file. List inputs take a b c, a,b,c, @file.txt (one per line) or - (stdin). --no-wait starts a long run in the background and prints its id; google-play-scraper run <id> -o out.csv collects it later.

google-play-scraper apps

Google Play app detail by package name — rating, reviews, category, price.

google-play-scraper apps PACKAGES [options]
Option Type Default Description
PACKAGES string[] Android package names (com.spotify.music) or Google Play store URLs.
--country string Google Play country, as an ISO country code (default us).
--lang string Language of the store page, e.g. en, it, de.
--max-results integer 10 How many apps to deliver at most (1–50). You pay only for delivered apps.

Output fields

google-play-scraper apps: 26 fields
Field Type Description
package string Android package name.
title string App name.
developer string or null Developer name.
developer_url string or null Developer page URL.
category string or null Play category.
description string or null Store description (trimmed).
rating number or null Average rating.
reviews integer or null Rating count.
price number or null Numeric price (0 = free).
currency string or null Currency code.
content_rating string or null Content rating.
operating_system string or null Target OS.
installs string or null Install band when the page shows one.
icon string or null Icon URL.
url string Localized store URL.
full_description string or null The full store description (up to 6000 characters).
genres string[] Genre chips shown on the page.
screenshots string[] Screenshot URLs at original size (up to 12).
updated string or null "Updated on" date as shown.
updated_at string or null The same date as YYYY-MM-DD.
in_app_purchases boolean True when the page says the app has in-app purchases.
contains_ads boolean True when the page says the app contains ads.
editors_choice boolean True when the app carries the Editors' Choice badge.
developer_id string or null Developer id on Google Play.
availability string or null Offer availability (InStock…).
free boolean or null True when the price is 0.

Sign-in and API keys

  • google-play-scraper login signs you in with OAuth 2.1 and PKCE in the browser. The token is stored in ~/.config/quanticdata/credentials.json (readable only by you) and refreshed automatically. One login serves every QuanticData tool on the machine.
  • No browser on the machine (SSH, Docker, Colab): run google-play-scraper login --no-browser, open the link anywhere, then paste back the address the browser ends on.
  • Scripts and CI: set QUANTICDATA_API_KEY to a key from the dashboard, or store one with google-play-scraper login --api-key.
  • google-play-scraper logout revokes the token. The connection is listed under API keys in the dashboard as "API · QuanticData CLI"; deleting that key disconnects every machine that uses it.

Pricing

The code is free and MIT-licensed. Runs are billed to your QuanticData account per delivered row, at the price shown on each collector page linked above; $2 of usage is free every month and failed runs are never billed. Plans with higher limits: pricing.

Other ways to call it

The same data over plain HTTP:

curl -X POST https://api.quanticdata.io/v1/scraper/collectors/google_play_apps/run \
  -H "Authorization: Bearer $QUANTICDATA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input": {"packages": ["com.spotify.music", "com.whatsapp"], "country": "us", "lang": "en", "max_results": 2}}'
  • API reference with Python, Node, PHP and curl examples.
  • MCP server to give Claude, Cursor or any MCP client the same tools.
  • n8n node for no-code workflows.

FAQ

Is this Google Play scraper free?

The code is free and MIT-licensed. Scraping runs on your QuanticData account: $2 of usage is free every month with no card, then you pay per delivered row at the price shown on each collector page. Failed runs are never billed.

Do I need proxies or a headless browser?

No. You send package names or store URLs and get rows back; the requests run on QuanticData's side. No Google account or Play developer account is involved.

How many apps can one run return?

Up to 50 apps per run; ask for fewer with --max-results and you pay only for what is delivered. For longer lists, run them in batches of 50, as examples/app_tracker.py does.

Which countries and languages?

Any: --country sets the store country and --lang the page language; the url field of each row is the localized store page that was read.

Can I export to CSV or Excel?

Add -o apps.csv (or .json, .jsonl). Lists such as genres and screenshots are joined with '; ', so the CSV opens cleanly in Excel or Google Sheets.

Can I run it on a schedule?

Yes. Set QUANTICDATA_API_KEY in the environment and call the CLI or examples/app_tracker.py from cron, GitHub Actions or any scheduler.

Related scrapers

License

MIT. Built and maintained by QuanticData.

About

Google Play scraper for Python and the command line: app details by package name or store URL (rating, review count, installs, price, category, last update, developer, ads and in-app purchases) for up to 50 apps per run, in any country and language, as JSON or CSV. Free and open source; no proxies or headless browser to run.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages