{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Scraper & ASO: Ranked Keywords, Rank Tracker",
    "description": "Find every keyword an iOS app ranks for and where competitors outrank you, with no keyword list needed. Track App Store keyword rankings, suggestions, top charts (200 deep), reviews, and competitor page changes: subtitle, in-app purchase prices, screenshots, version. Only-changes mode for alerts.",
    "version": "0.1",
    "x-build-id": "M86Zixhq3xkLmCwQA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s_actors~app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s_actors-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/s_actors~app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-s_actors-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/s_actors~app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-s_actors-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": "📋 What to do",
            "enum": [
              "ranked_keywords",
              "keyword_rankings",
              "keyword_suggestions",
              "top_charts",
              "app_details",
              "reviews"
            ],
            "type": "string",
            "description": "Ranked keywords: find every keyword an app ranks for in App Store search (no keyword list needed), and where competitors outrank it. Keyword rankings: positions for your own keyword list. Keyword suggestions: App Store search suggestions (keyword research). Top charts: top free, paid and grossing by category. App details: subtitle, in-app purchases, chart position, ratings; with \"Only report changes\" it tracks competitor page changes. Reviews: latest or most helpful reviews.",
            "default": "ranked_keywords"
          },
          "appIds": {
            "title": "📱 Apps",
            "type": "array",
            "description": "App Store links, numeric IDs (570060128) or bundle IDs (com.duolingo.DuolingoMobile). Ranked keywords: your app first, then competitors. Keyword rankings and charts: apps to track (leave empty to get every ranked app). App details and reviews: the apps to scrape.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "🔑 Keywords",
            "type": "array",
            "description": "Keyword rankings: the search terms to check. Keyword suggestions: seed keywords. Ranked keywords: extra keywords to check on top of the ones found automatically.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "🌍 Countries",
            "type": "array",
            "description": "Two-letter App Store country codes, one per line: us, gb, de, fr, jp, br... Rankings, suggestions, charts and prices differ by country. Default: us.",
            "items": {
              "type": "string"
            }
          },
          "maxPosition": {
            "title": "🔢 Search depth",
            "minimum": 10,
            "maximum": 200,
            "type": "integer",
            "description": "How deep to look in App Store search results (up to 200). Ranked keywords: a keyword counts if an app is within this position. Keyword rankings: how many results per keyword.",
            "default": 50
          },
          "maxKeywordsPerApp": {
            "title": "🧮 Candidate keywords per app",
            "minimum": 10,
            "maximum": 500,
            "type": "integer",
            "description": "Ranked keywords: how many candidate keywords to test per app (from its title, subtitle, description and App Store suggestions). More finds more long-tail keywords and takes longer. You pay only for keywords where an app ranks.",
            "default": 100
          },
          "onlyTrackedApps": {
            "title": "🎯 Only rows for the tracked apps",
            "type": "boolean",
            "description": "Keyword rankings and top charts with apps listed: one row per tracked app (its position, or empty if not ranked). Turn off to get every ranked app with a tracked flag.",
            "default": true
          },
          "expandSuggestions": {
            "title": "🔤 Expand suggestions A-Z",
            "type": "boolean",
            "description": "Keyword suggestions: also ask for \"seed a\", \"seed b\" ... \"seed z\" to find long-tail keywords (27 queries per seed instead of 1).",
            "default": false
          },
          "chartTypes": {
            "title": "🏆 Charts",
            "type": "array",
            "description": "Top charts mode: which charts to get. Top free and paid go 200 deep, top grossing 100.",
            "items": {
              "type": "string",
              "enum": [
                "top_free",
                "top_paid",
                "top_grossing"
              ],
              "enumTitles": [
                "Top free (200)",
                "Top paid (200)",
                "Top grossing (100)"
              ]
            },
            "default": [
              "top_free"
            ]
          },
          "chartCategories": {
            "title": "🗂️ Chart categories",
            "type": "array",
            "description": "Top charts mode: categories, one per line. ALL = all apps, GAMES = all games, or e.g. EDUCATION, FINANCE, GAMES_PUZZLE. Full list: ALL, BOOKS, BUSINESS, DEVELOPER_TOOLS, EDUCATION, ENTERTAINMENT, FINANCE, FOOD_AND_DRINK, GAMES, GRAPHICS_AND_DESIGN, HEALTH_AND_FITNESS, LIFESTYLE, MAGAZINES_AND_NEWSPAPERS, MEDICAL, MUSIC, NAVIGATION, NEWS, PHOTO_AND_VIDEO, PRODUCTIVITY, REFERENCE, SHOPPING, SOCIAL_NETWORKING, SPORTS, TRAVEL, UTILITIES, WEATHER, GAMES_ACTION, GAMES_ADVENTURE, GAMES_CASUAL, GAMES_BOARD, GAMES_CARD, GAMES_CASINO, GAMES_FAMILY, GAMES_MUSIC, GAMES_PUZZLE, GAMES_RACING, GAMES_ROLE_PLAYING, GAMES_SIMULATION, GAMES_SPORTS, GAMES_STRATEGY, GAMES_TRIVIA, GAMES_WORD.",
            "items": {
              "type": "string"
            }
          },
          "chartSize": {
            "title": "📏 Apps per chart",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Top charts mode: how many positions to get (up to 200; top grossing up to 100).",
            "default": 100
          },
          "maxReviewsPerApp": {
            "title": "💬 Max reviews per app",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Reviews mode: how many reviews per app and country (Apple gives up to 500).",
            "default": 100
          },
          "reviewSort": {
            "title": "↕️ Review order",
            "enum": [
              "newest",
              "helpful"
            ],
            "type": "string",
            "description": "Reviews mode: order of the reviews. With \"Only report changes\" reviews are always newest first.",
            "default": "newest"
          },
          "onlyChanges": {
            "title": "🔔 Only report changes",
            "type": "boolean",
            "description": "For scheduled runs. The first run saves the current state; later runs return only what changed: keyword positions that moved, keywords gained or lost, chart moves, new reviews, and competitor page changes (title, subtitle, description, screenshots, price, in-app purchases, version, rating, chart position).",
            "default": false
          },
          "minPositionChange": {
            "title": "📈 Minimum position change",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Report a ranking or chart move only if the app moved at least this many places.",
            "default": 1
          },
          "monitorName": {
            "title": "🏷️ Monitor name",
            "type": "string",
            "description": "Separate monitors keep separate memory. Use a different name for each scheduled task.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "⚡ Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many requests run at the same time.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy",
            "type": "object",
            "description": "Requests go direct first; the proxy is used only when the App Store rate-limits a request.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}