{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Play Reviews Scraper",
    "description": "Scrape Google Play app reviews and monitor new ones by package name or app URL: rating, text, date and reviewer, plus helpful votes, app version and developer reply when given. Delta mode returns only reviews not seen in earlier runs. Filter by stars, date, keyword or reply. No login.",
    "version": "0.1",
    "x-build-id": "Ja4b1036vvyVujmoL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/axiomworks~google-play-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-axiomworks-google-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/axiomworks~google-play-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-axiomworks-google-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/axiomworks~google-play-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-axiomworks-google-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": "App package names or Play URLs",
            "type": "array",
            "description": "Android package names or Google Play app URLs, e.g. [\"com.spotify.music\"] or [\"https://play.google.com/store/apps/details?id=com.whatsapp\"]. Required. Each app is queried for each country in order; maxItems is shared across them. Invalid entries are skipped; unavailable or blocked targets produce no rows and a status message.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Storefront country codes",
            "type": "array",
            "description": "Two-letter Google Play storefront codes, e.g. [\"us\",\"gb\"]. Default [\"us\"]. Each app is queried once per country in order; all pairs share maxItems. These select storefronts, not reviewer nationality. Use language separately for review language.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Review language code",
            "type": "string",
            "description": "Google Play review language code, e.g. \"en\", \"de\" or \"pt-BR\". Default \"en\". Applies to every app and country; does not translate reviews or infer reviewer language. Choose countries separately for storefronts.",
            "default": "en"
          },
          "sort": {
            "title": "Review sort order",
            "enum": [
              "newest",
              "relevance",
              "rating"
            ],
            "type": "string",
            "description": "Google Play ordering: \"newest\" (default), \"relevance\" or \"rating\", e.g. \"newest\" for recent feedback. Newest permits early stopping at dateFrom or a previously saved delta review; rating changes ordering, while minRating/maxRating filter stars.",
            "default": "newest"
          },
          "deltaMode": {
            "title": "Skip reviews saved by delta runs",
            "type": "boolean",
            "description": "Set true to skip review IDs saved by earlier delta runs for each app/country; default false exports independently. Example: {\"deltaMode\":true,\"sort\":\"newest\"} saves history on the first run, then stops at the first known review in later runs. Zero rows can mean no unseen matches; set false to export previously seen reviews again. Normal runs do not save delta history.",
            "default": false
          },
          "minRating": {
            "title": "Minimum review stars",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Lowest included star rating, 1-5, default 1. For example, minRating=1 and maxRating=2 select low-rated reviews. Combines with date, keyword and reply filters; saved matches share maxItems. Reversed rating bounds are swapped.",
            "default": 1
          },
          "maxRating": {
            "title": "Maximum review stars",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Highest included star rating, 1-5, default 5. For example, maxRating=2 includes one- and two-star reviews when minRating is 1. Combines with all other filters. Reversed rating bounds are swapped.",
            "default": 5
          },
          "dateFrom": {
            "title": "Earliest review date",
            "type": "string",
            "description": "Inclusive earliest publication date or ISO timestamp, e.g. \"2026-10-01\" or \"2026-10-01T12:00:00Z\". Default \"\" disables this bound. Bare dates start at UTC midnight; sort=\"newest\" stops paging at older reviews. Combines with dateTo and other filters.",
            "default": ""
          },
          "dateTo": {
            "title": "Latest review date",
            "type": "string",
            "description": "Inclusive latest publication date or ISO timestamp, e.g. \"2026-10-12\" or \"2026-10-12T12:00:00Z\". Default \"\" disables this bound. A bare YYYY-MM-DD includes the entire UTC day. Combines with dateFrom and other filters; reversed date bounds are swapped.",
            "default": ""
          },
          "maxItems": {
            "title": "Total saved review limit",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum saved unique reviews across every app and country, 1-10000, default 50; e.g. 30 for a quick sample. Earlier targets can consume this shared budget. Only matching saved reviews count. Filters, delta history or unavailable reviews can produce fewer rows; use maxItemsPerApp to limit one app.",
            "default": 50
          },
          "maxItemsPerApp": {
            "title": "Saved review limit per app",
            "type": "integer",
            "description": "Maximum saved reviews for each app across all its countries, 1-10000, default 10000; e.g. 10 with maxItems=30 to sample several apps. The shared maxItems limit still applies, and fewer matching reviews may be available.",
            "default": 10000
          },
          "proxyConfiguration": {
            "title": "Request proxy configuration",
            "type": "object",
            "description": "Proxy settings for Google Play requests, e.g. {\"useApifyProxy\":true} (default Apify datacenter proxy). Blocked requests retry on fresh sessions. Select residential proxies if repeated blocking occurs; unavailable targets still return no rows.",
            "default": {
              "useApifyProxy": true
            }
          },
          "keywords": {
            "title": "Review text keywords or phrases",
            "type": "array",
            "description": "Text keywords or phrases, e.g. [\"crash\",\"subscription\"]. Keep reviews containing any supplied phrase, case insensitive with Unicode normalization. Default [] keeps all texts. Combines with rating, date and reply filters; only saved matches count toward maxItems. No translation or AI matching.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "replyStatus": {
            "title": "Developer reply filter",
            "enum": [
              "all",
              "withReply",
              "withoutReply"
            ],
            "type": "string",
            "description": "Developer response filter: \"all\" (default), \"withReply\" or \"withoutReply\", e.g. \"withoutReply\" to collect unanswered feedback. Uses nonempty replyText, not replyAuthor. Combines with other filters; narrow selections may return fewer than maxItems.",
            "default": "all"
          },
          "minThumbsUp": {
            "title": "Minimum helpful votes",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum thumbsUp count, a nonnegative whole number, default 0 disables this filter. For example, 5 keeps reviews with at least five helpful votes. Combines with all other filters; only saved matches count toward the shared maxItems limit. Missing vote counts do not match a positive minimum.",
            "default": 0
          },
          "minReviewLength": {
            "title": "Minimum review text length",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum trimmed review text length in Unicode characters, a nonnegative whole number, default 0 disables this filter. For example, 40 keeps longer feedback. Missing text does not match a positive minimum. Combines with other filters; narrow selections can return fewer than maxItems.",
            "default": 0
          },
          "appVersions": {
            "title": "App versions to include",
            "type": "array",
            "description": "Exact appVersion strings to include, e.g. [\"9.0.88.728\"]. Default [] keeps every version, including missing versions. Matches any listed version, case sensitive, and combines with all other filters. Copy values from an unfiltered sample first. Narrow or old versions may yield fewer results or zero rows within the scan budget.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}