{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Reviews Scraper API & App Data – $0.06/1K, No Login",
    "description": "Apple App Store scraper and iOS app reviews API, no login. Reviews past the 500 RSS cap (stars, text, version, developer reply), app details with rating histogram, privacy labels, in-app purchases, version history and similar apps, plus search ranks and top charts in 72 countries. $0.06/1K reviews.",
    "version": "0.2",
    "x-build-id": "05vN3NmLrdbRFVuhd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/k-data-lab~app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-k-data-lab-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/k-data-lab~app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-k-data-lab-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/k-data-lab~app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-k-data-lab-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": {
          "apps": {
            "title": "📱 Apps (App Store links, ids or bundle ids)",
            "type": "array",
            "description": "Apps to scrape, one per item: an App Store link, the numeric app id from the link (the digits after \"id\"), or the bundle id. Each returns the app record (rating, star histogram, price, version, privacy labels, in-app purchases, version history …) plus its reviews. Example: [\"https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580\", \"310633997\", \"com.duolingo.DuolingoMobile\"]. Use this, search terms, developers or charts (at least one).",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "🌍 Countries",
            "type": "array",
            "description": "App Store countries to scrape (two-letter codes). Reviews, prices and charts differ per country, so every app is scraped in every country you pick and each row says which country it came from. Example: [\"us\", \"gb\", \"de\"]. Default: us.",
            "items": {
              "type": "string",
              "enum": [
                "us",
                "gb",
                "ca",
                "au",
                "nz",
                "ie",
                "in",
                "sg",
                "de",
                "fr",
                "it",
                "es",
                "nl",
                "be",
                "lu",
                "at",
                "ch",
                "pt",
                "se",
                "no",
                "dk",
                "fi",
                "pl",
                "cz",
                "sk",
                "hu",
                "ro",
                "bg",
                "gr",
                "hr",
                "si",
                "ee",
                "lv",
                "lt",
                "ua",
                "ru",
                "kz",
                "tr",
                "il",
                "sa",
                "ae",
                "qa",
                "kw",
                "eg",
                "ma",
                "ng",
                "ke",
                "za",
                "jp",
                "kr",
                "cn",
                "tw",
                "hk",
                "my",
                "th",
                "id",
                "ph",
                "vn",
                "pk",
                "lk",
                "br",
                "mx",
                "ar",
                "cl",
                "co",
                "pe",
                "ve",
                "ec",
                "uy",
                "cr",
                "gt",
                "do"
              ]
            },
            "default": [
              "us"
            ]
          },
          "searchTerms": {
            "title": "🔎 Search terms",
            "type": "array",
            "description": "Keywords to search the App Store for, like a visitor typing in the search box. Each term returns its top apps with their rank (Apple returns up to 200 per term), so you can track keyword positions. Example: [\"vpn\", \"budget planner\"].",
            "items": {
              "type": "string"
            }
          },
          "developers": {
            "title": "👩‍💻 Developers",
            "type": "array",
            "description": "Developer page links or numeric developer ids. Returns every app the developer publishes in that country. Example: [\"https://apps.apple.com/us/developer/spotify/id324684583\", \"284882218\"].",
            "items": {
              "type": "string"
            }
          },
          "charts": {
            "title": "🏆 Top charts",
            "type": "array",
            "description": "Apple's top charts to read (up to 100 ranked apps each, per country): top free / paid / grossing for iPhone and iPad, and top free for Mac. Example: [\"top-free-iphone\", \"top-grossing-iphone\"].",
            "items": {
              "type": "string",
              "enum": [
                "top-free-iphone",
                "top-paid-iphone",
                "top-grossing-iphone",
                "top-free-ipad",
                "top-paid-ipad",
                "top-grossing-ipad",
                "top-free-mac"
              ],
              "enumTitles": [
                "Top free – iPhone",
                "Top paid – iPhone",
                "Top grossing – iPhone",
                "Top free – iPad",
                "Top paid – iPad",
                "Top grossing – iPad",
                "Top free – Mac"
              ]
            }
          },
          "chartCategory": {
            "title": "Chart category",
            "enum": [
              "",
              "6000",
              "6017",
              "6016",
              "6015",
              "6023",
              "6014",
              "7001",
              "7002",
              "7003",
              "7004",
              "7005",
              "7006",
              "7009",
              "7012",
              "7013",
              "7014",
              "7015",
              "7016",
              "7017",
              "7018",
              "7019",
              "6026",
              "6027",
              "6013",
              "6012",
              "6021",
              "6020",
              "6011",
              "6010",
              "6009",
              "6008",
              "6007",
              "6006",
              "6024",
              "6005",
              "6004",
              "6003",
              "6002",
              "6001",
              "6018"
            ],
            "type": "string",
            "description": "Category for iPhone and iPad charts. Mac charts always use all categories. Example: \"6014\" for Games.",
            "default": ""
          },
          "maxAppsPerList": {
            "title": "Max apps per search term, developer or chart",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Upper limit of apps for each search term, developer or chart, per country (1–200). Apple returns up to 200 apps per search term and 100 per chart. Example: 10.",
            "default": 50
          },
          "reviewsForListedApps": {
            "title": "Also get reviews for apps found by search, developer or chart",
            "type": "boolean",
            "description": "Off: searches, developers and charts return app records only (cheap ranking data). On: each listed app also gets up to \"Max reviews per app\" reviews.",
            "default": false
          },
          "maxReviewsPerApp": {
            "title": "⭐ Max reviews per app (per country)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "How many reviews to return for each app in each country. Reviews are read deep into the history (not capped at 500). 0 = app records only, no reviews. Example: 1000 for a large sample, 0 for app metadata only.",
            "default": 100
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "helpful",
              "favorable",
              "critical"
            ],
            "type": "string",
            "description": "Review order: newest first (best for monitoring), most helpful, most favorable (high stars first) or most critical (low stars first). Example: \"newest\".",
            "default": "newest"
          },
          "reviewStars": {
            "title": "Only these star ratings",
            "type": "array",
            "description": "Return only reviews with these star ratings, as strings \"1\"–\"5\". Example: [\"1\", \"2\"] for complaints. Leave empty for all ratings. Tip: combine 1–2 stars with \"Most critical\" sort to find them fastest.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "★",
                "★★",
                "★★★",
                "★★★★",
                "★★★★★"
              ]
            }
          },
          "reviewsSince": {
            "title": "Only reviews since",
            "type": "string",
            "description": "Return only reviews posted on or after this date: a date (2026-10-01) or a period back from now (\"7 days\", \"2 weeks\", \"12 hours\"). With newest-first sort the run stops as soon as it reaches older reviews, so daily monitoring runs are fast and cheap. Example: \"7 days\"."
          },
          "onlyWithDeveloperReply": {
            "title": "Only reviews with a developer reply",
            "type": "boolean",
            "description": "Return only reviews the app's developer publicly answered (the reply text and date are in every review row anyway).",
            "default": false
          },
          "includeAppVersion": {
            "title": "Add app version to recent reviews",
            "type": "boolean",
            "description": "Fills appVersion for the newest (or most helpful) 500 reviews per app and country, from Apple's review RSS feed. Apple publishes no version for older reviews (null). Free, a few extra requests.",
            "default": true
          },
          "onlyReviews": {
            "title": "Only reviews (skip app records)",
            "type": "boolean",
            "description": "Return review rows only, no app record rows, for apps you listed above. App records found by search/developer/chart are still returned.",
            "default": false
          },
          "includeHistogram": {
            "title": "Add star histogram, privacy labels, in-app purchases, version history & similar apps",
            "type": "boolean",
            "description": "Reads each app's public App Store page (one extra request per app and country) and fills: histogram (ratings per star 1–5), privacyLabels / privacyTypes / tracksUser / privacyPolicyUrl (Apple's App Privacy labels), inAppPurchases + hasInAppPurchases (name and local price), versionHistory (newest 25 versions with date and release notes) and similarApps (Apple's \"You Might Also Like\"). Only for the apps you list in Apps, not for apps found by search, developer or chart. Turn off for the cheapest, fastest app records.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apple answers fine without a proxy; the actor starts direct and switches to Apify Proxy only if Apple starts refusing. Leave the default.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}