{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Reviews Scraper",
    "description": "Monitor new App Store and Google Play reviews for any app and country: rating, text, author, date, helpful votes and app version when the store gives it. Delta mode returns only reviews not seen in earlier runs, so scheduled runs get just the new ones. No login or API key.",
    "version": "1.0",
    "x-build-id": "uUNNtjJ5nV2zpoPZb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/axiomworks~app-store-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-axiomworks-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/axiomworks~app-store-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-axiomworks-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/axiomworks~app-store-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-axiomworks-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": {
          "appId": {
            "title": "App ID or store URL (310633997)",
            "type": "string",
            "description": "App ID or URL to read; no default (prefill 310633997). Depends on store; combined with appIds, up to 50 apps. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY."
          },
          "store": {
            "title": "Review store (app-store or google-play)",
            "enum": [
              "app-store",
              "google-play"
            ],
            "type": "string",
            "description": "Review source; default app-store reads Apple reviews. google-play requires package IDs in appId/appIds and uses language; always newest first. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": "app-store"
          },
          "appIds": {
            "title": "App IDs or URLs (list, up to 50)",
            "type": "array",
            "description": "App IDs or URLs, up to 50; default [] uses appId. Combined with appId; store selects numeric Apple IDs or Android packages. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Storefront country code (us)",
            "type": "string",
            "description": "Storefront code; default us reads US reviews. countries overrides this field; URL country does not override it. uk maps to gb. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": "us"
          },
          "countries": {
            "title": "Storefront country codes (list, up to 20)",
            "type": "array",
            "description": "Storefront codes, up to 20; default [] uses country. Nonempty replaces country; every app is read in every listed storefront. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Google Play language code (en)",
            "type": "string",
            "description": "Google Play language; default en reads English reviews. Only applies to store=google-play; ignored for Apple. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": "en"
          },
          "mode": {
            "title": "Review mode (full or delta)",
            "enum": [
              "full",
              "delta"
            ],
            "type": "string",
            "description": "Default full repeats available matching reviews. delta returns unseen reviews per app/country and filters; first delta run establishes a baseline. delta forces sort=recent. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": "full"
          },
          "sort": {
            "title": "Review order (recent or helpful)",
            "enum": [
              "recent",
              "helpful"
            ],
            "type": "string",
            "description": "Default recent reads newest first; helpful orders Apple reviews by helpfulness. Ignored in delta mode and Google Play, which always use recent. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": "recent"
          },
          "stateKey": {
            "title": "Delta checkpoint key (optional string)",
            "type": "string",
            "description": "Delta checkpoint name; omitted/empty uses an automatic key per app/country and filters. Only used in mode=delta; custom keys append app/country for multiple targets. Keep filters consistent. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY."
          },
          "minRating": {
            "title": "Minimum review stars (1-5)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Minimum stars, 1-5; default 1 includes all ratings with default maxRating=5. Must not exceed maxRating; combines with date, keyword and version filters. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": 1
          },
          "maxRating": {
            "title": "Maximum review stars (1-5)",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Maximum stars, 1-5; default 5 includes all ratings with default minRating=1. Must be at least minRating; combines with date, keyword and version filters. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": 5
          },
          "sinceDate": {
            "title": "Earliest update date (YYYY-MM-DD)",
            "type": "string",
            "description": "Earliest updated date, YYYY-MM-DD inclusive; omitted/empty has no lower bound. Must be on or before untilDate; combines with other filters. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY."
          },
          "untilDate": {
            "title": "Latest update date (YYYY-MM-DD)",
            "type": "string",
            "description": "Latest updated date, YYYY-MM-DD inclusive; omitted/empty has no upper bound. Must be on or after sinceDate; combines with other filters. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY."
          },
          "maxReviews": {
            "title": "Reviews per app and country (1-10000)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Matching reviews per app/country, 1-10000; default 100, prefill 10. maxItems also caps the combined total; delta counts only unseen matching reviews. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": 100
          },
          "maxItems": {
            "title": "Total reviews across targets (1-10000)",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Shared review budget across all apps and countries, 1-10000. Omitted/empty has no run-wide cap; maxReviews still caps each target. Later targets may be skipped once exhausted. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY."
          },
          "proxyConfiguration": {
            "title": "Proxy settings (Apify Proxy object)",
            "type": "object",
            "description": "Default {\"useApifyProxy\":true} routes source requests through Apify Proxy. Set false for direct requests; pinned groups prevent residential fallback. Source blocks retry on fresh sessions. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": {
              "useApifyProxy": true
            }
          },
          "keywords": {
            "title": "Review keywords",
            "type": "array",
            "description": "Title/text phrases; default [] accepts all text. Any phrase matches case-insensitively, including non-English text. Combines with rating/date/appVersion filters; excluded reviews are not saved. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "appVersion": {
            "title": "App version filter",
            "type": "string",
            "description": "Exact review version; default empty accepts all versions. When set, missing versions are excluded. Apple coverage is limited; combines with other filters. Matching saved reviews share maxItems across targets. Bad, blocked or empty targets succeed with 0 items; malformed input fails. See RUN_SUMMARY.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}