{
  "openapi": "3.0.1",
  "info": {
    "title": "Mobile Apps Reviews, Downloads and Data",
    "description": "Extracts mobile app reviews, ratings, installs, metadata, versions, sentiment, themes, and competitor signals. Export data, run via API, schedule and monitor runs, or integrate with other tools.",
    "version": "0.1",
    "x-build-id": "5YTrGsREICux699QW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trovevault~mobile-apps-reviews-downloads-data-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trovevault-mobile-apps-reviews-downloads-data-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/trovevault~mobile-apps-reviews-downloads-data-scraper/runs": {
      "post": {
        "operationId": "runs-sync-trovevault-mobile-apps-reviews-downloads-data-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/trovevault~mobile-apps-reviews-downloads-data-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-trovevault-mobile-apps-reviews-downloads-data-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": "Apps",
            "type": "array",
            "description": "One or more mobile apps to analyze. The actor detects the store from each value and accepts Google Play URLs such as `https://play.google.com/store/apps/details?id=com.duolingo`, App Store URLs such as `https://apps.apple.com/us/app/duolingo-language-lessons/id570060128`, Google Play package IDs such as `com.duolingo`, or Apple numeric app IDs such as `570060128`. Use exact app URLs when possible because they remove ambiguity and keep large runs more reliable. For 500 apps, keep `maxReviewsPerApp` modest unless you need deep review sampling.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Country codes to query for store-specific ratings, rankings, metadata, and reviews. The actor uses ISO 3166-1 alpha-2 codes such as `us`, `gb`, `de`, or `br` and creates app-country rows so you can compare market differences. Start with one country for smoke tests, then add priority markets for competitor analysis. More countries multiply the number of requests and increase runtime.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerApp": {
            "title": "Max Reviews Per App",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of public review rows to collect for each app and country. The actor uses this cap separately for each detected store-country pair and also uses the sampled reviews for sentiment, complaint themes, and opportunity signals. Use 5 to 20 for fast monitoring, 50 to 200 for practical competitor research, and higher values only when you need broader review evidence. Higher values improve theme coverage but take longer and make 500-app runs more expensive.",
            "default": 100
          },
          "includeReviews": {
            "title": "Include Reviews",
            "type": "boolean",
            "description": "When enabled, the actor collects public written reviews for each app and country. Reviews are useful for sentiment, theme clustering, complaint monitoring, and support triage. Disable this when you only need app metadata, ratings, and install ranges for a very large app list.",
            "default": true
          },
          "includeAppMetadata": {
            "title": "Include App Metadata",
            "type": "boolean",
            "description": "When enabled, the actor emits one app-level row per app and country with rating, rating count, approximate Play Store installs, category, developer, price, version, and update metadata. Keep this enabled for competitor benchmarking and scheduled monitoring. Disable it only when you want review rows without app-level summaries.",
            "default": true
          },
          "analysisMode": {
            "title": "Analysis Mode",
            "enum": [
              "basic",
              "sentiment",
              "themes"
            ],
            "type": "string",
            "description": "Controls how much interpretation is added to the raw store data. `basic` returns store fields and simple review sentiment. `sentiment` adds app-level rating health and review sentiment summaries. `themes` adds lightweight complaint and praise themes from review text. Use `themes` for product research and `basic` for the cheapest large runs.",
            "default": "themes"
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of app-country jobs processed in parallel. The actor uses this to keep 500-app runs fast without opening browsers. Use 3 to 8 for stable public scraping and lower it if stores throttle requests. Higher values can finish faster but may increase rate-limit errors.",
            "default": 6
          },
          "requestDelayMillis": {
            "title": "Request Delay Milliseconds",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Small delay before each app-country job starts. The actor uses this to reduce request bursts against public store endpoints. Use `0` for small tests, 100 to 500 for larger competitor lists, and higher values if you see temporary throttling. Larger delays improve politeness but increase total runtime.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings for public store requests. The actor passes this setting to supported HTTP clients when available and still soft-fails individual blocked app-country jobs. Enable Apify Proxy only if Google Play or App Store requests return HTTP 403, 429, CAPTCHA, or region-specific blocks. Leave it disabled for normal runs to keep costs lower.",
            "default": {
              "useApifyProxy": false
            }
          },
          "datasetId": {
            "title": "Dataset ID (optional)",
            "type": "string",
            "description": "ID of an existing Apify dataset to append results to, in addition to the default run dataset. Use this for scheduled mobile app monitoring pipelines that combine several runs into one long-term dataset. Leave blank to write only to the default run dataset."
          },
          "runId": {
            "title": "Run ID (optional)",
            "type": "string",
            "description": "ID of an existing Apify actor run to associate results with. The actor copies this value into each dataset row so external workflows can connect app intelligence to an upstream job, client account, or monitoring batch. Leave blank for standalone runs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}