{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store & Google Play Reviews Scraper: Ratings, Text",
    "description": "App Store and Google Play reviews in one actor: rating, title, text, app version, date, author, helpful votes, developer reply. 150+ countries, only-new mode, Markdown for LLMs. No API key, no login. MCP-ready for AI agents. Errors and empty results are free. $0.20 per 1,000 reviews.",
    "version": "0.1",
    "x-build-id": "zFGLgWVhgbyxie20t"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/actose~app-store-reviews/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-actose-app-store-reviews",
        "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/actose~app-store-reviews/runs": {
      "post": {
        "operationId": "runs-sync-actose-app-store-reviews",
        "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/actose~app-store-reviews/run-sync": {
      "post": {
        "operationId": "run-sync-actose-app-store-reviews",
        "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",
        "required": [
          "apps"
        ],
        "properties": {
          "apps": {
            "title": "Apps (IDs or URLs)",
            "type": "array",
            "description": "One app per line, from either store. App Store: numeric ID (389801252), id389801252 or a URL like https://apps.apple.com/us/app/instagram/id389801252. Google Play: package name (com.instagram.android) or a URL like https://play.google.com/store/apps/details?id=com.instagram.android.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "2-letter country codes (us, gb, fr, de, jp...). Each app is scraped in every country listed. Reviews are separate per App Store country. If empty, the country in the App Store URL is used, otherwise 'us'.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app and country",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many reviews for each app/country. The public App Store feed gives up to 500 reviews per sort order and country (up to about 1,000 when you ask for more than 500 and both sort orders are combined). Google Play has no such limit.",
            "default": 100
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "newest",
              "mostRelevant"
            ],
            "type": "string",
            "description": "Newest first (best for monitoring) or most relevant / most helpful first.",
            "default": "newest"
          },
          "ratings": {
            "title": "Only these star ratings",
            "type": "array",
            "description": "Keep only reviews with these ratings, e.g. [1, 2] for negative reviews. Empty = all ratings. Reviews filtered out are not charged."
          },
          "sinceDate": {
            "title": "Only reviews posted since",
            "type": "string",
            "description": "Date YYYY-MM-DD (or ISO date-time). Older reviews are skipped and not charged. With 'Newest first', scraping stops as soon as older reviews are reached."
          },
          "language": {
            "title": "Google Play review language",
            "type": "string",
            "description": "Google Play returns reviews written in one language at a time (en, fr, de, es, pt, ja...). Empty = the main language of each country (us→en, fr→fr, de→de, jp→ja...). Ignored for the App Store, whose reviews are per country."
          },
          "store": {
            "title": "Store for package-style IDs",
            "enum": [
              "auto",
              "appStore"
            ],
            "type": "string",
            "description": "Numeric IDs and apps.apple.com URLs always go to the App Store, play.google.com URLs to Google Play. A package-style ID such as com.burbn.instagram goes to Google Play by default; choose 'App Store' to treat it as an iOS bundle ID.",
            "default": "auto"
          },
          "onlyNew": {
            "title": "Only new reviews since the last run",
            "type": "boolean",
            "description": "For scheduled runs: skip reviews already delivered by a previous run of this actor on your account (remembered per app and country in the key-value store 'app-store-reviews-state'). Skipped reviews are not charged.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Apps scraped in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many app/country combinations are scraped at the same time. Keep it low to stay polite with the stores.",
            "default": 4
          },
          "proxyConfiguration": {
            "title": "Proxy (optional)",
            "type": "object",
            "description": "Not needed in most cases: both stores answer directly. If a store starts rate-limiting, the actor switches to the Apify datacenter proxy by itself. Set a proxy here only if you want to force one."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}