{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Reviews Scraper - iOS & macOS Reviews",
    "description": "Scrape Apple App Store reviews for any iOS/macOS app across multiple countries in one run. Get ratings, titles, bodies, authors, versions, dates, votes, and URLs with rating, date, and keyword filters applied before billing. No login, no cookies, no external API keys.",
    "version": "1.0",
    "x-build-id": "1y5Qny4js0cvFkPNM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~appstore-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-appstore-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/khadinakbar~appstore-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-appstore-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/khadinakbar~appstore-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-appstore-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": [
          "appIds"
        ],
        "properties": {
          "appIds": {
            "title": "App Store apps",
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "description": "Add one or more Apple App Store apps per line. Accept numeric App IDs (e.g. 324684580) or full app URLs (e.g. https://apps.apple.com/us/app/spotify/id324684580). URL ids and numeric ids are both reduced to the numeric ID. Duplicate apps are processed once. Apple caps each app at 500 reviews per country storefront.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": [
              "324684580"
            ]
          },
          "countries": {
            "title": "Country storefronts",
            "maxItems": 175,
            "uniqueItems": true,
            "type": "array",
            "description": "One or more lowercase two-letter App Store storefront codes (e.g. us, gb, de, jp, fr). Reviews are fetched from every selected country in a single run; identical reviews across storefronts are deduplicated. Apple returns at most 500 reviews per app per country. Defaults to United States.",
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            },
            "default": [
              "us"
            ]
          },
          "sortBy": {
            "title": "Review order",
            "enum": [
              "mostRecent",
              "mostHelpful"
            ],
            "type": "string",
            "description": "Controls the order Apple returns reviews. Most recent prioritizes fresh feedback for monitoring. Most helpful prioritizes reviews with more helpfulness votes for signal extraction.",
            "default": "mostRecent"
          },
          "maxReviewsPerApp": {
            "title": "Maximum reviews per app per country",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Caps paid review rows for each app within each country storefront. Apple's RSS feed itself returns at most 500 reviews per app per country, so 1-500 is the effective range. Lower this for lightweight monitoring.",
            "default": 500
          },
          "maxReviews": {
            "title": "Maximum reviews for the run",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Sets the hard billing and output cap across all apps and countries. The Actor checks this limit before every paid dataset write. The default of 1000 costs at most $0.50 in review events.",
            "default": 1000
          },
          "ratingFilter": {
            "title": "Star ratings",
            "maxItems": 5,
            "uniqueItems": true,
            "type": "array",
            "description": "Optionally list exact star ratings to include, such as [1] for one-star alerts or [4, 5] for testimonials. Leave the array empty to include every rating. Values must be unique integers from 1 through 5. Filtering happens before billing so non-matching reviews are not charged.",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5
            },
            "default": []
          },
          "dateFrom": {
            "title": "Date from",
            "type": "string",
            "description": "Optionally keep only reviews dated on or after this ISO 8601 date (e.g. 2026-01-01). Used for release-impact tracking and regression alerting. Filtering happens before billing. Leave empty for no lower bound.",
            "default": ""
          },
          "dateTo": {
            "title": "Date to",
            "type": "string",
            "description": "Optionally keep only reviews dated on or before this ISO 8601 date (e.g. 2026-12-31). Filtering happens before billing. Leave empty for no upper bound.",
            "default": ""
          },
          "keywords": {
            "title": "Keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Optionally keep only reviews whose title or body contains at least one of these case-insensitive substrings (e.g. crash, login, 課金). Useful for surfacing bug reports and feature requests. Filtering happens before billing. Leave the array empty to disable keyword filtering.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "minVoteSum": {
            "title": "Minimum helpful vote sum",
            "minimum": 0,
            "type": "integer",
            "description": "Optionally keep only reviews whose Apple helpfulness vote sum is at least this integer. Use to surface the most widely-endorsed feedback. Filtering happens before billing. Set to 0 (default) to disable.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}