Skip to content

Scraper APIs

The two scraper microservices expose REST APIs that the server consumes through connectors. These APIs are not intended for direct external use — the server API is the public interface.

Base URL: http://localhost:7462 Framework: Fastify 5 (Node.js/TypeScript) Documentation: http://localhost:7462/docs

EndpointParametersDescription
GET /healthReturns {status: "ok"}
GET /chartscollection (required), category, country, numChart rankings (max 200)
GET /apps/searchterm (required), limit, countrySearch apps
GET /apps/:appId/identitycountry, langApp metadata (returns an is_free boolean)
GET /apps/:appId/listingscountry, langStore listing (includes promotional_text)
GET /apps/:appId/listings/localescountries (comma-separated)Multi-country listings
GET /apps/:appId/metricscountry, langRating, file size
GET /developers/:developerId/appsDeveloper’s apps
GET /developers/searchterm, limit, countrySearch developers
  • top_free — Top Free Apps
  • top_paid — Top Paid Apps
  • top_grossing — Top Grossing Apps

Base URL: http://localhost:7463 Framework: FastAPI (Python) Documentation: http://localhost:7463/docs

EndpointParametersDescription
GET /healthReturns {status: "ok"}
GET /chartscollection, category, country, countChart rankings (max 200)
GET /apps/searchterm (required), limit, countrySearch apps
GET /apps/{app_id}/identitycountryApp metadata
GET /apps/{app_id}/listingslocale, countryStore listing (promotional_text is always null)
GET /apps/{app_id}/listings/localeslocales (comma-separated)Multi-locale listings
GET /apps/{app_id}/metricscountryRating (global), install count
GET /developers/{developer_id}/appsDeveloper’s apps
GET /developers/searchterm, limit, countrySearch developers
  • Default collection: top_free
  • Default category: APPLICATION
  • Maximum count: 200 (but usually returns up to 100)

FeatureApp Store ScraperGoogle Play Scraper
Language parameterlanglocale
Multi-locale parametercountrieslocales
Max chart results200~100
Subtitle supportYesNo
promotional_textYesNo (null)
Install countNoYes (range string)
File size in metricsYesNo
Rating scopePer countryGlobal (stored under the zz sentinel)

Both scrapers return errors as follows:

{
"error": "Error message",
"statusCode": 404
}

Common errors:

  • 404 — App not found on this storefront. The Android scraper emits this as AppNotFoundError and the FastAPI exception handler turns it into 404. The iOS scraper also returns 404. Server connectors treat 404 as empty_response — the country is marked as permanently “unavailable” and will not be retried.
  • 500 — Upstream scraper library error