{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store & Google Play AI  reviews scraper (1$/1.000 reviews)",
    "description": "Scrape Apple App Store and Google Play reviews in one run and get AI-classified sentiment, themes, bugs, feature requests, churn signals, and executive insight reports.",
    "version": "1.0",
    "x-build-id": "wWJ5mh9Mz96O1cG48"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lofomachines~mobile-app-review-intelligence/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lofomachines-mobile-app-review-intelligence",
        "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/lofomachines~mobile-app-review-intelligence/runs": {
      "post": {
        "operationId": "runs-sync-lofomachines-mobile-app-review-intelligence",
        "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/lofomachines~mobile-app-review-intelligence/run-sync": {
      "post": {
        "operationId": "run-sync-lofomachines-mobile-app-review-intelligence",
        "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 to analyze",
            "type": "array",
            "description": "One entry per app. <b>iOS / App Store</b>: the numeric app ID (e.g. <code>458023433</code>), the ID with its <code>id</code> prefix (<code>id458023433</code>), or the full store URL (<code>https://apps.apple.com/it/app/splitwise/id458023433</code>) — the number after <code>/id</code> in the URL is the app ID. <b>Android / Google Play</b>: the package name (e.g. <code>com.whatsapp</code>, <code>com.Splitwise.SplitwiseMobile</code>) or the full store URL (<code>https://play.google.com/store/apps/details?id=com.whatsapp</code>) — the package name is the <code>id=</code> parameter in the URL. <b>App name</b>: plain text (e.g. <code>Duolingo</code>) is searched on both stores and the best match on each is used. Numeric values are always treated as App Store IDs and values like <code>com.company.app</code> as Google Play packages, so add both if you want the same product from both stores. Add competitors here too to get a side-by-side comparison.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerApp": {
            "title": "Max reviews per app",
            "minimum": 100,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of reviews to collect per app. Reviews are collected country by country until this number is reached, so the actual total depends on how many reviews each store actually publishes for that app in the countries you selected (a small app may have only a few dozen per country). More reviews = deeper insights.",
            "default": 100
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Two-letter <b>ISO country codes</b> of the app stores to collect reviews from — e.g. <code>us</code>, <code>gb</code>, <code>it</code>, <code>de</code>, <code>fr</code>, <code>es</code>, <code>br</code>, <code>in</code>, <code>jp</code>. These are countries, not languages: <code>en</code> is not a country code (use <code>us</code> or <code>gb</code>) and invalid codes are ignored. Reviews are collected country by country until the maximum is reached, so add more countries to collect more reviews.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Preferred language code for review collection (e.g. <code>en</code>, <code>de</code>, <code>it</code>, <code>es</code>, <code>pt</code>). It sets the Google Play language and the App Store review locale — it does <b>not</b> replace the country list above.",
            "default": "en"
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "helpful"
            ],
            "type": "string",
            "description": "Collect the newest reviews first (best for monitoring) or the most helpful ones first (best for research). Applies to Google Play; the App Store only publishes reviews newest-first.",
            "default": "newest"
          },
          "aiInsights": {
            "title": "AI insights & review classification",
            "type": "boolean",
            "description": "When enabled, every review is enriched with sentiment, theme, topic tags, severity, and churn-risk signals, and each app gets an executive insight report (top complaints, top feature requests, emerging issues, recommendations). Disable to get clean raw reviews only.",
            "default": true
          },
          "analysisGoal": {
            "title": "Analysis focus",
            "enum": [
              "balanced",
              "bugs",
              "feature_requests",
              "churn",
              "competitor"
            ],
            "type": "string",
            "description": "Tell the AI what matters most to you. This shapes the insight reports and recommendations.",
            "default": "balanced"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is used for the store requests. The App Store limits how many reviews a single IP can pull, so rotating proxy sessions is what keeps large runs complete — leave this on unless you have a reason not to. Turning it off makes all requests come from one IP, which usually means fewer reviews per app.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}