{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store & Google Play Scraper - ASO Ranks & Ratings Monitor",
    "description": "Monitor iOS and Android apps: rating, rating count, installs, price, version, release notes, App Store chart positions and keyword search ranks. Each run returns the current state plus change rows (field, old, new) since the last run. Optional new Google Play reviews.",
    "version": "1.0",
    "x-build-id": "baHwBvmCVPabzX3Bd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ivora~app-store-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ivora-app-store-monitor",
        "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/ivora~app-store-monitor/runs": {
      "post": {
        "operationId": "runs-sync-ivora-app-store-monitor",
        "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/ivora~app-store-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-ivora-app-store-monitor",
        "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 and/or Google Play)",
            "type": "array",
            "description": "One app per line. App Store: numeric ID or URL (<code>324684580</code>, <code>https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580</code>). Google Play: package name or URL (<code>com.spotify.music</code>, <code>https://play.google.com/store/apps/details?id=com.spotify.music</code>). These apps are also the ones whose ranks are reported for your keywords.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords (search-rank tracking)",
            "type": "array",
            "description": "Store search terms. For each keyword, country and store you get the rank of your apps in the search results, the top results and who entered or left the top since the last run.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "2-letter store country codes (us, gb, de, ua...). Every app and keyword is checked in each country (and charged per country).",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language (Google Play)",
            "type": "string",
            "description": "Language for Google Play texts, search and reviews (en, de, uk, pt-BR...). The App Store API returns the country store's default language.",
            "default": "en"
          },
          "keywordStores": {
            "title": "Keyword ranks on",
            "enum": [
              "both",
              "apple",
              "google_play"
            ],
            "type": "string",
            "description": "Which store(s) to search for each keyword.",
            "default": "both"
          },
          "monitorMode": {
            "title": "Monitor mode (change rows)",
            "type": "boolean",
            "description": "On: besides the current state of each app, output one row per changed field since the previous run (version, release notes, price, rating, rating count, installs, chart position...), and only NEW reviews. State is kept in a named key-value store.",
            "default": true
          },
          "checkCharts": {
            "title": "App Store chart positions",
            "type": "boolean",
            "description": "Look up each App Store app in the official top-100 charts (Top Free or Top Paid, plus Top Grossing), overall and in its category. Google Play charts are not supported.",
            "default": true
          },
          "chartCategory": {
            "title": "App Store chart category (optional)",
            "type": "string",
            "description": "Use this category's charts instead of each app's own category. Genre name (Productivity, Games, Health & Fitness...) or App Store genre ID (6007)."
          },
          "ratingChangeThreshold": {
            "title": "Min. rating change to report",
            "minimum": 0,
            "type": "number",
            "description": "Report a rating change only if the rating (rounded to 2 decimals) moved at least this much.",
            "default": 0.01
          },
          "ratingCountChangePct": {
            "title": "Min. rating-count change to report (%)",
            "minimum": 0,
            "type": "number",
            "description": "Report rating/review count changes only above this percentage (popular apps gain ratings every day). 0 = every change.",
            "default": 1
          },
          "includePlayReviews": {
            "title": "Google Play reviews",
            "type": "boolean",
            "description": "Also output the newest Google Play reviews (only new ones in monitor mode). Charged per review. App Store reviews are not available (see README).",
            "default": false
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How many of the newest reviews to read per Google Play app each run (reviews are per language, read once per app).",
            "default": 50
          },
          "reviewsFirstRun": {
            "title": "Reviews on the first run",
            "enum": [
              "outputAll",
              "baselineOnly"
            ],
            "type": "string",
            "description": "Output the newest reviews on the first run, or only remember them (then later runs output only new reviews).",
            "default": "outputAll"
          },
          "includeReviewerNames": {
            "title": "Include reviewer names",
            "type": "boolean",
            "description": "Off by default (personal data). Turn on only if you have a legitimate reason to process reviewer names.",
            "default": false
          },
          "appleSearchDepth": {
            "title": "App Store search depth",
            "minimum": 10,
            "maximum": 200,
            "type": "integer",
            "description": "How many App Store search results to scan for ranks (max 200). Google Play search returns about 30 results per keyword.",
            "default": 100
          },
          "topResults": {
            "title": "Top results per keyword",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "How many top search results to include in each keyword row (0-50).",
            "default": 10
          },
          "stateStoreName": {
            "title": "State store name",
            "type": "string",
            "description": "Named key-value store that remembers the previous state between runs. Use different names for independent monitors.",
            "default": "app-store-monitor-state"
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Concurrent requests (pages are also paced per host).",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Not needed normally. Enable Apify Proxy if Google Play starts rate-limiting (large runs).",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}