{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play & App Store Reviews API: Ratings, Replies",
    "description": "Google Play reviews with developer replies, plus ratings, prices and versions from both stores, as JSON. Monitor returns only new reviews. $1 per 1,000.",
    "version": "0.1",
    "x-build-id": "ZdCigJF3Fp66a8QnV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dododata~app-store-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dododata-app-store-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/dododata~app-store-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dododata-app-store-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/dododata~app-store-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dododata-app-store-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",
        "properties": {
          "startUrls": {
            "title": "App URLs",
            "type": "array",
            "description": "App Store or Google Play app pages, for example https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580 or https://play.google.com/store/apps/details?id=com.spotify.music. Leave empty to try the Actor on three sample apps.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "apps": {
            "title": "Apps (short form)",
            "type": "array",
            "description": "Alternative to URLs: an Apple numeric app id (324684580), a Google Play package name (com.spotify.music), or store:id to be explicit (apple:324684580, play:com.spotify.music).",
            "items": {
              "type": "string"
            }
          },
          "searchTerm": {
            "title": "Or find apps by keyword",
            "type": "string",
            "description": "Searches the App Store by keyword and reads every app it returns, so you do not need the ids. Uses Apple's own public search endpoint. Google Play has no public search endpoint, so this covers the App Store only."
          },
          "searchLimit": {
            "title": "Apps per keyword",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many apps to take from the keyword search.",
            "default": 10
          },
          "country": {
            "title": "Store country",
            "type": "string",
            "description": "Two-letter country code for the store front, for example us, gb, de, fr, in. Ratings, prices and reviews differ by country.",
            "default": "us"
          },
          "rowPer": {
            "title": "Row per",
            "enum": [
              "review",
              "app"
            ],
            "type": "string",
            "description": "One row per review (the default) with the app's fields repeated, or one row per app with no reviews fetched.",
            "default": "review"
          },
          "reviewPages": {
            "title": "Review pages per app",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many pages of reviews to read per app. The App Store serves 50 a page and stops at 10 pages (500 per app and country); Google Play serves 40 a page and keeps paging, so 10 is 400. Set 0 for ratings and prices only.",
            "default": 3
          },
          "minRating": {
            "title": "Minimum review rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews at this rating or above. Leave empty for all."
          },
          "maxRating": {
            "title": "Maximum review rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews at this rating or below. Set 2 to watch complaints. Leave empty for all."
          },
          "reviewedWithinDays": {
            "title": "Reviewed within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only reviews submitted in the last N days. Filtering happens before a row is saved, so you do not pay for the rest."
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Turns on change tracking. Pick any name, for example my-app-watch, and use the same name on every run. Each row then says whether it is new, updated or unchanged since the previous run under that name, and an app row carries previous_price, previous_rating and previous_version. The first run marks everything new. State is kept in a key-value store on your own Apify account, and each Actor keeps its own."
          },
          "onlyChanges": {
            "title": "Only changes",
            "type": "boolean",
            "description": "Needs a monitor name. Reviews you already received and apps that have not moved are left out of the results and not billed. A daily watch on 20 apps usually returns a handful of rows instead of hundreds.",
            "default": false
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many rows across all apps. You pay per row, so this is also your budget cap.",
            "default": 500
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Parallel requests. 5 is polite and fast enough.",
            "default": 5
          },
          "useProxy": {
            "title": "Use Apify proxy",
            "type": "boolean",
            "description": "Recommended. Turn off only for testing.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}