{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Review Scraper",
    "description": "▎ Reading App Store reviews one by one hides what users really think. Scrape reviews for any app in every country: stars, text, app version, helpful votes and developer replies. Filter by rating, date or keyword and track only new reviews. No login.",
    "version": "1.0",
    "x-build-id": "gLHUynAJfDPXxet4U"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawl_craft~apple-app-store-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawl_craft-apple-app-store-review-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/crawl_craft~apple-app-store-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-crawl_craft-apple-app-store-review-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/crawl_craft~apple-app-store-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-crawl_craft-apple-app-store-review-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 Store URLs",
            "type": "array",
            "description": "Paste one or more App Store app links (for example https://apps.apple.com/us/app/tiktok-videos-shop-live/id835599320). Bulk input is supported. The country in a link is used when no storefront is chosen below.",
            "items": {
              "type": "string"
            }
          },
          "appIds": {
            "title": "🆔 App Store IDs",
            "type": "array",
            "description": "Optional extra numeric App Store IDs (the digits after id in an app link, for example 835599320). Added to the links above.",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "🔍 Find apps by name",
            "type": "array",
            "description": "Optional app names to look up, for example habit tracker. The top matches are added to the apps to scrape.",
            "items": {
              "type": "string"
            }
          },
          "searchResultsPerTerm": {
            "title": "🧭 Apps per name search",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many matching apps to take for each name above.",
            "default": 3
          },
          "countries": {
            "title": "🌍 App Store countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Storefronts to read reviews from. Pick several, or pick All storefronts for every country. Leave empty to use the country found in your links, otherwise United States.",
            "items": {
              "type": "string",
              "enum": [
                "all",
                "us",
                "ae",
                "af",
                "ag",
                "ai",
                "al",
                "am",
                "ao",
                "ar",
                "at",
                "au",
                "az",
                "ba",
                "bb",
                "be",
                "bf",
                "bg",
                "bh",
                "bj",
                "bm",
                "bn",
                "bo",
                "br",
                "bs",
                "bt",
                "bw",
                "by",
                "bz",
                "ca",
                "cd",
                "cg",
                "ch",
                "ci",
                "cl",
                "cm",
                "cn",
                "co",
                "cr",
                "cv",
                "cy",
                "cz",
                "de",
                "dk",
                "dm",
                "do",
                "dz",
                "ec",
                "ee",
                "eg",
                "es",
                "fi",
                "fj",
                "fm",
                "fr",
                "ga",
                "gb",
                "gd",
                "ge",
                "gh",
                "gm",
                "gr",
                "gt",
                "gw",
                "gy",
                "hk",
                "hn",
                "hr",
                "hu",
                "id",
                "ie",
                "il",
                "in",
                "iq",
                "is",
                "it",
                "jm",
                "jo",
                "jp",
                "ke",
                "kg",
                "kh",
                "kn",
                "kr",
                "kw",
                "ky",
                "kz",
                "la",
                "lb",
                "lc",
                "lk",
                "lr",
                "lt",
                "lu",
                "lv",
                "ly",
                "ma",
                "md",
                "me",
                "mg",
                "mk",
                "ml",
                "mm",
                "mn",
                "mo",
                "mr",
                "ms",
                "mt",
                "mu",
                "mv",
                "mw",
                "mx",
                "my",
                "mz",
                "na",
                "ne",
                "ng",
                "ni",
                "nl",
                "no",
                "np",
                "nr",
                "nz",
                "om",
                "pa",
                "pe",
                "pg",
                "ph",
                "pk",
                "pl",
                "pt",
                "pw",
                "py",
                "qa",
                "ro",
                "rs",
                "ru",
                "rw",
                "sa",
                "sb",
                "sc",
                "se",
                "sg",
                "si",
                "sk",
                "sl",
                "sn",
                "sr",
                "st",
                "sv",
                "sz",
                "tc",
                "td",
                "th",
                "tj",
                "tm",
                "tn",
                "to",
                "tr",
                "tt",
                "tw",
                "tz",
                "ua",
                "ug",
                "uy",
                "uz",
                "vc",
                "ve",
                "vg",
                "vn",
                "vu",
                "xk",
                "ye",
                "za",
                "zm",
                "zw"
              ],
              "enumTitles": [
                "All storefronts (every country)",
                "United States (us)",
                "United Arab Emirates (ae)",
                "Afghanistan (af)",
                "Antigua and Barbuda (ag)",
                "Anguilla (ai)",
                "Albania (al)",
                "Armenia (am)",
                "Angola (ao)",
                "Argentina (ar)",
                "Austria (at)",
                "Australia (au)",
                "Azerbaijan (az)",
                "Bosnia and Herzegovina (ba)",
                "Barbados (bb)",
                "Belgium (be)",
                "Burkina Faso (bf)",
                "Bulgaria (bg)",
                "Bahrain (bh)",
                "Benin (bj)",
                "Bermuda (bm)",
                "Brunei (bn)",
                "Bolivia (bo)",
                "Brazil (br)",
                "Bahamas (bs)",
                "Bhutan (bt)",
                "Botswana (bw)",
                "Belarus (by)",
                "Belize (bz)",
                "Canada (ca)",
                "Congo (DRC) (cd)",
                "Congo (Republic) (cg)",
                "Switzerland (ch)",
                "Cote d'Ivoire (ci)",
                "Chile (cl)",
                "Cameroon (cm)",
                "China (cn)",
                "Colombia (co)",
                "Costa Rica (cr)",
                "Cape Verde (cv)",
                "Cyprus (cy)",
                "Czech Republic (cz)",
                "Germany (de)",
                "Denmark (dk)",
                "Dominica (dm)",
                "Dominican Republic (do)",
                "Algeria (dz)",
                "Ecuador (ec)",
                "Estonia (ee)",
                "Egypt (eg)",
                "Spain (es)",
                "Finland (fi)",
                "Fiji (fj)",
                "Micronesia (fm)",
                "France (fr)",
                "Gabon (ga)",
                "United Kingdom (gb)",
                "Grenada (gd)",
                "Georgia (ge)",
                "Ghana (gh)",
                "Gambia (gm)",
                "Greece (gr)",
                "Guatemala (gt)",
                "Guinea-Bissau (gw)",
                "Guyana (gy)",
                "Hong Kong (hk)",
                "Honduras (hn)",
                "Croatia (hr)",
                "Hungary (hu)",
                "Indonesia (id)",
                "Ireland (ie)",
                "Israel (il)",
                "India (in)",
                "Iraq (iq)",
                "Iceland (is)",
                "Italy (it)",
                "Jamaica (jm)",
                "Jordan (jo)",
                "Japan (jp)",
                "Kenya (ke)",
                "Kyrgyzstan (kg)",
                "Cambodia (kh)",
                "Saint Kitts and Nevis (kn)",
                "South Korea (kr)",
                "Kuwait (kw)",
                "Cayman Islands (ky)",
                "Kazakhstan (kz)",
                "Laos (la)",
                "Lebanon (lb)",
                "Saint Lucia (lc)",
                "Sri Lanka (lk)",
                "Liberia (lr)",
                "Lithuania (lt)",
                "Luxembourg (lu)",
                "Latvia (lv)",
                "Libya (ly)",
                "Morocco (ma)",
                "Moldova (md)",
                "Montenegro (me)",
                "Madagascar (mg)",
                "North Macedonia (mk)",
                "Mali (ml)",
                "Myanmar (mm)",
                "Mongolia (mn)",
                "Macao (mo)",
                "Mauritania (mr)",
                "Montserrat (ms)",
                "Malta (mt)",
                "Mauritius (mu)",
                "Maldives (mv)",
                "Malawi (mw)",
                "Mexico (mx)",
                "Malaysia (my)",
                "Mozambique (mz)",
                "Namibia (na)",
                "Niger (ne)",
                "Nigeria (ng)",
                "Nicaragua (ni)",
                "Netherlands (nl)",
                "Norway (no)",
                "Nepal (np)",
                "Nauru (nr)",
                "New Zealand (nz)",
                "Oman (om)",
                "Panama (pa)",
                "Peru (pe)",
                "Papua New Guinea (pg)",
                "Philippines (ph)",
                "Pakistan (pk)",
                "Poland (pl)",
                "Portugal (pt)",
                "Palau (pw)",
                "Paraguay (py)",
                "Qatar (qa)",
                "Romania (ro)",
                "Serbia (rs)",
                "Russia (ru)",
                "Rwanda (rw)",
                "Saudi Arabia (sa)",
                "Solomon Islands (sb)",
                "Seychelles (sc)",
                "Sweden (se)",
                "Singapore (sg)",
                "Slovenia (si)",
                "Slovakia (sk)",
                "Sierra Leone (sl)",
                "Senegal (sn)",
                "Suriname (sr)",
                "Sao Tome and Principe (st)",
                "El Salvador (sv)",
                "Eswatini (sz)",
                "Turks and Caicos (tc)",
                "Chad (td)",
                "Thailand (th)",
                "Tajikistan (tj)",
                "Turkmenistan (tm)",
                "Tunisia (tn)",
                "Tonga (to)",
                "Turkey (tr)",
                "Trinidad and Tobago (tt)",
                "Taiwan (tw)",
                "Tanzania (tz)",
                "Ukraine (ua)",
                "Uganda (ug)",
                "Uruguay (uy)",
                "Uzbekistan (uz)",
                "Saint Vincent and the Grenadines (vc)",
                "Venezuela (ve)",
                "British Virgin Islands (vg)",
                "Vietnam (vn)",
                "Vanuatu (vu)",
                "Kosovo (xk)",
                "Yemen (ye)",
                "South Africa (za)",
                "Zambia (zm)",
                "Zimbabwe (zw)"
              ]
            },
            "default": [
              "us"
            ]
          },
          "sort": {
            "title": "🔃 Review order",
            "enum": [
              "recent",
              "helpful",
              "favorable",
              "critical"
            ],
            "type": "string",
            "description": "Newest first is the default. Monitoring runs always use newest first.",
            "default": "recent"
          },
          "maxItems": {
            "title": "🔢 Max reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of reviews saved in one run across all apps and countries. 0 means the full available history. Free plan users are limited to 10 reviews per run; paid plans have no limit.",
            "default": 10
          },
          "sinceDate": {
            "title": "📅 Reviews written since",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(minute|hour|day|week|month|year)s?(\\s+ago)?$",
            "type": "string",
            "description": "Keep only reviews on or after this date. Use YYYY-MM-DD or a relative value such as 30 days."
          },
          "untilDate": {
            "title": "⌛ Reviews written until",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(minute|hour|day|week|month|year)s?(\\s+ago)?$",
            "type": "string",
            "description": "Keep only reviews on or before this date. Use YYYY-MM-DD or a relative value such as 7 days."
          },
          "minRating": {
            "title": "🔽 Lowest star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep reviews with at least this many stars (1 to 5). Leave empty for no lower limit."
          },
          "maxRating": {
            "title": "🔼 Highest star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep reviews with at most this many stars (1 to 5). Leave empty for no upper limit."
          },
          "keywords": {
            "title": "💬 Must mention a keyword",
            "type": "array",
            "description": "Keep only reviews whose title or text contains at least one of these whole words or phrases.",
            "items": {
              "type": "string"
            }
          },
          "developerResponse": {
            "title": "🎤 Developer reply filter",
            "enum": [
              "any",
              "with",
              "without"
            ],
            "type": "string",
            "description": "Choose whether to keep every review, only reviews the developer answered, or only unanswered reviews.",
            "default": "any"
          },
          "editedOnly": {
            "title": "📝 Edited reviews only",
            "type": "boolean",
            "description": "Keep only reviews that the reviewer edited after posting.",
            "default": false
          },
          "incremental": {
            "title": "🔔 Only new reviews since last run",
            "type": "boolean",
            "description": "Monitoring mode: remember the newest review per app and country and return only newer reviews on the next run. Uses newest-first order.",
            "default": false
          },
          "includeAppName": {
            "title": "📛 Add app name",
            "type": "boolean",
            "description": "Add the app name to every review row.",
            "default": true
          },
          "includeAppInfo": {
            "title": "📊 Add full app details",
            "type": "boolean",
            "description": "Add a nested app object to every review with rating, rating histogram, version, bundle ID, price and genres.",
            "default": false
          },
          "includeDeveloperResponse": {
            "title": "💼 Add developer reply",
            "type": "boolean",
            "description": "Add the developer reply and the reply time in hours to every review row. Needed for the Developer replies table and the reply rate in the app summary.",
            "default": true
          },
          "includeVotes": {
            "title": "👍 Add helpful votes",
            "type": "boolean",
            "description": "Add helpful and total vote counts to every review row.",
            "default": true
          },
          "includeTextStats": {
            "title": "🔤 Add word count",
            "type": "boolean",
            "description": "Add the word count of the review text to every review row.",
            "default": true
          },
          "writeSummary": {
            "title": "📈 Save app summary",
            "type": "boolean",
            "description": "Save one summary row per app and country (average score, score distribution, reply rate) in its own table and as the SUMMARY file.",
            "default": true
          },
          "exportCsv": {
            "title": "📄 Also save a CSV file",
            "type": "boolean",
            "description": "Save the reviews as a flattened reviews.csv file in the key-value store at the end of the run.",
            "default": false
          },
          "source": {
            "title": "🧰 Review source",
            "enum": [
              "auto",
              "legacy",
              "api",
              "rss"
            ],
            "type": "string",
            "description": "Leave on Automatic for the best result in each country. The other choices limit the run to one kind of review data.",
            "default": "auto"
          },
          "enrichFromRss": {
            "title": "🔖 Add app version when available",
            "type": "boolean",
            "description": "Add the app version, reviewer link and vote counts to the newest reviews when available.",
            "default": true
          },
          "maxScanned": {
            "title": "🔭 Max reviews examined",
            "minimum": 0,
            "type": "integer",
            "description": "Stop reading an app and country after this many reviews have been checked against your filters. 0 means no limit.",
            "default": 20000
          },
          "requestsPerSecond": {
            "title": "🚦 Requests per second",
            "minimum": 0.2,
            "maximum": 20,
            "type": "number",
            "description": "Overall speed of the run, shared by all parallel jobs. Lower it for a gentler run.",
            "default": 3
          },
          "concurrency": {
            "title": "⚡ Parallel app and country jobs",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many app and country combinations are read at the same time.",
            "default": 4
          },
          "maxRetries": {
            "title": "🔁 Retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times the run tries again after a failed attempt. 0 means no retries.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Proxy settings are optional. Leave the default if you are unsure.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}