{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store & Google Play Reviews Scraper",
    "description": "Scrape thousands of user reviews from the Apple App Store and Google Play by app ID or name. Ratings, text, versions, developer replies, sentiment. For ASO, sentiment analysis & market research. No API key.",
    "version": "1.0",
    "x-build-id": "IfsJvD3Q26gjqUmMc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~app-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-app-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/logiover~app-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-app-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/logiover~app-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-app-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",
        "properties": {
          "store": {
            "title": "Store",
            "enum": [
              "both",
              "google_play",
              "app_store"
            ],
            "type": "string",
            "description": "Which app store(s) to scrape reviews from.",
            "default": "both"
          },
          "appIds": {
            "title": "App IDs / package names",
            "type": "array",
            "description": "One or more apps to scrape. Use the Google Play package name (e.g. 'com.spotify.music') for Google Play and the numeric Apple track ID (e.g. '324684580') for the App Store. You can mix both — Google package names are routed to Google Play and numeric IDs to the App Store. Leave empty to scrape a set of hugely-popular apps.",
            "items": {
              "type": "string"
            }
          },
          "appQuery": {
            "title": "App search query (optional)",
            "type": "string",
            "description": "Optionally resolve an app by name instead of an ID (e.g. 'Duolingo'). The top matching app on each selected store is scraped. Combined with any App IDs above."
          },
          "country": {
            "title": "Country / storefront",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "in",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "br",
              "mx",
              "jp",
              "kr",
              "ru",
              "tr",
              "id",
              "ph",
              "th",
              "vn",
              "sa",
              "ae",
              "za",
              "ng",
              "pl",
              "se",
              "no",
              "dk",
              "fi",
              "pt",
              "ie",
              "nz",
              "sg",
              "hk",
              "tw",
              "ar",
              "cl",
              "co"
            ],
            "type": "string",
            "description": "Primary storefront and language region. Controls the Google Play country and the main App Store storefront. For empty/broad runs the App Store also sweeps several large English storefronts to maximise review volume.",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "ru",
              "tr",
              "ja",
              "ko",
              "zh",
              "ar",
              "hi",
              "id",
              "th",
              "vi",
              "pl",
              "sv",
              "no",
              "da",
              "fi"
            ],
            "type": "string",
            "description": "Language for Google Play reviews (ISO 639-1). Defaults to English.",
            "default": "en"
          },
          "sort": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "helpfulness",
              "rating"
            ],
            "type": "string",
            "description": "Order in which reviews are fetched. 'Most recent' returns the newest reviews first; 'Most helpful' surfaces reviews with the most up-votes (App Store maps this to its 'Most Helpful' feed).",
            "default": "newest"
          },
          "maxReviews": {
            "title": "Max reviews",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Maximum total number of reviews to collect across all apps and stores (default 1000). Raise it to pull more; the run is bounded by a ~4 minute time budget for very large jobs.",
            "default": 1000
          },
          "appleCountries": {
            "title": "App Store storefronts (advanced, optional)",
            "type": "array",
            "description": "Advanced: explicit list of App Store storefront codes to sweep for reviews (e.g. ['us','gb','ca','au','de']). Each storefront exposes up to ~500 reviews per app, so adding storefronts multiplies App Store volume. Leave empty to use sensible defaults.",
            "items": {
              "type": "string"
            }
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy configuration. Automatic proxy works well; the App Store fetcher also falls back to a direct connection if a proxy IP fails.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}