{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Store Scraper — Reviews, Apps & Charts | $0.50/1k",
    "description": "Google Play Store data without an API key: apps by package name or URL, keyword search with rank, a developer's apps, top free, paid and grossing charts in any country, plus public app reviews (rating, text, date, thumbs-up, version, developer reply; no reviewer names). JSON, CSV, Excel.",
    "version": "0.1",
    "x-build-id": "mGIBIIwuVEYnllKkK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glasswing~google-play-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glasswing-google-play-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/glasswing~google-play-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glasswing-google-play-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/glasswing~google-play-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glasswing-google-play-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Apps: package names or Google Play URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "One per line. Accepted: package names (com.whatsapp), Play Store app links (https://play.google.com/store/apps/details?id=com.whatsapp), market:// links, developer links (https://play.google.com/store/apps/developer?id=Google+LLC or /store/apps/dev?id=5700313618786177705, which list that developer's apps) and search links (https://play.google.com/store/search?q=pdf+scanner&c=apps). A link with `gl=` is fetched in that country, unless you list countries under Countries: then every app is fetched in each listed country. A package that does not exist, or is not sold in that country, gives one free `not_found` row. Leave the built-in example here when you use search, developers or charts: it is skipped automatically.",
            "default": [
              "com.whatsapp",
              "com.spotify.music",
              "https://play.google.com/store/apps/details?id=com.duolingo",
              "com.mojang.minecraftpe",
              "org.telegram.messenger"
            ],
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search keywords",
            "uniqueItems": true,
            "type": "array",
            "description": "Keywords to search Google Play for, one per line: `budget planner`, `photo editor`, `meditation`. Each keyword returns up to 30 apps (Google Play's first result page) in Google's own order; `searchRank` is the position (1 = first result), which makes this a Play Store keyword-ranking (ASO) check. A keyword with no match gives one free `not_found` row.",
            "items": {
              "type": "string"
            }
          },
          "developerIds": {
            "title": "Developers: names, IDs or links",
            "uniqueItems": true,
            "type": "array",
            "description": "Developers whose apps you want, one per line: the developer name exactly as Google Play shows it (Google LLC, Rovio Entertainment Corporation), a numeric developer ID (5700313618786177705) or a developer link. Returns all of the developer's apps in that country, up to `Results per search, developer or chart`. An unknown developer gives one free `not_found` row.",
            "items": {
              "type": "string"
            }
          },
          "charts": {
            "title": "Top charts",
            "uniqueItems": true,
            "type": "array",
            "description": "Google Play's top charts to read per country: top free, top paid and top grossing. Each chart returns up to 200 apps with `chartPosition` 1, 2, 3... and the full app data.",
            "items": {
              "type": "string",
              "enum": [
                "topFree",
                "topPaid",
                "topGrossing"
              ],
              "enumTitles": [
                "Top free",
                "Top paid",
                "Top grossing"
              ]
            }
          },
          "chartCategory": {
            "title": "Chart category",
            "enum": [
              "APPLICATION",
              "GAME",
              "FAMILY",
              "ART_AND_DESIGN",
              "AUTO_AND_VEHICLES",
              "BEAUTY",
              "BOOKS_AND_REFERENCE",
              "BUSINESS",
              "COMICS",
              "COMMUNICATION",
              "DATING",
              "EDUCATION",
              "ENTERTAINMENT",
              "EVENTS",
              "FINANCE",
              "FOOD_AND_DRINK",
              "HEALTH_AND_FITNESS",
              "HOUSE_AND_HOME",
              "LIBRARIES_AND_DEMO",
              "LIFESTYLE",
              "MAPS_AND_NAVIGATION",
              "MEDICAL",
              "MUSIC_AND_AUDIO",
              "NEWS_AND_MAGAZINES",
              "PARENTING",
              "PERSONALIZATION",
              "PHOTOGRAPHY",
              "PRODUCTIVITY",
              "SHOPPING",
              "SOCIAL",
              "SPORTS",
              "TOOLS",
              "TRAVEL_AND_LOCAL",
              "VIDEO_PLAYERS",
              "WATCH_FACE",
              "WEATHER",
              "GAME_ACTION",
              "GAME_ADVENTURE",
              "GAME_ARCADE",
              "GAME_BOARD",
              "GAME_CARD",
              "GAME_CASINO",
              "GAME_CASUAL",
              "GAME_EDUCATIONAL",
              "GAME_MUSIC",
              "GAME_PUZZLE",
              "GAME_RACING",
              "GAME_ROLE_PLAYING",
              "GAME_SIMULATION",
              "GAME_SPORTS",
              "GAME_STRATEGY",
              "GAME_TRIVIA",
              "GAME_WORD"
            ],
            "type": "string",
            "description": "Which category the charts cover: all apps (default), all games, or one category such as Games - Puzzle or Health & Fitness."
          },
          "reviewApps": {
            "title": "Reviews: apps to read reviews for",
            "uniqueItems": true,
            "type": "array",
            "description": "Apps whose reviews you want, one per line: package names (com.whatsapp) or Google Play app links. Reviews are read in every country listed under Countries and in the chosen Language (Google Play shows the reviews written in that language first). An app with no reviews for your filter gives one free `not_found` row. Leave the built-in example under Apps when you only want reviews: it is skipped automatically.",
            "items": {
              "type": "string"
            }
          },
          "reviewsPerApp": {
            "title": "Reviews per app",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many reviews to read per app and country, up to 10,000. The run total is still limited by Maximum results, so raise that too (for example 3 apps x 500 reviews = Maximum results 1500).",
            "default": 100
          },
          "reviewSort": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "mostRelevant",
              "rating"
            ],
            "type": "string",
            "description": "Newest first (default; best for monitoring), most relevant (Google Play's default order) or rating.",
            "default": "newest"
          },
          "reviewRating": {
            "title": "Only reviews with this star rating",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Keep only 1-star, 2-star ... 5-star reviews. Leave empty for every rating."
          },
          "reviewsSince": {
            "title": "Reviews since",
            "type": "string",
            "description": "Skip reviews older than this date: `2026-01-31`, or relative such as `30 days`, `2 weeks`, `6 months`. With Newest sort the run stops reading an app as soon as it reaches older reviews, which makes scheduled monitoring runs cheap."
          },
          "countries": {
            "title": "Countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Google Play countries as two-letter codes, one per line: `us`, `gb`, `de`, `jp`, `br` (country names such as Germany also work). Prices, currency, ratings, availability, search results and charts differ by country. Every app, keyword, developer and chart is fetched once per country.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of the texts (title, summary, description, category names, install counts), as a code: `en`, `de`, `es`, `fr`, `ja`, `pt-BR`, `zh-TW`. Dates, prices and counts stay machine-readable in every language.",
            "default": "en"
          },
          "resultsPerSource": {
            "title": "Results per search, developer or chart",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many apps to keep from each keyword, developer and chart, best-ranked first. Google Play's caps: 30 per keyword (its first result page), 200 per chart, all of a developer's apps. The total is still limited by Maximum results.",
            "default": 50
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many rows have been saved in total. Each row with status `ok` is one billable result; `not_found` and `error` rows are never charged. Raise it for full charts or several keywords.",
            "default": 20
          },
          "maxResults": {
            "title": "Maximum results (alias)",
            "minimum": 1,
            "type": "integer",
            "description": "Same as Maximum results; accepted for API callers that use this name."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Google Play's public store pages answer Apify's datacenter IPs directly, so no proxy is needed. If a very large run meets rate-limit errors, enable Apify Proxy (datacenter). Residential proxies are not needed.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}