{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Scraper: App Details, Reviews, Search",
    "description": "Apple App Store scraper: app details, customer reviews, keyword search and developer apps for any country. Reviews filtered by stars, date, keyword and version. Developer website in every app row. No login.",
    "version": "0.1",
    "x-build-id": "GvQSpQHIxEZS7l9Su"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagleaner~app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagleaner-app-store-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/datagleaner~app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datagleaner-app-store-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/datagleaner~app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datagleaner-app-store-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, bundle IDs or URLs (details)",
            "type": "array",
            "description": "Details mode: numeric App Store IDs (`324684580`), bundle IDs (`com.spotify.client`) or App Store URLs (`https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580`). Each returns one app record. Apps that do not exist in the chosen country are skipped and not charged.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Search mode: keywords as you would type them in the App Store, e.g. `habit tracker`. Each returns up to `maxItems` apps in store rank order, with full details.",
            "items": {
              "type": "string"
            }
          },
          "developerIds": {
            "title": "Developer names, IDs or page URLs (their apps)",
            "type": "array",
            "description": "Developer mode: a developer name as shown on the App Store (`Spotify AB`), a numeric developer ID (`324684583`) or a developer page URL (`https://apps.apple.com/us/developer/spotify/id324684583`). Returns the apps that developer publishes, up to `maxItems`. Records carry `developerQuery`.",
            "items": {
              "type": "string"
            }
          },
          "reviewAppIds": {
            "title": "App IDs, bundle IDs or URLs (reviews)",
            "type": "array",
            "description": "Reviews mode: apps whose customer reviews to fetch, as numeric IDs, bundle IDs or URLs. Returns review records only (no app record), up to `maxReviews` each per country. Narrow them with `reviewScore`, `reviewsSince`, `reviewsLastDays`, `reviewKeywords` and `reviewVersions`.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max apps per keyword or developer",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Stops after this many apps for each keyword in `searchQueries` and each developer in `developerIds`, per country. The App Store API returns at most 200 results per keyword.",
            "default": 30
          },
          "maxReviews": {
            "title": "Max reviews per app and country",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Reviews to keep for each app in `reviewAppIds` and each country (after filters). Apple's review feed holds the newest 500 reviews of an app per country (10 pages of 50), so 500 is the most one app and country can return; list several countries in `country` for more.",
            "default": 100
          },
          "reviewSort": {
            "title": "Review sort",
            "enum": [
              "newest",
              "helpful"
            ],
            "type": "string",
            "description": "Order of the reviews: newest first (best for monitoring) or most helpful first. Apple's feed has no sort by rating; use `reviewScore` to keep one star level.",
            "default": "newest"
          },
          "reviewScore": {
            "title": "Only reviews with this many stars",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Optional. Keep only reviews with exactly this star rating, e.g. `1` to monitor complaints. Leave empty for all ratings."
          },
          "reviewsSince": {
            "title": "Only reviews since this date",
            "type": "string",
            "description": "Optional. `YYYY-MM-DD` (or ISO date-time, UTC if no zone). Skips older reviews; with newest-first sort the run also stops reading at the first older page, so a daily monitor costs one or two requests."
          },
          "reviewsLastDays": {
            "title": "Only reviews from the last N days",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. For example `7` for the past week. If you also set a date, the later cut-off applies."
          },
          "reviewKeywords": {
            "title": "Only reviews mentioning any of these words",
            "type": "array",
            "description": "Optional. Keeps reviews whose title or text contains any of the words, case-insensitive, e.g. `crash`, `refund`, `login`. Only matching reviews are returned and charged.",
            "items": {
              "type": "string"
            }
          },
          "reviewVersions": {
            "title": "Only reviews of these app versions",
            "type": "array",
            "description": "Optional. Keeps reviews whose app version starts with one of these, e.g. `9.1` matches `9.1.90.2270`. Use it to check a release.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Store country (or several)",
            "type": "string",
            "description": "Two-letter country code of the App Store to read, e.g. `US`, `GB`, `DE`, `JP`. Give several separated by commas (`US, GB, DE`) to run every mode in each store: one set of records per country. It changes prices, availability, ratings and which reviews appear.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language code for store text, e.g. `en`, `de`, `ja`, `pt-BR`. Changes localised fields such as category names; review text stays in the language it was written in.",
            "default": "en"
          },
          "entity": {
            "title": "Search and developer entity",
            "enum": [
              "software",
              "iPadSoftware",
              "macSoftware"
            ],
            "type": "string",
            "description": "Which apps keyword search and developer mode return. App IDs always resolve to whatever the ID is.",
            "default": "software"
          },
          "requestDelaySecs": {
            "title": "Delay between requests (seconds)",
            "minimum": 0.1,
            "type": "number",
            "description": "Polite pacing. Lower is faster and raises the chance of being blocked.",
            "default": 0.5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Off by default: Apple's API answered Apify datacenter IPs in testing. Enable a proxy if runs start getting blocked at high volume."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}