{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Reviews Scraper",
    "description": "Scrape Google Play reviews by app URL, package ID, or search query. Extract review text, ratings, dates, app versions, developer replies, helpful votes, reviewer data, app metadata, countries, and review languages.",
    "version": "0.2",
    "x-build-id": "tSk4ErXO00aHDQCKP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trakk~google-play-reviews-app-intelligence/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trakk-google-play-reviews-app-intelligence",
        "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/trakk~google-play-reviews-app-intelligence/runs": {
      "post": {
        "operationId": "runs-sync-trakk-google-play-reviews-app-intelligence",
        "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/trakk~google-play-reviews-app-intelligence/run-sync": {
      "post": {
        "operationId": "run-sync-trakk-google-play-reviews-app-intelligence",
        "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": {
          "appIdsOrUrls": {
            "title": "📱 App package IDs or URLs",
            "type": "array",
            "description": "Use this for exact targets. Examples: `com.supercell.brawlstars` or `https://play.google.com/store/apps/details?id=com.spotify.music`.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "searchQueries": {
            "title": "🔎 Search queries",
            "type": "array",
            "description": "Use this when you know the app name or niche, but not the package ID. Examples: `Brawl Stars`, `fitness app`, `habit tracker`.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxAppsPerSearch": {
            "title": "🎯 Max apps per search query",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many apps to take from each search query before scraping reviews.",
            "default": 5
          },
          "countries": {
            "title": "🌎 Countries",
            "type": "array",
            "description": "Google Play country codes. Examples: `us`, `gb`, `de`, `fr`, `br`, `jp`.",
            "items": {
              "type": "string"
            },
            "default": [
              "us"
            ]
          },
          "reviewLanguages": {
            "title": "🗣️ Review languages",
            "type": "array",
            "description": "Select one or many review text languages in the same run. The Actor checks the detected language of each review before saving it.",
            "items": {
              "type": "string",
              "enum": [
                "en",
                "ru",
                "es",
                "de",
                "fr",
                "pt-BR",
                "pt-PT",
                "it",
                "nl",
                "pl",
                "tr",
                "uk",
                "hi",
                "id",
                "ja",
                "ko",
                "zh-CN",
                "zh-TW",
                "ar",
                "vi",
                "th",
                "cs",
                "sk",
                "hu",
                "ro",
                "bg",
                "el",
                "he",
                "sv",
                "da",
                "fi",
                "no",
                "ms",
                "fil",
                "bn",
                "ta",
                "te",
                "mr",
                "ur",
                "fa",
                "sw",
                "af",
                "ca",
                "hr",
                "sr",
                "sl",
                "lt",
                "lv",
                "et"
              ],
              "enumTitles": [
                "English",
                "Russian",
                "Spanish",
                "German",
                "French",
                "Portuguese (Brazil)",
                "Portuguese (Portugal)",
                "Italian",
                "Dutch",
                "Polish",
                "Turkish",
                "Ukrainian",
                "Hindi",
                "Indonesian",
                "Japanese",
                "Korean",
                "Chinese (Simplified)",
                "Chinese (Traditional)",
                "Arabic",
                "Vietnamese",
                "Thai",
                "Czech",
                "Slovak",
                "Hungarian",
                "Romanian",
                "Bulgarian",
                "Greek",
                "Hebrew",
                "Swedish",
                "Danish",
                "Finnish",
                "Norwegian",
                "Malay",
                "Filipino",
                "Bengali",
                "Tamil",
                "Telugu",
                "Marathi",
                "Urdu",
                "Persian",
                "Swahili",
                "Afrikaans",
                "Catalan",
                "Croatian",
                "Serbian",
                "Slovenian",
                "Lithuanian",
                "Latvian",
                "Estonian"
              ]
            },
            "default": [
              "en"
            ]
          },
          "customReviewLanguages": {
            "title": "➕ Custom review language codes",
            "type": "array",
            "description": "Optional. Add extra Google Play language codes that are not in the dropdown. Examples: `is`, `ga`, `eu`, `gl`, `iw`.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "strictReviewLanguage": {
            "title": "✅ Only selected review languages",
            "type": "boolean",
            "description": "Detect the language of every review text and skip reviews written in other languages. Recommended for clean datasets.",
            "default": true
          },
          "languages": {
            "title": "Legacy language codes",
            "type": "array",
            "description": "Deprecated. Use Review languages instead. This field is kept only for old tasks and API clients.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxReviewsPerApp": {
            "title": "🔢 Max reviews per app",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum matching reviews to save for each app/country/review-language combination. Set `0` to collect app details only.",
            "default": 100
          },
          "sort": {
            "title": "↕️ Sort reviews by",
            "enum": [
              "newest",
              "relevant",
              "rating"
            ],
            "type": "string",
            "description": "Order used by Google Play before rating, text, date, reply, and language filters are applied.",
            "default": "newest"
          },
          "ratings": {
            "title": "⭐ Star ratings",
            "type": "array",
            "description": "Return only selected star ratings. Leave empty to collect all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "keywords": {
            "title": "🔍 Text must contain",
            "type": "array",
            "description": "Return only reviews containing at least one of these words or phrases. Case-insensitive.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "🚫 Text must not contain",
            "type": "array",
            "description": "Skip reviews containing any of these words or phrases. Case-insensitive.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "dateFrom": {
            "title": "📅 Published from",
            "type": "string",
            "description": "Return reviews published on or after this date. Format: YYYY-MM-DD.",
            "default": ""
          },
          "dateTo": {
            "title": "📅 Published until",
            "type": "string",
            "description": "Return reviews published on or before this date. Format: YYYY-MM-DD.",
            "default": ""
          },
          "recentDays": {
            "title": "⏱️ Only recent reviews",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Return only reviews from the last N days. Set 0 to disable.",
            "default": 0
          },
          "onlyWithDeveloperReply": {
            "title": "💬 Only with developer reply",
            "type": "boolean",
            "description": "Return only reviews that have a developer reply.",
            "default": false
          },
          "onlyWithoutDeveloperReply": {
            "title": "🙊 Only without developer reply",
            "type": "boolean",
            "description": "Return only reviews that do not have a developer reply.",
            "default": false
          },
          "appVersions": {
            "title": "🏷️ App versions",
            "type": "array",
            "description": "Return only reviews created for selected app versions. Exact match.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "outputMode": {
            "title": "📋 Default dataset content",
            "enum": [
              "reviews",
              "apps",
              "both"
            ],
            "type": "string",
            "description": "Reviews only is best for sentiment analysis. Apps only is useful for discovery. Apps and reviews is best for QA.",
            "default": "reviews"
          },
          "includeAppDetails": {
            "title": "🧩 Include app details",
            "type": "boolean",
            "description": "Fetch app metadata such as title, icon, developer, score, installs, genre, version, screenshots, and Google Play URL.",
            "default": true
          },
          "dedupe": {
            "title": "🧹 Remove duplicate reviews",
            "type": "boolean",
            "description": "Skip duplicate reviews across repeated apps, countries, and review languages.",
            "default": true
          },
          "fetchPageSize": {
            "title": "📄 Reviews fetched per request",
            "minimum": 1,
            "maximum": 4500,
            "type": "integer",
            "description": "How many reviews to request from Google Play per page before local filters are applied.",
            "default": 200
          },
          "maxPagesPerApp": {
            "title": "🧱 Max review pages per app",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Safety limit for pagination. Increase if strict filters need more pages to find enough matching reviews.",
            "default": 25
          },
          "maxConcurrency": {
            "title": "⚡ Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many app/country/review-language combinations can run in parallel.",
            "default": 5
          },
          "requestDelayMs": {
            "title": "🐢 Delay between review pages",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Optional delay in milliseconds after each review page request.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}