{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store App Details Tracker - Ratings, Star Counts & Versions",
    "description": "For ASO teams, app marketers and competitor trackers: exact rating count, count per star (5 to 1), rating, version, update date, price, size and chart rank of App Store apps. Matched the live store page on 5 of 5 apps checked 2026-09-21. Monitoring mode returns only apps that changed.",
    "version": "0.1",
    "x-build-id": "npvyucOJdV2nFqmaI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~app-store-app-details-tracker/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-app-store-app-details-tracker",
        "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/neverempty~app-store-app-details-tracker/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-app-store-app-details-tracker",
        "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/neverempty~app-store-app-details-tracker/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-app-store-app-details-tracker",
        "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": "App Store apps (ids or URLs)",
            "type": "array",
            "description": "Apps to read: a numeric App Store id such as 389801252 (or id389801252), or an app URL such as https://apps.apple.com/us/app/instagram/id389801252. Bundle ids such as com.burbn.instagram are not accepted. If a URL carries its own country (/us/, /jp/ ...), that country wins over the field below for that app. A repeated app (same country) is read and charged once and the repeat gets a free 'duplicate' row. If you leave this field out with monitoring off, two example apps are read; with monitoring on it is required. An empty list is rejected.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country (store)",
            "type": "string",
            "description": "Two-letter country code of the App Store to read, such as us, gb, de, jp or in. The rating, rating count, count per star, price, currency and chart position are per country (Minecraft: 838,771 ratings in the US, 106,260 in Japan). The page is in the store's own language (Japanese for jp); the pageLanguage column says which. An app that is not sold in that country answers the same as an app that does not exist (a free 'no-such-app' row). The App Store sends codes it does not know to the US store; those come back as a free 'country-not-available' row instead of US numbers.",
            "default": "us"
          },
          "maxApps": {
            "title": "Maximum rows to return",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "With monitoring off, reading stops once this many charged rows have been returned, and a free row says how many entries at the end of the list were not read. Apps that do not exist and unreadable pages do not count. In monitoring mode it does not limit the changes returned: every app in the list is checked, as far as the run's maximum total charge allows. Up to 1,000 entries are read per run.",
            "default": 100
          },
          "monitoringMode": {
            "title": "Monitoring mode: return an app only when it changed",
            "type": "boolean",
            "description": "Off = every app comes back with its current details, charged per row. On = the Actor remembers each app's details and, on later runs, returns an app only when its rating, rating count, last update date, version or price changed since the row last returned for it (narrow it with changeOn), with the previous values and the difference. The first run returns every app once to set the baseline. **In monitoring mode every app whose page is read costs $0.30 per 1,000 checks, changed or not** (apps that do not exist, unreadable pages and blocked pages are free), plus the row price for the rows returned. Example: 100 apps every day = 3,000 checks a month = $0.90. The Actor reads only as many apps as the run's maximum total charge can pay for with a check and a change row each. Details are remembered per app, country and changeOn; do not put the same app in two schedules that can run at the same time.",
            "default": false
          },
          "changeOn": {
            "title": "In monitoring mode, return an app when",
            "enum": [
              "any",
              "rating",
              "release",
              "price"
            ],
            "type": "string",
            "description": "any = the rating, the rating count, the last update date, the version or the price changed. rating = only the rating or the rating count. release = only the last update date or the version. price = only the price or currency. Any difference counts: reading the same pages repeatedly on 2026-09-21 gave the same numbers every time, so there is no tolerance band. Each changeOn setting keeps its own memory, so a schedule with a new setting starts with a first check.",
            "default": "any"
          },
          "resetMonitoringState": {
            "title": "Forget what was remembered and start over",
            "type": "boolean",
            "description": "Clears every remembered app for this Actor, so the next monitoring run returns each app once again as a first check. This affects all your monitoring runs, because details are stored per app rather than per list. Turn it off again after one run: left on in a schedule, every run returns every app as a first check and charges the row price for it.",
            "default": false
          },
          "useProxy": {
            "title": "Use a proxy if the App Store answers with a block",
            "type": "boolean",
            "description": "Every app page is requested directly first. Only if the App Store answers a page with a rate limit, a block, an empty response or no response is that page retried through a datacenter proxy session; the next app is requested directly again. With it off, that answer is retried directly and then returned as a free 'blocked' row, and no proxy is used.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}