{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Scraper: Apps, Search & Reviews",
    "description": "Scrape Google Play: full app details (rating histogram, installs, price, version, similar apps), search results and reviews with sort and star filters. Monitoring mode outputs only new reviews on each scheduled run. No login, no browser.",
    "version": "0.1",
    "x-build-id": "TRdfDFFJfZhuQVdyf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~google-play-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-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/rjmacarthy~google-play-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-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/rjmacarthy~google-play-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-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": {
          "appIds": {
            "title": "Apps",
            "type": "array",
            "description": "Google Play package names (e.g. com.spotify.music) or app URLs (https://play.google.com/store/apps/details?id=com.spotify.music). One per line.",
            "items": {
              "type": "string"
            }
          },
          "includeAppDetails": {
            "title": "Output app details",
            "type": "boolean",
            "description": "Output one item per app with its full Google Play listing: rating and histogram, installs, price, in-app purchases, ads, category, content rating, version, update date, description, screenshots, similar apps and more. Charged per app. Switch off to output reviews only.",
            "default": true
          },
          "includeReviews": {
            "title": "Scrape reviews",
            "type": "boolean",
            "description": "Output the reviews of each app in \"Apps\". Charged per review.",
            "default": true
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many reviews per app. 0 = no limit (popular apps have millions of reviews - set a 'Maximum cost per run').",
            "default": 100
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "mostRelevant",
              "rating"
            ],
            "type": "string",
            "description": "Order in which Google Play returns reviews.",
            "default": "newest"
          },
          "reviewsStarFilter": {
            "title": "Star filter",
            "enum": [
              "all",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Only reviews with this star rating, e.g. 1 to watch for complaints.",
            "default": "all"
          },
          "onlyNewReviews": {
            "title": "Only new reviews (monitoring mode)",
            "type": "boolean",
            "description": "Output only reviews that earlier runs of this monitor have not output yet (per app, country and language). The first run outputs the newest reviews up to the limit and remembers them; schedule the Actor (e.g. daily) and each later run outputs - and charges - only the reviews posted since. Reviews are read newest first. A review the author edits is output once more with its new text.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of this monitor's memory of seen reviews. Use different names to run independent monitors on the same apps (e.g. 'support-team' and 'product-team').",
            "default": "default"
          },
          "stateStoreName": {
            "title": "State key-value store",
            "type": "string",
            "description": "Named key-value store in your account that keeps the monitoring state. Leave as is unless you want to separate it.",
            "default": "google-play-scraper-state"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Search Google Play for apps, e.g. 'habit tracker'. Each app found is output with full details (charged per app). Google Play's web search shows about 20-30 apps per query.",
            "items": {
              "type": "string"
            }
          },
          "maxSearchResults": {
            "title": "Max apps per search query",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many apps to take from each search, in Google Play's order. 0 = all apps on the results page (about 20-30).",
            "default": 10
          },
          "searchResultsOnly": {
            "title": "Search results only (faster)",
            "type": "boolean",
            "description": "Output search results straight from the results page (title, developer, rating, installs text, price, genre, description, icon, screenshots) without opening each app. Same price per app, one request per query instead of one per app. Fields only the app page has (histogram, update date, version, similar apps...) are null.",
            "default": false
          },
          "reviewsForSearchResults": {
            "title": "Also scrape reviews of apps found by search",
            "type": "boolean",
            "description": "Scrape reviews (with the settings above) for every app found by search too, not only for the apps you listed.",
            "default": false
          },
          "country": {
            "title": "Country",
            "pattern": "^[a-zA-Z]{2}$",
            "type": "string",
            "description": "Two-letter country code (Google's gl parameter): us, gb, de, in, br... Sets the store country for prices, availability and search.",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "pattern": "^[a-zA-Z]{2,3}([-_][a-zA-Z0-9]{2,4})?$",
            "type": "string",
            "description": "Language code (Google's hl parameter): en, de, es, fr, pt-BR, ja... Google Play returns reviews written in this language, and listing texts in it when the developer provides a translation.",
            "default": "en"
          },
          "maxConcurrency": {
            "title": "Apps in parallel",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many apps are processed at the same time. Keep it low to stay under Google's rate limits.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed normally. If Google Play rate-limits the run (HTTP 429 / CAPTCHA), enable Apify Proxy.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}