{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Scraper",
    "description": "Scrape Apple App Store category charts, full app details, reviews, keyword search-rank, and similar-apps. Built for app-market research: competitor density, positioning, review sentiment, and keyword landscape before committing engineering time to a new app.",
    "version": "1.1",
    "x-build-id": "CYS8d1VWya78d0YkQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datasiphon~apple-app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datasiphon-apple-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/datasiphon~apple-app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datasiphon-apple-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/datasiphon~apple-app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datasiphon-apple-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": {
          "mode": {
            "title": "Scraping mode",
            "enum": [
              "charts",
              "details",
              "reviews",
              "search",
              "similar",
              "all"
            ],
            "type": "string",
            "description": "What to scrape. 'charts' = category/collection listings; 'details' = full app details for given appIds; 'reviews' = reviews for given appIds; 'search' = keyword search-rank; 'similar' = related apps. 'all' runs charts → details → reviews in one run.",
            "default": "all"
          },
          "categories": {
            "title": "Categories to scrape",
            "type": "array",
            "description": "App Store genres. Use 'ALL' to scrape all 70 categories. Defaults to a few common ones for a quick sample.",
            "items": {
              "type": "string",
              "enum": [
                "ALL",
                "BOOKS",
                "BUSINESS",
                "CATALOGS",
                "EDUCATION",
                "ENTERTAINMENT",
                "FINANCE",
                "FOOD_AND_DRINK",
                "GAMES",
                "GAMES_ACTION",
                "GAMES_ADVENTURE",
                "GAMES_ARCADE",
                "GAMES_BOARD",
                "GAMES_CARD",
                "GAMES_CASINO",
                "GAMES_DICE",
                "GAMES_EDUCATIONAL",
                "GAMES_FAMILY",
                "GAMES_MUSIC",
                "GAMES_PUZZLE",
                "GAMES_RACING",
                "GAMES_ROLE_PLAYING",
                "GAMES_SIMULATION",
                "GAMES_SPORTS",
                "GAMES_STRATEGY",
                "GAMES_TRIVIA",
                "GAMES_WORD",
                "HEALTH_AND_FITNESS",
                "LIFESTYLE",
                "MAGAZINES_AND_NEWSPAPERS",
                "MAGAZINES_ARTS",
                "MAGAZINES_AUTOMOTIVE",
                "MAGAZINES_WEDDINGS",
                "MAGAZINES_BUSINESS",
                "MAGAZINES_CHILDREN",
                "MAGAZINES_COMPUTER",
                "MAGAZINES_FOOD",
                "MAGAZINES_CRAFTS",
                "MAGAZINES_ELECTRONICS",
                "MAGAZINES_ENTERTAINMENT",
                "MAGAZINES_FASHION",
                "MAGAZINES_HEALTH",
                "MAGAZINES_HISTORY",
                "MAGAZINES_HOME",
                "MAGAZINES_LITERARY",
                "MAGAZINES_MEN",
                "MAGAZINES_MOVIES_AND_MUSIC",
                "MAGAZINES_POLITICS",
                "MAGAZINES_OUTDOORS",
                "MAGAZINES_FAMILY",
                "MAGAZINES_PETS",
                "MAGAZINES_PROFESSIONAL",
                "MAGAZINES_REGIONAL",
                "MAGAZINES_SCIENCE",
                "MAGAZINES_SPORTS",
                "MAGAZINES_TEENS",
                "MAGAZINES_TRAVEL",
                "MAGAZINES_WOMEN",
                "MEDICAL",
                "MUSIC",
                "NAVIGATION",
                "NEWS",
                "PHOTO_AND_VIDEO",
                "PRODUCTIVITY",
                "REFERENCE",
                "SHOPPING",
                "SOCIAL_NETWORKING",
                "SPORTS",
                "TRAVEL",
                "UTILITIES",
                "WEATHER"
              ],
              "enumTitles": [
                "All 70 categories",
                "Books",
                "Business",
                "Catalogs",
                "Education",
                "Entertainment",
                "Finance",
                "Food & Drink",
                "Games",
                "Games Action",
                "Games Adventure",
                "Games Arcade",
                "Games Board",
                "Games Card",
                "Games Casino",
                "Games Dice",
                "Games Educational",
                "Games Family",
                "Games Music",
                "Games Puzzle",
                "Games Racing",
                "Games Role Playing",
                "Games Simulation",
                "Games Sports",
                "Games Strategy",
                "Games Trivia",
                "Games Word",
                "Health & Fitness",
                "Lifestyle",
                "Magazines & Newspapers",
                "Magazines Arts",
                "Magazines Automotive",
                "Magazines Weddings",
                "Magazines Business",
                "Magazines Children",
                "Magazines Computer",
                "Magazines Food",
                "Magazines Crafts",
                "Magazines Electronics",
                "Magazines Entertainment",
                "Magazines Fashion",
                "Magazines Health",
                "Magazines History",
                "Magazines Home",
                "Magazines Literary",
                "Magazines Men",
                "Magazines Movies & Music",
                "Magazines Politics",
                "Magazines Outdoors",
                "Magazines Family",
                "Magazines Pets",
                "Magazines Professional",
                "Magazines Regional",
                "Magazines Science",
                "Magazines Sports",
                "Magazines Teens",
                "Magazines Travel",
                "Magazines Women",
                "Medical",
                "Music",
                "Navigation",
                "News",
                "Photo & Video",
                "Productivity",
                "Reference",
                "Shopping",
                "Social Networking",
                "Sports",
                "Travel",
                "Utilities",
                "Weather"
              ]
            },
            "default": [
              "BUSINESS",
              "PRODUCTIVITY",
              "HEALTH_AND_FITNESS"
            ]
          },
          "collections": {
            "title": "Chart collections",
            "type": "array",
            "description": "Which charts to scrape per category. Mix of iPhone/iPad/Mac and top/new charts.",
            "items": {
              "type": "string",
              "enum": [
                "TOP_FREE_IOS",
                "TOP_PAID_IOS",
                "TOP_GROSSING_IOS",
                "TOP_FREE_IPAD",
                "TOP_PAID_IPAD",
                "TOP_GROSSING_IPAD",
                "NEW_IOS",
                "NEW_FREE_IOS",
                "NEW_PAID_IOS",
                "TOP_MAC",
                "TOP_FREE_MAC",
                "TOP_PAID_MAC",
                "TOP_GROSSING_MAC"
              ],
              "enumTitles": [
                "Top Free (iPhone)",
                "Top Paid (iPhone)",
                "Top Grossing (iPhone)",
                "Top Free (iPad)",
                "Top Paid (iPad)",
                "Top Grossing (iPad)",
                "New Apps (all)",
                "New Free Apps",
                "New Paid Apps",
                "Top (Mac)",
                "Top Free (Mac)",
                "Top Paid (Mac)",
                "Top Grossing (Mac)"
              ]
            },
            "default": [
              "TOP_FREE_IOS",
              "TOP_PAID_IOS",
              "TOP_GROSSING_IOS"
            ]
          },
          "countries": {
            "title": "Countries (2-letter codes)",
            "type": "array",
            "description": "Countries to scrape charts for. Defaults to US.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "numPerChart": {
            "title": "Apps per chart",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many apps to fetch per category/collection/country combination. Capped at 200 by the App Store RSS feed.",
            "default": 50
          },
          "appIds": {
            "title": "App IDs (bundle IDs, numeric IDs, or URLs)",
            "type": "array",
            "description": "Explicit apps for 'details', 'reviews', and 'similar' modes. Accepts bundle IDs (com.example.app), numeric App Store IDs, or full App Store URLs.",
            "items": {
              "type": "string"
            }
          },
          "fetchDetailsForListedApps": {
            "title": "Fetch full details for apps found in charts",
            "type": "boolean",
            "description": "When mode includes charts, also fetch full detail for every unique app discovered. Enables a single run to go from category charts to full app data.",
            "default": true
          },
          "fetchRatingsHistogram": {
            "title": "Fetch star-rating histogram",
            "type": "boolean",
            "description": "Fetch the 1-5 star rating breakdown per app (one extra request per app). Turn off for faster/cheaper runs when only the average score is needed.",
            "default": true
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum reviews to fetch per app. Set to 0 to skip reviews entirely. The App Store review RSS feed caps out around 500 reviews (10 pages) per app regardless of this setting.",
            "default": 50
          },
          "searchTerms": {
            "title": "Keyword search terms",
            "type": "array",
            "description": "Keywords to search the App Store for, in 'search' mode. Captures which apps rank where for each term — the keyword-rank data ASO tools like AppTweak sell.",
            "items": {
              "type": "string"
            }
          },
          "searchNumPerTerm": {
            "title": "Results per search term",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many ranked results to capture per search term.",
            "default": 20
          },
          "maxItems": {
            "title": "Global max items",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on total dataset rows pushed across all modes. Stops cleanly when hit.",
            "default": 5000
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests to the App Store. Apple's iTunes endpoints rate-limit harder than Google Play's, so this defaults lower.",
            "default": 3
          },
          "retryAttempts": {
            "title": "Retry attempts",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries for transient errors (rate limits, network) with exponential backoff.",
            "default": 3
          },
          "retryDelayMs": {
            "title": "Base retry delay (ms)",
            "minimum": 100,
            "maximum": 10000,
            "type": "integer",
            "description": "Base delay for exponential backoff (ms). Delay = base * 2^attempt + jitter.",
            "default": 1500
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}