{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store & Google Play Reviews Scraper with AI Sentiment",
    "description": "App Store & Google Play Reviews Scraper with AI Sentiment & Feature Requests. Both stores, many countries, app version on every review, optional AI tags and insights. From $0.15 / 1,000 reviews.",
    "version": "0.1",
    "x-build-id": "pyyqDxKlrUoKNr31Y"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/craftedincode~app-reviews-ai-insights/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-craftedincode-app-reviews-ai-insights",
        "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/craftedincode~app-reviews-ai-insights/runs": {
      "post": {
        "operationId": "runs-sync-craftedincode-app-reviews-ai-insights",
        "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/craftedincode~app-reviews-ai-insights/run-sync": {
      "post": {
        "operationId": "run-sync-craftedincode-app-reviews-ai-insights",
        "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",
            "minItems": 1,
            "type": "array",
            "description": "Apps to scrape. Apple ids are numeric (WhatsApp is 310633997). Google ids are package names (com.whatsapp). You can also paste an App Store or Play Store URL in id.",
            "items": {
              "type": "object",
              "properties": {
                "store": {
                  "title": "Store",
                  "type": "string",
                  "enum": [
                    "apple",
                    "google"
                  ],
                  "description": "apple or google"
                },
                "id": {
                  "title": "App id",
                  "type": "string",
                  "description": "Apple numeric id or Google package name"
                }
              },
              "required": [
                "store",
                "id"
              ]
            },
            "default": [
              {
                "store": "apple",
                "id": "310633997"
              },
              {
                "store": "google",
                "id": "com.whatsapp"
              }
            ]
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Two-letter storefront country codes. Each country is scraped separately and written with a country field.",
            "items": {
              "type": "string"
            },
            "default": [
              "us"
            ]
          },
          "language": {
            "title": "Google Play language",
            "type": "string",
            "description": "Language passed to Google Play as hl (for example en or es). Apple's public RSS feed is localized by country, not by this field.",
            "default": "en"
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Cap per app, across all countries combined. The free plan is also capped at 100 reviews for the whole run. Apple's public feed only returns about 10 pages × 50 reviews per country.",
            "default": 50
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "newest",
              "helpful",
              "rating"
            ],
            "type": "string",
            "description": "newest stops early when sinceDate is set. Apple has no rating sort; rating falls back to newest on the App Store.",
            "default": "newest"
          },
          "sinceDate": {
            "title": "Since date",
            "type": "string",
            "description": "Keep reviews on or after this date (YYYY-MM-DD). Leave empty for no date filter."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Drop reviews below this star rating. Leave empty to keep every rating."
          },
          "includeReviewerNames": {
            "title": "Include reviewer names",
            "type": "boolean",
            "description": "Off by default. Reviewer names are personal data. Turn this on only if you have a reason to store them.",
            "default": false
          },
          "aiTagging": {
            "title": "AI tags on each review",
            "type": "boolean",
            "description": "Sentiment, categories, feature request, bug, severity, churn risk, language, and spam. Charged as review-ai-tagged after the review is saved. Free plan: 20 tagged reviews per run.",
            "default": false
          },
          "insightsReport": {
            "title": "Per-app insights report",
            "type": "boolean",
            "description": "One report per app: top themes, version regressions, feature requests, sentiment trend, and a reply-priority list. Charged as app-insights-report.",
            "default": false
          },
          "compareApps": {
            "title": "Compare apps",
            "type": "boolean",
            "description": "Compare complaint themes across 2–5 apps. Charged as one extra app-insights-report. On the free plan only one report is produced per run, and the comparison comes first.",
            "default": false
          },
          "maxAiReviews": {
            "title": "Max AI-tagged reviews",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Hard cap on review-ai-tagged charges for this run. The cap is split evenly across every app (remainder goes to the earlier apps). If an app has fewer reviews than its share, the unused tags go to the other apps. The free-plan cap of 20 still applies to the total, not to each app.",
            "default": 2000
          },
          "maxChargeUsd": {
            "title": "Max charge (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Optional extra ceiling for this run. The run also stops at ACTOR_MAX_TOTAL_CHARGE_USD when that is set in the Apify console. The lower of the two wins."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave the proxy off unless a run fails because a store blocked the datacenter IP. Public review endpoints usually answer without one.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}