{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Store Scraper",
    "description": "Scrape Google Play app data: ratings, installs, pricing, in-app purchase range, content rating, data safety and screenshots. 50+ fields, the only scraper with multi-country pricing in one run. Flat pricing, no start fee, no hidden per-event charges.",
    "version": "0.0",
    "x-build-id": "67hAMBwc3dD0nvXmU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unfenced-group~google-play-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unfenced-group-google-play-store-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/unfenced-group~google-play-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-unfenced-group-google-play-store-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/unfenced-group~google-play-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-unfenced-group-google-play-store-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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search",
              "apps",
              "developer",
              "collection",
              "startUrls",
              "reviews",
              "similar"
            ],
            "type": "string",
            "description": "How to find apps. 'search' uses a keyword, 'apps' takes exact app IDs, 'developer' lists a developer's apps, 'collection' scrapes a top chart, 'startUrls' takes full Play Store URLs, 'reviews' pulls reviews only for the app IDs you give, 'similar' returns the apps Google shows as related to the app IDs you give.",
            "default": "search"
          },
          "searchTerm": {
            "title": "Search term",
            "type": "string",
            "description": "Keyword to search the Play Store (used in 'search' mode). Example: \"podcast\", \"photo editor\"."
          },
          "appIds": {
            "title": "App IDs",
            "type": "array",
            "description": "Exact Google Play app IDs or full app URLs (used in 'apps' mode). Example: com.spotify.music",
            "items": {
              "type": "string"
            }
          },
          "developerId": {
            "title": "Developer ID or name",
            "type": "string",
            "description": "Developer ID or name to list all of a developer's apps (used in 'developer' mode). Example: \"Spotify AB\"."
          },
          "collection": {
            "title": "Browse",
            "enum": [
              "apps",
              "games"
            ],
            "type": "string",
            "description": "Deprecated shortcut kept for existing runs: 'games' is the same as setting Category to GAME. Use Category and Top chart instead.",
            "default": "apps"
          },
          "chartType": {
            "title": "Top chart",
            "enum": [
              "topFree",
              "topPaid",
              "topGrossing"
            ],
            "type": "string",
            "description": "Which top chart to scrape in 'collection' mode. Top grossing is the revenue ranking — the one that actually tells you who is making money. Example: topGrossing",
            "default": "topFree"
          },
          "categoryId": {
            "title": "Category (optional, for browsing)",
            "type": "string",
            "description": "Category for 'collection' mode. Examples: APPLICATION (all apps), GAME, GAME_ACTION, GAME_PUZZLE, MUSIC_AND_AUDIO, PRODUCTIVITY, SOCIAL, FINANCE, TOOLS, PHOTOGRAPHY. Leave empty for APPLICATION."
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Full Google Play app detail URLs (used in 'startUrls' mode).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "country": {
            "title": "Country",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "IE",
              "NZ",
              "ZA",
              "IN",
              "SG",
              "DE",
              "AT",
              "CH",
              "FR",
              "BE",
              "NL",
              "LU",
              "ES",
              "IT",
              "PT",
              "BR",
              "MX",
              "AR",
              "CL",
              "CO",
              "PE",
              "PL",
              "CZ",
              "SK",
              "HU",
              "RO",
              "BG",
              "GR",
              "HR",
              "SE",
              "NO",
              "DK",
              "FI",
              "EE",
              "LV",
              "LT",
              "JP",
              "KR",
              "TW",
              "HK",
              "TH",
              "VN",
              "ID",
              "MY",
              "PH",
              "TR",
              "RU",
              "UA",
              "SA",
              "AE",
              "EG",
              "IL"
            ],
            "type": "string",
            "description": "Storefront country. Drives currency, ratings and localized metadata.",
            "default": "US"
          },
          "language": {
            "title": "Language (optional)",
            "type": "string",
            "description": "Two-letter UI language override. Leave empty to use the country's default language."
          },
          "priceCountries": {
            "title": "Compare prices across countries",
            "type": "array",
            "description": "Add country codes to fetch each app's price in multiple storefronts in one run (added to a priceByCountry field). Example: [\"US\",\"GB\",\"JP\",\"BR\"]. No competitor offers this.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max apps",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of apps to return.",
            "default": 100
          },
          "priceFilter": {
            "title": "Price",
            "enum": [
              "all",
              "free",
              "paid"
            ],
            "type": "string",
            "description": "Filter by price.",
            "default": "all"
          },
          "minPrice": {
            "title": "Min price",
            "type": "integer",
            "description": "Minimum price in the storefront currency (paid apps)."
          },
          "maxPrice": {
            "title": "Max price",
            "type": "integer",
            "description": "Maximum price in the storefront currency."
          },
          "minScore": {
            "title": "Min rating",
            "type": "integer",
            "description": "Minimum star rating (0–5). Accepts decimals. Apps with no rating are excluded when set."
          },
          "minInstalls": {
            "title": "Min installs",
            "type": "integer",
            "description": "Minimum number of installs."
          },
          "contentRatings": {
            "title": "Content rating",
            "type": "array",
            "description": "Keep only apps whose content rating contains one of these terms (e.g. Everyone, Teen, Mature). Matches across ESRB/PEGI/USK.",
            "items": {
              "type": "string"
            }
          },
          "genres": {
            "title": "Genres",
            "type": "array",
            "description": "Keep only apps whose genre contains one of these terms (e.g. Music, Action, Productivity).",
            "items": {
              "type": "string"
            }
          },
          "adsFilter": {
            "title": "Ads",
            "enum": [
              "all",
              "with",
              "without"
            ],
            "type": "string",
            "description": "Filter by whether the app contains ads.",
            "default": "all"
          },
          "iapFilter": {
            "title": "In-app purchases",
            "enum": [
              "all",
              "with",
              "without"
            ],
            "type": "string",
            "description": "Filter by whether the app offers in-app purchases.",
            "default": "all"
          },
          "includeReviews": {
            "title": "Also fetch reviews",
            "type": "boolean",
            "description": "Fetch reviews for every app the run returns. Works with every mode — search for 50 apps and get their reviews in the same run, no second actor needed. Ignored in 'reviews' mode, which is reviews-only by definition.",
            "default": false
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum reviews to return for each app. Applies to 'reviews' mode and to 'Also fetch reviews'. There is no account-level cap — set this as high as you need.",
            "default": 100
          },
          "sortReviewsBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "mostRelevant",
              "rating"
            ],
            "type": "string",
            "description": "Order in which reviews are pulled. 'newest' is the default because it is the only order that lets a date window be pulled completely. If you set a date filter below, 'newest' is used regardless.",
            "default": "newest"
          },
          "reviewDaysOld": {
            "title": "Reviews from the last N days",
            "minimum": 1,
            "type": "integer",
            "description": "Only return reviews posted within this many days. The scraper stops as soon as it passes the cutoff, so the window is exact and complete — not just whatever appeared in a fixed page budget. Example: 7"
          },
          "reviewsSince": {
            "title": "Reviews since date",
            "type": "string",
            "description": "Only return reviews posted on or after this date, format YYYY-MM-DD. Overrides 'Reviews from the last N days'. Example: 2026-01-01"
          },
          "reviewRatings": {
            "title": "Review star ratings",
            "type": "array",
            "description": "Keep only reviews with these star ratings. Give whole numbers 1 to 5. Leave empty for all ratings. Example: [\"1\",\"2\"] for complaints only.",
            "items": {
              "type": "string"
            }
          },
          "reviewKeywords": {
            "title": "Review keywords",
            "type": "array",
            "description": "Keep only reviews whose text contains at least one of these words, case-insensitive. Leave empty for all reviews. Example: [\"crash\",\"refund\"]",
            "items": {
              "type": "string"
            }
          },
          "reviewsWithReplyOnly": {
            "title": "Only reviews the developer replied to",
            "type": "boolean",
            "description": "Deprecated — use 'Developer reply' instead. Kept so existing runs keep working. When true, behaves the same as Developer reply = 'with'.",
            "default": false
          },
          "reviewsUntil": {
            "title": "Reviews up to date",
            "type": "string",
            "description": "Only return reviews posted on or before this date, format YYYY-MM-DD. Combine with 'Reviews since date' for a closed window. Example: 2026-06-30"
          },
          "reviewReplyFilter": {
            "title": "Developer reply",
            "enum": [
              "all",
              "with",
              "without"
            ],
            "type": "string",
            "description": "Filter on whether the developer replied. 'without' surfaces complaints that were never answered.",
            "default": "all"
          },
          "minReviewLength": {
            "title": "Minimum review length",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only reviews whose text is at least this many characters. Filters out one-word reviews like 'good'. Example: 80"
          },
          "reviewAppVersions": {
            "title": "Review app versions",
            "type": "array",
            "description": "Keep only reviews written against these app versions. Leave empty for all versions. Example: [\"9.1.60.1970\"]",
            "items": {
              "type": "string"
            }
          },
          "minThumbsUp": {
            "title": "Minimum helpful votes",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only reviews with at least this many helpful votes. Filters out low-signal one-word reviews. Example: 5"
          },
          "includePermissions": {
            "title": "Include app permissions",
            "type": "boolean",
            "description": "Fetch the Android permissions each app requests, grouped by category (Identity, Location, Camera, and so on). Adds one request per app. Example: true",
            "default": false
          },
          "includeSimilarApps": {
            "title": "Include similar apps",
            "type": "boolean",
            "description": "Add a similarApps list to every app record — the app IDs Google shows as related on the detail page. Example: true",
            "default": false
          },
          "customMapFunction": {
            "title": "Custom map function",
            "type": "string",
            "description": "Optional JavaScript function applied to every record before it is saved. Receives the record, returns the transformed record, or returns null to drop it. A function that throws is ignored and the raw record is kept. Example: (item) => ({ id: item.appId, stars: item.rating })"
          },
          "proxyConfiguration": {
            "title": "Proxy (optional)",
            "type": "object",
            "description": "Google Play is reachable without a proxy. Proxy is optional and off by default — you do not pay any proxy or compute cost; only per result.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}