{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store & Google Play Reviews Scraper",
    "description": "Scrape every review Apple App Store and Google Play expose, in one flat schema with ISO dates, working review links, country on every row and exact limits. Plain HTTP, no browser.",
    "version": "0.1",
    "x-build-id": "GbhwRlZsLJVOpaH0n"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/garje~app-store-play-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-garje-app-store-play-reviews-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/garje~app-store-play-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-garje-app-store-play-reviews-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/garje~app-store-play-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-garje-app-store-play-reviews-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",
        "required": [
          "apps"
        ],
        "properties": {
          "apps": {
            "title": "Apps",
            "type": "array",
            "description": "App Store IDs or URLs (for example 310633997 or https://apps.apple.com/us/app/whatsapp-messenger/id310633997) and Google Play package names or URLs (for example com.whatsapp). Mix both stores in one list.",
            "items": {
              "type": "string"
            }
          },
          "stores": {
            "title": "Stores",
            "type": "array",
            "description": "Which stores to read. Apps from a store that is not selected are skipped.",
            "items": {
              "type": "string",
              "enum": [
                "appStore",
                "googlePlay"
              ],
              "enumTitles": [
                "Apple App Store",
                "Google Play"
              ]
            },
            "default": [
              "appStore",
              "googlePlay"
            ]
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Two-letter ISO 3166 country codes, for example us or gb. Every row carries the country it came from. Apple's feed gives up to 500 reviews per country and sort order, so more countries means more App Store reviews.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Languages (Google Play)",
            "type": "array",
            "description": "Google Play language codes such as en, de or pt-BR. Apple's feed has no language filter; it follows the country.",
            "default": [
              "en"
            ],
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "newest",
              "mostHelpful",
              "rating"
            ],
            "type": "string",
            "description": "newest, mostHelpful or rating. Apple's feed has no rating sort, so App Store apps fall back to newest when rating is chosen.",
            "default": "newest"
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app, store and country",
            "minimum": 0,
            "type": "integer",
            "description": "Honoured exactly for each app, store, country (and language on Google Play). Set 0 for no limit. If a store runs out first, the log and the RUN_SUMMARY record say why.",
            "default": 500
          },
          "since": {
            "title": "Only reviews since",
            "type": "string",
            "description": "ISO date or date-time, for example 2026-09-01. Only reviews on or after it are returned, which suits scheduled runs. <a href=\"https://garje-data-notes.laude--pify.workers.dev/articles/collect-only-new-app-reviews-each-week.html\" target=\"_blank\">Read an example</a>."
          },
          "ratings": {
            "title": "Star ratings",
            "type": "array",
            "description": "Keep only these star ratings, for example 1 and 2 for complaints. Leave empty for all. <a href=\"https://garje-data-notes.laude--pify.workers.dev/articles/star-ratings-in-4608-app-reviews.html\" target=\"_blank\">Read an example</a>.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            },
            "default": []
          },
          "includeDeveloperReplies": {
            "title": "Include developer replies",
            "type": "boolean",
            "description": "Adds the developer's reply text and date (Google Play). Apple's public feed does not include replies. <a href=\"https://garje-data-notes.laude--pify.workers.dev/articles/developer-replies-in-google-play-reviews.html\" target=\"_blank\">Read an example</a>.",
            "default": true
          },
          "includeReviewerInfo": {
            "title": "Include reviewer names and profile links",
            "type": "boolean",
            "description": "Off by default for privacy. When on, rows add userName, userUrl (App Store) and userImage (Google Play).",
            "default": false
          },
          "continueOnError": {
            "title": "Continue on error",
            "type": "boolean",
            "description": "Skip an app or page that keeps failing and report it in RUN_SUMMARY, instead of stopping the run.",
            "default": true
          },
          "canary": {
            "title": "Drift canary (advanced)",
            "type": "object",
            "description": "For scheduled monitoring runs. Example: {\"baselineStore\": \"canary-baseline\", \"thresholdPoints\": 5}. The first run saves the null rate of key fields (and the mix of a status field) to that named key-value store; later runs compare and fail with an alert if any value moves by more than thresholdPoints percentage points. Leave empty for normal runs."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy datacenter IPs are enough for both stores.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}