{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Store Reviews Scraper",
    "description": "Scrape Google Play Store reviews at scale, including ratings, text, timestamps, user info, and app metadata. Perfect for sentiment analysis, market research, competitor insights, and product improvement. Fast, accurate, and ideal for building review datasets.",
    "version": "0.3",
    "x-build-id": "EdaeCtwYdyhlr80ut"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scraper-engine~google-play-store-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scraper-engine-google-play-store-reviews-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/scraper-engine~google-play-store-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scraper-engine-google-play-store-reviews-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/scraper-engine~google-play-store-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scraper-engine-google-play-store-reviews-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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "🔗 App Package Name or URL (required)",
            "type": "array",
            "description": "One or more app URLs or package names. Example: https://play.google.com/store/apps/details?id=com.supercell.brawlstars or com.supercell.brawlstars",
            "items": {
              "type": "string"
            }
          },
          "deviceType": {
            "title": "📲 Device Type",
            "enum": [
              "mobile",
              "tablet",
              "chromebook"
            ],
            "type": "string",
            "description": "Which device's review pool to read. Google Play keeps separate review streams per form factor, so tablet and Chromebook reviews differ from phone reviews.",
            "default": "mobile"
          },
          "sortBy": {
            "title": "↕️ Sort By",
            "enum": [
              "mostRelevant",
              "newest",
              "rating"
            ],
            "type": "string",
            "description": "Order the Google Play server returns reviews in: Most Relevant, Newest first, or highest Rating first.",
            "default": "mostRelevant"
          },
          "rating": {
            "title": "⭐ Fetch Reviews by Rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only return reviews with this star rating (1–5). A single star value is applied server-side, so pages are not wasted on non-matching reviews. Leave empty for all ratings.",
            "default": null
          },
          "ratingFilter": {
            "title": "⭐ Rating Filter (multiple)",
            "type": "array",
            "description": "Only return reviews with these star ratings (e.g. 1, 2, 5). Overrides the single rating above when set. Multiple stars are filtered while paginating.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            }
          },
          "keywords": {
            "title": "🔍 Keywords Filter",
            "type": "array",
            "description": "Only return reviews whose text contains any of these keywords (case-insensitive).",
            "items": {
              "type": "string"
            }
          },
          "appVersion": {
            "title": "📦 App Version Filter",
            "type": "array",
            "description": "Only return reviews left on these app versions (e.g. 68.279). Matched against the app version Google Play records on each review.",
            "items": {
              "type": "string"
            }
          },
          "endDate": {
            "title": "📅 End Date",
            "type": "string",
            "description": "Only return reviews posted on or before this date (YYYY-MM-DD). Leave empty for no limit.",
            "default": ""
          },
          "recentDays": {
            "title": "🕐 Recent Days",
            "minimum": 0,
            "type": "integer",
            "description": "Only return reviews from the last N days. Use 0 for no limit. Pair with Sort By = Newest for the fastest results.",
            "default": 0
          },
          "uniqueOnly": {
            "title": "✨ Unique Reviews Only",
            "type": "boolean",
            "description": "Drop repeated reviews by review ID across pages.",
            "default": true
          },
          "maxReviews": {
            "title": "🎯 Max Reviews",
            "minimum": -1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum reviews saved per app, counted AFTER filtering. Use -1 for the ceiling of 10000.",
            "default": 100
          },
          "reviewsPerPage": {
            "title": "📊 Reviews per Page",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many reviews to request per API call. 200 is a good balance; 1000 is the highest value Google Play honours.",
            "default": 200
          },
          "pagesToScrape": {
            "title": "📑 Pages to Scrape",
            "minimum": -1,
            "type": "integer",
            "description": "Max number of pages per app. Use -1 (default) for unlimited — the run stops at Max Reviews instead.",
            "default": -1
          },
          "startPage": {
            "title": "📄 Start Page",
            "minimum": 1,
            "type": "integer",
            "description": "Skip the first N-1 pages of results (1 = start at the beginning). Google Play only pages forward with a cursor, so earlier pages are still requested and then discarded — this costs time, it does not save requests.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "🔒 Proxy Configuration",
            "type": "object",
            "description": "Optional. Google Play serves these endpoints without a proxy; a residential proxy is used automatically as an escalation if a request is blocked."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}