{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Keyword Rank Tracker & App Store Top Charts - ASO",
    "description": "Apple App Store keyword rank tracker and top charts (free, paid, grossing, new) by country and category, plus Apple Podcasts charts and daily rank changes. Official Apple feeds, $0.50/1k rows.",
    "version": "0.1",
    "x-build-id": "po1Rbyr4M0HOpkL90"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tidytools~app-store-top-charts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tidytools-app-store-top-charts",
        "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/tidytools~app-store-top-charts/runs": {
      "post": {
        "operationId": "runs-sync-tidytools-app-store-top-charts",
        "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/tidytools~app-store-top-charts/run-sync": {
      "post": {
        "operationId": "run-sync-tidytools-app-store-top-charts",
        "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 get",
            "enum": [
              "charts",
              "keywords"
            ],
            "type": "string",
            "description": "Charts mode reads Apple's official chart feeds (one row per chart entry). Keyword mode searches Apple's iTunes Search API for each keyword and country (one row per tracked app and, optionally, one row per top result). Values: charts = Top charts: Top Free, Top Paid, Top Grossing, New apps (or Top Podcasts), by country and category; keywords = Keyword ranks: where apps rank in App Store search results for your keywords.",
            "default": "charts"
          },
          "countries": {
            "title": "Countries (App Store storefronts)",
            "type": "array",
            "description": "Two-letter country codes, e.g. us, gb, de, jp, br. Each chart or keyword is read once per country. Invalid codes get a free error row.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "chartTypes": {
            "title": "Charts",
            "type": "array",
            "description": "Charts mode, apps only (podcasts have one chart: Top Podcasts). iPad has Top Free, Top Paid and Top Grossing; Mac has Top Free only.",
            "items": {
              "type": "string",
              "enum": [
                "topfree",
                "toppaid",
                "topgrossing",
                "newapps",
                "newfree",
                "newpaid"
              ],
              "enumTitles": [
                "Top Free",
                "Top Paid",
                "Top Grossing",
                "New Apps (iPhone only, no categories)",
                "New Free Apps (iPhone only, no categories)",
                "New Paid Apps (iPhone only, no categories)"
              ]
            },
            "default": [
              "topfree"
            ]
          },
          "genres": {
            "title": "Categories",
            "type": "array",
            "description": "\"all\" for the overall chart, a category name (Productivity, Health & Fitness, Games, Finance…), a games sub-category as \"Games: Puzzle\", or Apple's genre id (6007). Podcasts: Technology, Business, True Crime, News… Each category is one more chart per country.",
            "default": [
              "all"
            ],
            "items": {
              "type": "string"
            }
          },
          "media": {
            "title": "Store",
            "enum": [
              "apps",
              "podcasts"
            ],
            "type": "string",
            "description": "Values: apps = App Store (apps); podcasts = Apple Podcasts (Top Podcasts chart).",
            "default": "apps"
          },
          "device": {
            "title": "Device",
            "enum": [
              "iphone",
              "ipad",
              "mac"
            ],
            "type": "string",
            "description": "Which store's charts (or search results in keyword mode). Values: iphone = iPhone; ipad = iPad; mac = Mac.",
            "default": "iphone"
          },
          "maxRank": {
            "title": "Positions per chart",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Top N of each chart (Apple's feeds publish at most 100). You pay per entry returned.",
            "default": 100
          },
          "includeDetails": {
            "title": "Add ratings and version details",
            "type": "boolean",
            "description": "Apps: average rating, rating count, version, last update, content rating, size. Podcasts: RSS feed URL, episode count, latest episode date. Same price; adds about 3 seconds per 100 entries (Apple's Lookup API).",
            "default": false
          },
          "includeDescription": {
            "title": "Add the store description",
            "type": "boolean",
            "description": "The app's (or podcast's) description text from the chart feed. Same price.",
            "default": false
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keyword mode: one search term per line, e.g. habit tracker, budget app. Each keyword is searched once per country.",
            "items": {
              "type": "string"
            }
          },
          "trackApps": {
            "title": "Apps to track",
            "type": "array",
            "description": "Keyword mode: your app and competitors, as App Store links, numeric ids or bundle ids. One row per keyword × country × app with its rank (null when it is not in the searched results).",
            "items": {
              "type": "string"
            }
          },
          "resultsPerKeyword": {
            "title": "Top results to list per keyword",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Also return the top N apps of each search as rows (charged like chart entries). 0 = only the tracked apps' ranks.",
            "default": 10
          },
          "searchDepth": {
            "title": "Search depth",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many results of each search are checked for the tracked apps (Apple's Search API returns at most 200). Same price at any depth.",
            "default": 200
          },
          "compareWithPrevious": {
            "title": "Compare with the previous run",
            "type": "boolean",
            "description": "Add changeType (new, up, down, same; keyword mode also entered / dropped), previousRank and rankChange (positive = climbed) by comparing with the last run of the same monitor. Ideal for daily schedules.",
            "default": false
          },
          "reportDropped": {
            "title": "Report apps that left a chart",
            "type": "boolean",
            "description": "With comparison on: a free row (changeType \"dropped\") for every app that was in the chart's top N last time and is not now.",
            "default": true
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Runs with the same name are compared with each other (letters, digits, dashes). Use different names for different chart or keyword lists. Default: \"default\"."
          },
          "maxConcurrency": {
            "title": "Charts in parallel",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many chart feeds are read at the same time. Keyword searches and detail lookups always run one at a time about 3 seconds apart, as Apple asks (about 20 calls per minute).",
            "default": 2
          },
          "itemTimeoutSecs": {
            "title": "Time limit per chart or keyword (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "A chart or keyword search that takes longer gets a timeout error row (not charged).",
            "default": 300
          },
          "proxyConfiguration": {
            "title": "Proxy (optional)",
            "type": "object",
            "description": "Only used for requests sent from Apify's network (all requests of this Actor). Apify proxy usage is billed to your Apify account. Not needed normally."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}