{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Reviews Scraper — Ratings, Versions & Countries",
    "description": "Export Apple App Store reviews for any iOS app: rating, title, text, app version, date and country. Multi-country, rating and date filters, via Apple's own public feeds. For app developers, ASO and product research.",
    "version": "0.1",
    "x-build-id": "QvcIDQzcbTj7N0MFS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lukehunter~app-store-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lukehunter-app-store-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/lukehunter~app-store-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lukehunter-app-store-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/lukehunter~app-store-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lukehunter-app-store-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",
        "required": [
          "apps"
        ],
        "properties": {
          "apps": {
            "title": "Apps",
            "maxItems": 20,
            "type": "array",
            "description": "App Store apps to scrape reviews for: a full App Store URL (https://apps.apple.com/us/app/facebook/id284882215), a bare numeric App Store id (284882215), or a free-text search term resolved to its top App Store match (see \"Resolve search terms\"). Maximum 20 apps per run.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "maxItems": 20,
            "type": "array",
            "description": "ISO-2 App Store storefront country codes to fetch reviews from, e.g. \"us\", \"gb\", \"jp\". Each app's reviews are fetched separately per country. Default [\"us\"]. Maximum 20 countries per run.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "minRating": {
            "title": "Minimum star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only deliver reviews rated at least this many stars, 1-5. Leave empty for no minimum."
          },
          "maxRating": {
            "title": "Maximum star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Only deliver reviews rated at most this many stars, 1-5. Leave empty for no maximum."
          },
          "sinceDate": {
            "title": "Only reviews since",
            "type": "string",
            "description": "Only deliver reviews updated/posted on or after this date (e.g. 2026-01-01). Leave empty for no date filter. The feed is read most-recent-first, so this also stops paging early once older reviews are reached."
          },
          "maxReviewsPerApp": {
            "title": "Maximum reviews per app per country",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cap on reviews delivered for one app in one country, 1-500, default 500. Apple's own customer-reviews feed exposes at most 500 (10 pages of 50) most-recent reviews per app per country, so this cannot be set higher.",
            "default": 500
          },
          "maxItems": {
            "title": "Maximum reviews (total)",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Hard cap on reviews delivered across every app and country in this run, 1-20000, default 100. You are charged per delivered review, so this is your cost cap.",
            "default": 100
          },
          "includeAppDetails": {
            "title": "Include app details",
            "type": "boolean",
            "description": "Attach appName, developer, averageRating, ratingCount and currentVersion (from the iTunes Lookup API) to every review row. Adds one extra, unbilled request per app. Off by default.",
            "default": false
          },
          "resolveSearchTerms": {
            "title": "Resolve search terms",
            "type": "boolean",
            "description": "When an \"apps\" entry is not a URL or numeric id, resolve it to the iTunes Search API's top matching app. Turn off to require every \"apps\" entry to already be a URL or id (the run fails loudly instead of guessing an app from a term).",
            "default": true
          },
          "onlyNewSinceLastRun": {
            "title": "Review alerts: only new reviews since last run",
            "type": "boolean",
            "description": "Turn this on and run the Actor on a schedule to get only reviews you haven't seen before: reviews already delivered on a previous run for the same apps/countries/rating/date filters are skipped and never charged again. The first run for a given search delivers everything (it's all new) and remembers it; later runs only deliver what's new since then. Combine with \"Maximum star rating\" (e.g. 2) and a webhook to route only new low-rated reviews to Slack. Off by default so a one-off run always gets the full current results.",
            "default": false
          },
          "stateStoreName": {
            "title": "Review alerts: state store name",
            "type": "string",
            "description": "Only used when \"Review alerts\" is on. Name of the key-value store that remembers which reviews this search has already delivered, so it persists across scheduled runs. Leave as the default unless you're running several different alert searches that must not share history — give each its own name in that case. Letters, numbers and hyphens only.",
            "default": "app-store-reviews-scraper-seen-reviews"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}