Skip to content

Google Play Scraper Service

A stateless Python microservice that fetches app data from the Google Play Store.

ComponentTechnology
FrameworkFastAPI
LanguagePython
Scrapergplay-scraper
Serveruvicorn
ValidationPydantic
MethodRouteDescription
GET/healthHealth check
GET/chartsChart rankings
GET/apps/searchSearch apps by term
GET/apps/{app_id}/identityApp identity and metadata
GET/apps/{app_id}/listingsStore listing for one locale
GET/apps/{app_id}/listings/localesListings for multiple locales
GET/apps/{app_id}/metricsRating and metrics
GET/developers/{developer_id}/appsDeveloper’s app catalog
GET/developers/searchSearch developers
  • collection: chart type (default: top_free)
  • category: Google Play category (default: APPLICATION)
  • country: ISO country code (default: us)
  • count: result count (default: 100, max: 200)
  • term (required): search query (min 1 character)
  • limit: maximum results (default: 10, max: 50)
  • country: ISO country code (default: us)
  • country: ISO country code (default: us)
  • locale: locale code (default: en)

The scraper propagates store errors with matching HTTP status codes:

  • 404 Not Found — the app is not available on the target store/country. AppNotFoundError is turned into a consistent 404 response by a FastAPI exception handler. The server side interprets this as “permanently not available on this storefront”.
  • 5xx — unexpected errors; retried on the server side.

Silent print/warning errors are emitted as structured JSON logs.

Key Differences from the App Store Scraper

Section titled “Key Differences from the App Store Scraper”
FeatureApp StoreGoogle Play
Chart depthUp to 200Up to 100
SubtitleSupportedNot available
Install countNot availableAvailable (range)
Locale parameterlanglocale
Default categoryNoneAPPLICATION
Metric country_codeActual ISO codezz sentinel (global)

Note: Because Android metrics are aggregated across the store, the server side stores them as “Global” with the ISO 3166 user-assigned zz code. That code is seeded into the countries table but is filtered out of the public /countries list.

Terminal window
make dev-android # Start the service
make logs-android # View logs

While the service is running, OpenAPI documentation is available at /docs (auto-generated by FastAPI).

  • Stateless: no database, no cache, no persistent state
  • Pydantic models: all responses are validated through Pydantic schemas
  • Error propagation: store errors are propagated with the correct HTTP status code (404 for missing apps)
  • Port: configurable via the PORT environment variable (default: 7463)