{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Reviews Scraper - Ratings, App Data & Top Charts",
    "description": "Scrape Apple App Store reviews, ratings, star histograms, app details and top free, paid & grossing charts for many countries in one run. $1 per 1,000 rows.",
    "version": "0.1",
    "x-build-id": "9XTEK1wag3Wyeg76C"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/deanko~appstore-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-deanko-appstore-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/deanko~appstore-scraper/runs": {
      "post": {
        "operationId": "runs-sync-deanko-appstore-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/deanko~appstore-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-deanko-appstore-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": "App IDs or App Store URLs",
            "type": "array",
            "description": "Apps to scrape, as numeric App Store IDs (310633997), 'id310633997', or full App Store URLs (https://apps.apple.com/us/app/whatsapp-messenger/id310633997). Each app gives one 'app' row per country plus its reviews. If App IDs, Search terms and Top charts are all empty, WhatsApp is used as a demo.",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Optional. Find apps by keyword (iTunes Search API), e.g. 'habit tracker' or 'budget app'. The top results per term are scraped like App IDs (details + reviews). Handy for competitor research when you don't know the IDs.",
            "items": {
              "type": "string"
            }
          },
          "searchResultsPerTerm": {
            "title": "Apps per search term",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many top search results to scrape for each search term, per country. Default 5.",
            "default": 5
          },
          "countries": {
            "title": "Countries (storefronts)",
            "type": "array",
            "description": "Two-letter App Store country codes (ISO 3166-1 alpha-2), e.g. us, gb, de, fr, jp, kr, br, in. Everything is fetched separately for each storefront, because ratings, prices, charts and reviews differ per country. Default: us.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeAppDetails": {
            "title": "Include app details",
            "type": "boolean",
            "description": "Output one 'app' row per app and country: name, developer, bundle ID, price, average rating, rating count, 1-5 star histogram, current-version rating, version, release notes, genre, size, languages and more.",
            "default": true
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Output 'review' rows: rating, title, text, date, app version and vote counts where available. Sources: Apple's customer reviews RSS (up to 500 most recent per storefront) and, when the RSS returns nothing, the featured reviews shown on the public App Store product page (about 10 per app and country). Reviewer names are never collected.",
            "default": true
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app (per country)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum reviews per app and country, newest first. Apple's reviews feed exposes at most the 500 most recent reviews per storefront; if the feed is empty the actor falls back to the ~10 featured reviews on the product page. Default 50.",
            "default": 50
          },
          "charts": {
            "title": "Top charts",
            "type": "array",
            "description": "Optional. Also scrape these top charts (up to 100 ranked apps each) for every selected country. Each chart row has rank, app ID, name, bundle ID, developer, price and category.",
            "items": {
              "type": "string",
              "enum": [
                "top-free",
                "top-paid",
                "top-grossing"
              ],
              "enumTitles": [
                "Top Free",
                "Top Paid",
                "Top Grossing"
              ]
            },
            "default": []
          },
          "chartGenreId": {
            "title": "Chart genre",
            "enum": [
              "",
              "6000",
              "6001",
              "6002",
              "6003",
              "6004",
              "6005",
              "6006",
              "6007",
              "6008",
              "6009",
              "6010",
              "6011",
              "6012",
              "6013",
              "6014",
              "6015",
              "6016",
              "6017",
              "6018",
              "6020",
              "6021",
              "6023",
              "6024",
              "6026",
              "6027"
            ],
            "type": "string",
            "description": "Limit top charts to one App Store category (e.g. Games, Finance, Health & Fitness). 'All apps' returns the overall charts. Only used when Top charts is set.",
            "default": ""
          },
          "chartLimit": {
            "title": "Apps per chart",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many ranked apps to return per chart (Apple returns at most 100).",
            "default": 100
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard cap on rows in total (apps + reviews + chart entries) across all countries. You pay per row, so this is also your cost cap: 1,000 rows = $1. Default 1000.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}