{
  "data": {
    "id": "VJTOyjLkpbCPPzmNt",
    "actId": "JQPGqizffRzaBsE3E",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-11-10T16:03:04.678Z",
    "finishedAt": "2026-11-10T16:03:09.577Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 4789,
      "runTimeSecs": 4.789,
      "computeUnits": 0.0053211111111111115,
      "imageSizeBytes": 319211008
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"iOS App Store Deep Reviews & App Intelligence Input\",\n  \"description\": \"Search the iOS App Store, look up apps by ID, URL or bundle ID, collect deep customer reviews with developer replies, list a publisher's catalog, or read top charts. No Apple account, cookie, or key required.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"description\": \"What to collect. Search finds apps by keyword, Lookup resolves IDs/URLs, Reviews collects customer feedback, Developer lists a publisher's apps, and Charts reads a top list.\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"lookup\",\n        \"reviews\",\n        \"developer\",\n        \"charts\"\n      ],\n      \"enumTitles\": [\n        \"Search by keyword\",\n        \"Look up apps by ID or URL\",\n        \"Collect customer reviews\",\n        \"List a developer's apps\",\n        \"Read top charts\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\",\n      \"sectionCaption\": \"What to collect\"\n    },\n    \"searchTerms\": {\n      \"title\": \"Search terms\",\n      \"description\": \"Keywords to search for (mode=search). Each term returns up to 200 ranked apps, and results are de-duplicated across terms.\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"calculator\"\n      ]\n    },\n    \"appIds\": {\n      \"title\": \"App IDs, bundle IDs, or URLs\",\n      \"description\": \"Apps to look up or review (mode=lookup/reviews). Accepts numeric App Store IDs, bundle IDs, app URLs, and developer URLs. Separate multiple values with commas or new lines.\",\n      \"type\": \"array\",\n      \"editor\": \"stringList\"\n    },\n    \"startUrls\": {\n      \"title\": \"App Store URLs\",\n      \"description\": \"Paste App Store app or developer URLs (mode=lookup/reviews). App URLs resolve to one app; developer URLs expand to that publisher's catalog.\",\n      \"type\": \"array\",\n      \"editor\": \"requestListSources\"\n    },\n    \"developerId\": {\n      \"title\": \"Developer ID or URL\",\n      \"description\": \"Apple artist ID or developer page URL (mode=developer). For example 281956209 or https://apps.apple.com/us/developer/google/id281956209. Comma-separated values are accepted.\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\"\n    },\n    \"developerName\": {\n      \"title\": \"Developer name\",\n      \"description\": \"Publisher name to resolve when you do not know the developer ID (mode=developer). The actor searches App Store listings and matches the publisher name.\",\n      \"type\": \"string\",\n      \"editor\": \"textfield\"\n    },\n    \"country\": {\n      \"title\": \"Storefront country\",\n      \"description\": \"Two-letter App Store storefront. Changes pricing, availability, chart contents, and review language.\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"us\",\n        \"gb\",\n        \"de\",\n        \"fr\",\n        \"jp\",\n        \"in\",\n        \"br\",\n        \"ca\",\n        \"au\",\n        \"cn\",\n        \"ru\",\n        \"tr\",\n        \"kr\",\n        \"mx\",\n        \"es\",\n        \"it\",\n        \"nl\",\n        \"se\",\n        \"pl\",\n        \"sa\",\n        \"za\",\n        \"ae\",\n        \"sg\",\n        \"hk\",\n        \"tw\",\n        \"th\",\n        \"id\",\n        \"my\",\n        \"ph\",\n        \"vn\",\n        \"eg\",\n        \"ng\",\n        \"ke\",\n        \"il\",\n        \"ch\",\n        \"at\",\n        \"be\",\n        \"dk\",\n        \"fi\",\n        \"no\",\n        \"pt\",\n        \"ie\",\n        \"nz\",\n        \"ar\",\n        \"cl\",\n        \"co\",\n        \"pe\",\n        \"ua\",\n        \"cz\",\n        \"ro\",\n        \"gr\",\n        \"hu\",\n        \"sk\",\n        \"bg\",\n        \"hr\",\n        \"lt\",\n        \"lv\",\n        \"ee\",\n        \"is\",\n        \"lu\",\n        \"mt\",\n        \"cy\"\n      ],\n      \"enumTitles\": [\n        \"United States\",\n        \"United Kingdom\",\n        \"Germany\",\n        \"France\",\n        \"Japan\",\n        \"India\",\n        \"Brazil\",\n        \"Canada\",\n        \"Australia\",\n        \"China\",\n        \"Russia\",\n        \"Turkey\",\n        \"South Korea\",\n        \"Mexico\",\n        \"Spain\",\n        \"Italy\",\n        \"Netherlands\",\n        \"Sweden\",\n        \"Poland\",\n        \"Saudi Arabia\",\n        \"South Africa\",\n        \"United Arab Emirates\",\n        \"Singapore\",\n        \"Hong Kong\",\n        \"Taiwan\",\n        \"Thailand\",\n        \"Indonesia\",\n        \"Malaysia\",\n        \"Philippines\",\n        \"Vietnam\",\n        \"Egypt\",\n        \"Nigeria\",\n        \"Kenya\",\n        \"Israel\",\n        \"Switzerland\",\n        \"Austria\",\n        \"Belgium\",\n        \"Denmark\",\n        \"Finland\",\n        \"Norway\",\n        \"Portugal\",\n        \"Ireland\",\n        \"New Zealand\",\n        \"Argentina\",\n        \"Chile\",\n        \"Colombia\",\n        \"Peru\",\n        \"Ukraine\",\n        \"Czechia\",\n        \"Romania\",\n        \"Greece\",\n        \"Hungary\",\n        \"Slovakia\",\n        \"Bulgaria\",\n        \"Croatia\",\n        \"Lithuania\",\n        \"Latvia\",\n        \"Estonia\",\n        \"Iceland\",\n        \"Luxembourg\",\n        \"Malta\",\n        \"Cyprus\"\n      ],\n      \"default\": \"us\",\n      \"prefill\": \"us\",\n      \"sectionCaption\": \"Storefront\"\n    },\n    \"language\": {\n      \"title\": \"Storefront language\",\n      \"description\": \"Language used for App Store metadata and reviews. Defaults to English (United States).\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en-US\",\n        \"en-GB\",\n        \"de-DE\",\n        \"fr-FR\",\n        \"es-ES\",\n        \"it-IT\",\n        \"ja-JP\",\n        \"ko-KR\",\n        \"pt-BR\",\n        \"ru-RU\",\n        \"zh-CN\",\n        \"nl-NL\",\n        \"sv-SE\",\n        \"pl-PL\",\n        \"tr-TR\",\n        \"ar-SA\"\n      ],\n      \"enumTitles\": [\n        \"English (United States)\",\n        \"English (United Kingdom)\",\n        \"German\",\n        \"French\",\n        \"Spanish\",\n        \"Italian\",\n        \"Japanese\",\n        \"Korean\",\n        \"Portuguese (Brazil)\",\n        \"Russian\",\n        \"Chinese (Simplified)\",\n        \"Dutch\",\n        \"Swedish\",\n        \"Polish\",\n        \"Turkish\",\n        \"Arabic\"\n      ],\n      \"default\": \"en-US\",\n      \"prefill\": \"en-US\"\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum records\",\n      \"description\": \"Hard cap on rows pushed per run (1-5000). Applies to apps, chart rows, and reviews combined. For very large review corpora, raise this and set maxReviewsPerApp.\",\n      \"type\": \"integer\",\n      \"editor\": \"number\",\n      \"default\": 100,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"sectionCaption\": \"Reviews\"\n    },\n    \"maxReviewsPerApp\": {\n      \"title\": \"Maximum reviews per app\",\n      \"description\": \"Reviews to collect for each app (1-50000). The deep review route returns 20 per request; RSS enrichment is available for the first 500 reviews when version or helpful-vote data exists.\",\n      \"type\": \"integer\",\n      \"editor\": \"number\",\n      \"default\": 200,\n      \"prefill\": 20,\n      \"minimum\": 1,\n      \"maximum\": 50000\n    },\n    \"reviewSort\": {\n      \"title\": \"Review order\",\n      \"description\": \"Most recent first, or Apple's most-helpful ordering (mode=reviews).\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"recent\",\n        \"helpful\"\n      ],\n      \"enumTitles\": [\n        \"Most recent\",\n        \"Most helpful\"\n      ],\n      \"default\": \"recent\",\n      \"prefill\": \"recent\"\n    },\n    \"includeDeveloperResponses\": {\n      \"title\": \"Include developer responses\",\n      \"description\": \"Keep developer replies when Apple exposes them (mode=reviews). Replies are available only for apps where the developer actually responded.\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeDetails\": {\n      \"title\": \"Include rich app details\",\n      \"description\": \"Add App Store detail fields such as privacy labels, version history, rating histogram, support URL, and subtitle (app-producing modes). Disable it for the fastest, cheapest search runs.\",\n      \"type\": \"boolean\",\n      \"default\": true,\n      \"prefill\": false,\n      \"sectionCaption\": \"Output and limits\"\n    },\n    \"chartType\": {\n      \"title\": \"Chart\",\n      \"description\": \"Top chart to read (mode=charts). Mac charts use the App Store Mac catalog.\",\n      \"type\": \"string\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"top-free\",\n        \"top-paid\",\n        \"top-grossing\",\n        \"top-free-ipad\",\n        \"top-paid-ipad\",\n        \"top-free-mac\"\n      ],\n      \"enumTitles\": [\n        \"Top free iPhone apps\",\n        \"Top paid iPhone apps\",\n        \"Top grossing iPhone apps\",\n        \"Top free iPad apps\",\n        \"Top paid iPad apps\",\n        \"Top free Mac apps\"\n      ],\n      \"default\": \"top-free\",\n      \"prefill\": \"top-free\"\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"description\": \"Optional. The actor works without a proxy. Add an Apify Proxy configuration only if your own network or a future Apple rate limit needs it.\",\n      \"type\": \"object\",\n      \"editor\": \"proxy\",\n      \"default\": {\n        \"useApifyProxy\": false\n      }\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# iOS App Store Deep Reviews & App Intelligence\n\nCollect structured data from the iOS App Store: app metadata, customer reviews with developer replies, publisher catalogs, and top-chart rankings. Everything runs without an Apple account, cookie, API key, or proxy setup.\n\n## What this actor does\n\n- **Five modes:** `search`, `lookup`, `reviews`, `developer`, `charts`\n- **Deep reviews:** pages through Apple's own App Store review API at 20 reviews per request, well past the 500-review RSS limit, and falls back to RSS when needed\n- **Developer replies:** kept when Apple exposes them for a review\n- **Rich app data:** privacy labels, rating histogram, version history, subtitle, support URL, requirements, and chart position\n- **62 storefronts:** pricing, availability, charts, and review language follow the selected country\n- **Backward compatible:** old saved inputs with `searchTerms`, `appIds`, `startUrls`, `maxResults`, `includeReviews`, or `reviewPages` still run; the legacy fields are accepted in code and are no longer shown in the input form\n- **No empty values:** every record is cleaned recursively; fields Apple does not provide are omitted rather than returned as `null`, `\"\"`, or `[]`\n\n## Modes\n\n| Mode | What it returns | Notes |\n|---|---|---|\n| `search` | One row per app for each keyword | Up to 200 apps per term (Apple's cap), de-duplicated across terms, with `searchTerm` and `searchRank` |\n| `lookup` | One row per app | Accepts numeric IDs, bundle IDs, app URLs, and developer URLs; developer URLs expand to the publisher catalog |\n| `reviews` | One row per review | Deep pagination plus RSS enrichment for version, reviewer URL, and helpful votes |\n| `developer` | One row per app | Resolves a developer ID, developer URL, or publisher name; up to 200 apps per publisher |\n| `charts` | One row per chart entry | Top free, paid, grossing, iPad, and Mac charts, with `chartPosition` |\n\n## Output per app\n\nIdentity and storefront:\n\n- `id`, `appId` — numeric App Store ID\n- `bundleId`, `name`, `subtitle`\n- `url`, `sourceUrl` — App Store page\n- `country`, `language`\n\nDeveloper:\n\n- `developer`, `developerId`, `developerUrl`, `developerWebsite`\n- `sellerInfo` — EU/EEA trader details when Apple publishes them\n\nPricing and ratings:\n\n- `price`, `formattedPrice`, `currency`, `isFree`\n- `rating`, `ratingCount`\n- `currentVersionRating`, `currentVersionRatingCount`\n- `ratingHistogram` — 1★ through 5★ counts\n\nContent and release data:\n\n- `description`, `releaseNotes`, `version`\n- `releaseDate`, `lastUpdated`\n- `category`, `genres`, `contentRating`, `ageRating`, `advisories`\n- `minimumOs`, `requirements`\n- `fileSize`, `size` — bytes\n- `icon`, `screenshots`, `ipadScreenshots`\n- `languages` — iTunes language codes\n- `languageNames` — full language names from the App Store detail page\n\nTrust and depth:\n\n- `privacy` — App Store privacy labels as `{type, category, dataTypes}` rows, plus purposes where Apple supplies them\n- `privacyPolicyUrl`, `supportUrl`\n- `versionHistory` — up to 25 releases, newest first\n- `chartPosition`, `chartType` — when Apple reports a current chart position, and for chart runs\n- `searchTerm`, `searchRank` — search runs only\n- `recordType: \"app\"`, `scrapedAt`\n\nRich fields appear only when `includeDetails` is on and Apple exposes the data. A field Apple genuinely lacks for a given app is omitted.\n\n## Output per review\n\n- `id` — Apple review ID\n- `appId`\n- `country`\n- `rating` — 1 to 5\n- `title`, `text`\n- `author`, `authorUrl`\n- `date` — Apple's review timestamp\n- `version` — reviewed release, when RSS exposes it\n- `voteCount`, `voteSum` — helpfulness votes, when RSS exposes them\n- `isEdited`\n- `developerResponse` — `{body, date}` when the developer replied and `includeDeveloperResponses` is on\n- `sort`, `position`\n- `sourceUrl`, `recordType: \"review\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `lookup`, `reviews`, `developer`, or `charts` |\n| `searchTerms` | array | `[\"calculator\"]` in the daily prefill | Keywords for `search` |\n| `appIds` | array | – | Numeric IDs, bundle IDs, app URLs, or developer URLs for `lookup`/`reviews` |\n| `startUrls` | array | – | App Store app or developer URLs for `lookup`/`reviews` |\n| `developerId` | string | – | Apple artist ID or developer URL for `developer` |\n| `developerName` | string | – | Publisher name to resolve for `developer` |\n| `country` | string | `us` | One of 62 App Store storefronts |\n| `language` | string | `en-US` | Storefront language |\n| `maxItems` | integer | `100` | Hard row cap for the whole run (1–5000) |\n| `maxReviewsPerApp` | integer | `200` | Review cap per app (1–50000) |\n| `reviewSort` | string | `recent` | `recent` or `helpful` |\n| `includeDeveloperResponses` | boolean | `true` | Keep developer replies when present |\n| `includeDetails` | boolean | `true` | Add privacy, version history, histogram, support URL, and other rich detail |\n| `chartType` | string | `top-free` | `top-free`, `top-paid`, `top-grossing`, `top-free-ipad`, `top-paid-ipad`, or `top-free-mac` |\n| `proxyConfiguration` | object | disabled | Optional proxy; the actor works without one |\n\nThe daily test prefill runs `search` for `calculator` in the US storefront, `maxItems: 3`, and `includeDetails: false`. That is three App Store search results from a single iTunes request.\n\n### Example: search with rich details\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchTerms\": [\"photo editor\", \"note taking\"],\n  \"country\": \"us\",\n  \"maxItems\": 50,\n  \"includeDetails\": true\n}\n```\n\n### Example: look up apps by ID, bundle ID, and URL\n\n```json\n{\n  \"mode\": \"lookup\",\n  \"appIds\": [\"544007664\", \"com.google.ios.youtube\"],\n  \"startUrls\": [\n    {\"url\": \"https://apps.apple.com/gb/app/things-3/id904280696\"}\n  ],\n  \"country\": \"gb\"\n}\n```\n\n### Example: deep reviews with developer replies\n\n```json\n{\n  \"mode\": \"reviews\",\n  \"appIds\": [\"618783545\"],\n  \"country\": \"us\",\n  \"maxReviewsPerApp\": 2000,\n  \"reviewSort\": \"recent\",\n  \"includeDeveloperResponses\": true\n}\n```\n\n### Example: a developer's catalog\n\n```json\n{\n  \"mode\": \"developer\",\n  \"developerId\": \"281956209\",\n  \"country\": \"us\",\n  \"maxItems\": 200\n}\n```\n\n### Example: top free chart\n\n```json\n{\n  \"mode\": \"charts\",\n  \"chartType\": \"top-free\",\n  \"country\": \"jp\",\n  \"maxItems\": 100\n}\n```\n\n## What is available and what is not\n\n- **Search** returns up to 200 apps per term. Apple does not paginate search results.\n- **RSS reviews** are capped at 10 pages, 50 reviews per page, so 500 reviews per app and country.\n- **Deep reviews** use Apple's same-origin App Store API at 20 reviews per request. Pagination stops when Apple's corpus ends (HTTP 404), when the per-app cap is reached, or when `maxItems` is reached.\n- **Developer responses** exist only on apps where the developer replied. They are not available for every review or every app.\n- **Written reviews are not the same as ratings.** `ratingCount` counts star ratings; the actor reports only the review rows it actually collected.\n- **Version, reviewer URL, and helpful votes** come from the RSS feed and therefore cover at most the first 500 reviews per app and country.\n- **In-app purchase catalogs, autocomplete, and Apple TV screenshots** are not exposed by the cookieless routes used here, so they are not emitted.\n- **Apple TV** apps are outside this actor's scope; it reads iPhone, iPad, and Mac listings.\n\n## Reliability\n\n- Requests to `apps.apple.com` are serialized and throttled. HTTP 429 and 5xx responses retry with exponential backoff and `Retry-After` support.\n- If a rich detail request fails, the app still ships with its iTunes metadata and the run reports a warning.\n- If every request is blocked or Apple is unavailable, the run fails with an explicit message instead of returning an empty dataset.\n- Duplicate apps are removed by App Store ID. Duplicate reviews are removed by review ID.\n- Partial runs keep the rows that succeeded and report how many warnings occurred.\n\n## FAQ\n\n**Do I need an Apple Developer account or API key?**\nNo. The actor reads Apple's public App Store listings, review feeds, and the same-origin web API used by the App Store website.\n\n**How do I find an app ID?**\nOpen the app in a browser. The number after `/id` is the App Store ID, for example `https://apps.apple.com/us/app/youtube/id544007664` gives `544007664`.\n\n**Can I pass bundle IDs?**\nYes. Put a bundle ID such as `com.google.ios.youtube` in `appIds`. Bundle IDs also work in `lookup` and `reviews` modes.\n\n**Why do some apps have fewer reviews than requested?**\nApple returns only the reviews that exist for that app in that storefront. The deep route can page far past the 500-review RSS limit for large apps, but a small app may have only a handful. RSS is capped at 500.\n\n**Why are developer replies missing?**\nApple exposes a reply only when the developer actually wrote one. Apps with no reply history return no `developerResponse` field.\n\n**Why is `version` missing from a deep review?**\nThe deep review API does not include the reviewed version. The actor fills it from RSS for the first 500 reviews; older reviews have no version.\n\n**Does the country change results?**\nYes. Country controls pricing and currency, app availability, chart contents, and the language of reviews.\n\n**Can I run several countries in one run?**\nOne country per run. Run the actor once per storefront and combine the datasets.\n\n**Is this affiliated with Apple?**\nNo. This is an independent third-party actor that reads publicly available App Store data. It is not affiliated with or endorsed by Apple Inc.\n\n## Use it as an API (server mode)\n\nNeed one answer right away instead of a batch job? Send the input as an HTTP request and the results come back in the response. There's no run to start and poll.\n\n```bash\ncurl -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  \"https://nimbryxo-studio--app-store-search-lookup-and-reviews-scraper.apify.actor/?mode=search&searchTerms=calculator&maxItems=3&includeDetails=false&includeDeveloperResponses=false\"\n```\n\nOr POST the same input as JSON:\n\n```bash\ncurl -X POST -H \"Authorization: Bearer $APIFY_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": \"search\", \"searchTerms\": [\"calculator\"], \"maxItems\": 3, \"includeDetails\": false, \"includeDeveloperResponses\": false}' \\\n  \"https://nimbryxo-studio--app-store-search-lookup-and-reviews-scraper.apify.actor/\"\n```\n\n- The fields are the same as in the input above. With GET, repeat a parameter once for each value in a list.\n- You get back a JSON array with the same records a normal run saves. They're saved to the run's dataset too.\n- Each request is capped at 100 results and 4 minutes. For bigger jobs, start a normal run.\n- The request runs in your own Apify account at the Actor's normal price (a start fee plus a price per result). The server shuts down after a minute with no requests.\n- The Server tab on this page lists every parameter and lets you try a request from your browser.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "app-store-search-lookup-and-reviews-scraper",
      "title": "iOS App Store Deep Reviews & App Intelligence",
      "description": "Collect iOS App Store app data, deep customer reviews with developer replies, publisher catalogs, and top charts across 62 storefronts. No Apple account, cookie, or API key required.",
      "version": "2.0",
      "meta": {
        "programLanguage": "python"
      },
      "input": {
        "title": "iOS App Store Deep Reviews & App Intelligence Input",
        "description": "Search the iOS App Store, look up apps by ID, URL or bundle ID, collect deep customer reviews with developer replies, list a publisher's catalog, or read top charts. No Apple account, cookie, or key required.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "description": "What to collect. Search finds apps by keyword, Lookup resolves IDs/URLs, Reviews collects customer feedback, Developer lists a publisher's apps, and Charts reads a top list.",
            "type": "string",
            "editor": "select",
            "enum": [
              "search",
              "lookup",
              "reviews",
              "developer",
              "charts"
            ],
            "enumTitles": [
              "Search by keyword",
              "Look up apps by ID or URL",
              "Collect customer reviews",
              "List a developer's apps",
              "Read top charts"
            ],
            "default": "search",
            "prefill": "search",
            "sectionCaption": "What to collect"
          },
          "searchTerms": {
            "title": "Search terms",
            "description": "Keywords to search for (mode=search). Each term returns up to 200 ranked apps, and results are de-duplicated across terms.",
            "type": "array",
            "editor": "stringList",
            "prefill": [
              "calculator"
            ]
          },
          "appIds": {
            "title": "App IDs, bundle IDs, or URLs",
            "description": "Apps to look up or review (mode=lookup/reviews). Accepts numeric App Store IDs, bundle IDs, app URLs, and developer URLs. Separate multiple values with commas or new lines.",
            "type": "array",
            "editor": "stringList"
          },
          "startUrls": {
            "title": "App Store URLs",
            "description": "Paste App Store app or developer URLs (mode=lookup/reviews). App URLs resolve to one app; developer URLs expand to that publisher's catalog.",
            "type": "array",
            "editor": "requestListSources"
          },
          "developerId": {
            "title": "Developer ID or URL",
            "description": "Apple artist ID or developer page URL (mode=developer). For example 281956209 or https://apps.apple.com/us/developer/google/id281956209. Comma-separated values are accepted.",
            "type": "string",
            "editor": "textfield"
          },
          "developerName": {
            "title": "Developer name",
            "description": "Publisher name to resolve when you do not know the developer ID (mode=developer). The actor searches App Store listings and matches the publisher name.",
            "type": "string",
            "editor": "textfield"
          },
          "country": {
            "title": "Storefront country",
            "description": "Two-letter App Store storefront. Changes pricing, availability, chart contents, and review language.",
            "type": "string",
            "editor": "select",
            "enum": [
              "us",
              "gb",
              "de",
              "fr",
              "jp",
              "in",
              "br",
              "ca",
              "au",
              "cn",
              "ru",
              "tr",
              "kr",
              "mx",
              "es",
              "it",
              "nl",
              "se",
              "pl",
              "sa",
              "za",
              "ae",
              "sg",
              "hk",
              "tw",
              "th",
              "id",
              "my",
              "ph",
              "vn",
              "eg",
              "ng",
              "ke",
              "il",
              "ch",
              "at",
              "be",
              "dk",
              "fi",
              "no",
              "pt",
              "ie",
              "nz",
              "ar",
              "cl",
              "co",
              "pe",
              "ua",
              "cz",
              "ro",
              "gr",
              "hu",
              "sk",
              "bg",
              "hr",
              "lt",
              "lv",
              "ee",
              "is",
              "lu",
              "mt",
              "cy"
            ],
            "enumTitles": [
              "United States",
              "United Kingdom",
              "Germany",
              "France",
              "Japan",
              "India",
              "Brazil",
              "Canada",
              "Australia",
              "China",
              "Russia",
              "Turkey",
              "South Korea",
              "Mexico",
              "Spain",
              "Italy",
              "Netherlands",
              "Sweden",
              "Poland",
              "Saudi Arabia",
              "South Africa",
              "United Arab Emirates",
              "Singapore",
              "Hong Kong",
              "Taiwan",
              "Thailand",
              "Indonesia",
              "Malaysia",
              "Philippines",
              "Vietnam",
              "Egypt",
              "Nigeria",
              "Kenya",
              "Israel",
              "Switzerland",
              "Austria",
              "Belgium",
              "Denmark",
              "Finland",
              "Norway",
              "Portugal",
              "Ireland",
              "New Zealand",
              "Argentina",
              "Chile",
              "Colombia",
              "Peru",
              "Ukraine",
              "Czechia",
              "Romania",
              "Greece",
              "Hungary",
              "Slovakia",
              "Bulgaria",
              "Croatia",
              "Lithuania",
              "Latvia",
              "Estonia",
              "Iceland",
              "Luxembourg",
              "Malta",
              "Cyprus"
            ],
            "default": "us",
            "prefill": "us",
            "sectionCaption": "Storefront"
          },
          "language": {
            "title": "Storefront language",
            "description": "Language used for App Store metadata and reviews. Defaults to English (United States).",
            "type": "string",
            "editor": "select",
            "enum": [
              "en-US",
              "en-GB",
              "de-DE",
              "fr-FR",
              "es-ES",
              "it-IT",
              "ja-JP",
              "ko-KR",
              "pt-BR",
              "ru-RU",
              "zh-CN",
              "nl-NL",
              "sv-SE",
              "pl-PL",
              "tr-TR",
              "ar-SA"
            ],
            "enumTitles": [
              "English (United States)",
              "English (United Kingdom)",
              "German",
              "French",
              "Spanish",
              "Italian",
              "Japanese",
              "Korean",
              "Portuguese (Brazil)",
              "Russian",
              "Chinese (Simplified)",
              "Dutch",
              "Swedish",
              "Polish",
              "Turkish",
              "Arabic"
            ],
            "default": "en-US",
            "prefill": "en-US"
          },
          "maxItems": {
            "title": "Maximum records",
            "description": "Hard cap on rows pushed per run (1-5000). Applies to apps, chart rows, and reviews combined. For very large review corpora, raise this and set maxReviewsPerApp.",
            "type": "integer",
            "editor": "number",
            "default": 100,
            "prefill": 3,
            "minimum": 1,
            "maximum": 5000,
            "sectionCaption": "Reviews"
          },
          "maxReviewsPerApp": {
            "title": "Maximum reviews per app",
            "description": "Reviews to collect for each app (1-50000). The deep review route returns 20 per request; RSS enrichment is available for the first 500 reviews when version or helpful-vote data exists.",
            "type": "integer",
            "editor": "number",
            "default": 200,
            "prefill": 20,
            "minimum": 1,
            "maximum": 50000
          },
          "reviewSort": {
            "title": "Review order",
            "description": "Most recent first, or Apple's most-helpful ordering (mode=reviews).",
            "type": "string",
            "editor": "select",
            "enum": [
              "recent",
              "helpful"
            ],
            "enumTitles": [
              "Most recent",
              "Most helpful"
            ],
            "default": "recent",
            "prefill": "recent"
          },
          "includeDeveloperResponses": {
            "title": "Include developer responses",
            "description": "Keep developer replies when Apple exposes them (mode=reviews). Replies are available only for apps where the developer actually responded.",
            "type": "boolean",
            "default": true,
            "prefill": false
          },
          "includeDetails": {
            "title": "Include rich app details",
            "description": "Add App Store detail fields such as privacy labels, version history, rating histogram, support URL, and subtitle (app-producing modes). Disable it for the fastest, cheapest search runs.",
            "type": "boolean",
            "default": true,
            "prefill": false,
            "sectionCaption": "Output and limits"
          },
          "chartType": {
            "title": "Chart",
            "description": "Top chart to read (mode=charts). Mac charts use the App Store Mac catalog.",
            "type": "string",
            "editor": "select",
            "enum": [
              "top-free",
              "top-paid",
              "top-grossing",
              "top-free-ipad",
              "top-paid-ipad",
              "top-free-mac"
            ],
            "enumTitles": [
              "Top free iPhone apps",
              "Top paid iPhone apps",
              "Top grossing iPhone apps",
              "Top free iPad apps",
              "Top paid iPad apps",
              "Top free Mac apps"
            ],
            "default": "top-free",
            "prefill": "top-free"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "description": "Optional. The actor works without a proxy. Add an Apify Proxy configuration only if your own network or a future Apple rate limit needs it.",
            "type": "object",
            "editor": "proxy",
            "default": {
              "useApifyProxy": false
            }
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "iOS App Store Deep Reviews & App Intelligence Output",
        "description": "App metadata, chart rankings, and customer reviews from the iOS App Store, including privacy labels, version history, and developer responses when Apple exposes them.",
        "properties": {
          "apps": {
            "type": "string",
            "title": "App and chart records",
            "description": "Dataset containing App Store apps, developer catalog entries, and chart rows.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "reviews": {
            "type": "string",
            "title": "Customer reviews",
            "description": "Dataset containing App Store customer reviews and any developer responses.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "readme": "# iOS App Store Deep Reviews & App Intelligence\n\nCollect structured data from the iOS App Store: app metadata, customer reviews with developer replies, publisher catalogs, and top-chart rankings. Everything runs without an Apple account, cookie, API key, or proxy setup.\n\n## What this actor does\n\n- **Five modes:** `search`, `lookup`, `reviews`, `developer`, `charts`\n- **Deep reviews:** pages through Apple's own App Store review API at 20 reviews per request, well past the 500-review RSS limit, and falls back to RSS when needed\n- **Developer replies:** kept when Apple exposes them for a review\n- **Rich app data:** privacy labels, rating histogram, version history, subtitle, support URL, requirements, and chart position\n- **62 storefronts:** pricing, availability, charts, and review language follow the selected country\n- **Backward compatible:** old saved inputs with `searchTerms`, `appIds`, `startUrls`, `maxResults`, `includeReviews`, or `reviewPages` still run; the legacy fields are accepted in code and are no longer shown in the input form\n- **No empty values:** every record is cleaned recursively; fields Apple does not provide are omitted rather than returned as `null`, `\"\"`, or `[]`\n\n## Modes\n\n| Mode | What it returns | Notes |\n|---|---|---|\n| `search` | One row per app for each keyword | Up to 200 apps per term (Apple's cap), de-duplicated across terms, with `searchTerm` and `searchRank` |\n| `lookup` | One row per app | Accepts numeric IDs, bundle IDs, app URLs, and developer URLs; developer URLs expand to the publisher catalog |\n| `reviews` | One row per review | Deep pagination plus RSS enrichment for version, reviewer URL, and helpful votes |\n| `developer` | One row per app | Resolves a developer ID, developer URL, or publisher name; up to 200 apps per publisher |\n| `charts` | One row per chart entry | Top free, paid, grossing, iPad, and Mac charts, with `chartPosition` |\n\n## Output per app\n\nIdentity and storefront:\n\n- `id`, `appId` — numeric App Store ID\n- `bundleId`, `name`, `subtitle`\n- `url`, `sourceUrl` — App Store page\n- `country`, `language`\n\nDeveloper:\n\n- `developer`, `developerId`, `developerUrl`, `developerWebsite`\n- `sellerInfo` — EU/EEA trader details when Apple publishes them\n\nPricing and ratings:\n\n- `price`, `formattedPrice`, `currency`, `isFree`\n- `rating`, `ratingCount`\n- `currentVersionRating`, `currentVersionRatingCount`\n- `ratingHistogram` — 1★ through 5★ counts\n\nContent and release data:\n\n- `description`, `releaseNotes`, `version`\n- `releaseDate`, `lastUpdated`\n- `category`, `genres`, `contentRating`, `ageRating`, `advisories`\n- `minimumOs`, `requirements`\n- `fileSize`, `size` — bytes\n- `icon`, `screenshots`, `ipadScreenshots`\n- `languages` — iTunes language codes\n- `languageNames` — full language names from the App Store detail page\n\nTrust and depth:\n\n- `privacy` — App Store privacy labels as `{type, category, dataTypes}` rows, plus purposes where Apple supplies them\n- `privacyPolicyUrl`, `supportUrl`\n- `versionHistory` — up to 25 releases, newest first\n- `chartPosition`, `chartType` — when Apple reports a current chart position, and for chart runs\n- `searchTerm`, `searchRank` — search runs only\n- `recordType: \"app\"`, `scrapedAt`\n\nRich fields appear only when `includeDetails` is on and Apple exposes the data. A field Apple genuinely lacks for a given app is omitted.\n\n## Output per review\n\n- `id` — Apple review ID\n- `appId`\n- `country`\n- `rating` — 1 to 5\n- `title`, `text`\n- `author`, `authorUrl`\n- `date` — Apple's review timestamp\n- `version` — reviewed release, when RSS exposes it\n- `voteCount`, `voteSum` — helpfulness votes, when RSS exposes them\n- `isEdited`\n- `developerResponse` — `{body, date}` when the developer replied and `includeDeveloperResponses` is on\n- `sort`, `position`\n- `sourceUrl`, `recordType: \"review\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `lookup`, `reviews`, `developer`, or `charts` |\n| `searchTerms` | array | `[\"calculator\"]` in the daily prefill | Keywords for `search` |\n| `appIds` | array | – | Numeric IDs, bundle IDs, app URLs, or developer URLs for `lookup`/`reviews` |\n| `startUrls` | array | – | App Store app or developer URLs for `lookup`/`reviews` |\n| `developerId` | string | – | Apple artist ID or developer URL for `developer` |\n| `developerName` | string | – | Publisher name to resolve for `developer` |\n| `country` | string | `us` | One of 62 App Store storefronts |\n| `language` | string | `en-US` | Storefront language |\n| `maxItems` | integer | `100` | Hard row cap for the whole run (1–5000) |\n| `maxReviewsPerApp` | integer | `200` | Review cap per app (1–50000) |\n| `reviewSort` | string | `recent` | `recent` or `helpful` |\n| `includeDeveloperResponses` | boolean | `true` | Keep developer replies when present |\n| `includeDetails` | boolean | `true` | Add privacy, version history, histogram, support URL, and other rich detail |\n| `chartType` | string | `top-free` | `top-free`, `top-paid`, `top-grossing`, `top-free-ipad`, `top-paid-ipad`, or `top-free-mac` |\n| `proxyConfiguration` | object | disabled | Optional proxy; the actor works without one |\n\nThe daily test prefill runs `search` for `calculator` in the US storefront, `maxItems: 3`, and `includeDetails: false`. That is three App Store search results from a single iTunes request.\n\n### Example: search with rich details\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchTerms\": [\"photo editor\", \"note taking\"],\n  \"country\": \"us\",\n  \"maxItems\": 50,\n  \"includeDetails\": true\n}\n```\n\n### Example: look up apps by ID, bundle ID, and URL\n\n```json\n{\n  \"mode\": \"lookup\",\n  \"appIds\": [\"544007664\", \"com.google.ios.youtube\"],\n  \"startUrls\": [\n    {\"url\": \"https://apps.apple.com/gb/app/things-3/id904280696\"}\n  ],\n  \"country\": \"gb\"\n}\n```\n\n### Example: deep reviews with developer replies\n\n```json\n{\n  \"mode\": \"reviews\",\n  \"appIds\": [\"618783545\"],\n  \"country\": \"us\",\n  \"maxReviewsPerApp\": 2000,\n  \"reviewSort\": \"recent\",\n  \"includeDeveloperResponses\": true\n}\n```\n\n### Example: a developer's catalog\n\n```json\n{\n  \"mode\": \"developer\",\n  \"developerId\": \"281956209\",\n  \"country\": \"us\",\n  \"maxItems\": 200\n}\n```\n\n### Example: top free chart\n\n```json\n{\n  \"mode\": \"charts\",\n  \"chartType\": \"top-free\",\n  \"country\": \"jp\",\n  \"maxItems\": 100\n}\n```\n\n## What is available and what is not\n\n- **Search** returns up to 200 apps per term. Apple does not paginate search results.\n- **RSS reviews** are capped at 10 pages, 50 reviews per page, so 500 reviews per app and country.\n- **Deep reviews** use Apple's same-origin App Store API at 20 reviews per request. Pagination stops when Apple's corpus ends (HTTP 404), when the per-app cap is reached, or when `maxItems` is reached.\n- **Developer responses** exist only on apps where the developer replied. They are not available for every review or every app.\n- **Written reviews are not the same as ratings.** `ratingCount` counts star ratings; the actor reports only the review rows it actually collected.\n- **Version, reviewer URL, and helpful votes** come from the RSS feed and therefore cover at most the first 500 reviews per app and country.\n- **In-app purchase catalogs, autocomplete, and Apple TV screenshots** are not exposed by the cookieless routes used here, so they are not emitted.\n- **Apple TV** apps are outside this actor's scope; it reads iPhone, iPad, and Mac listings.\n\n## Reliability\n\n- Requests to `apps.apple.com` are serialized and throttled. HTTP 429 and 5xx responses retry with exponential backoff and `Retry-After` support.\n- If a rich detail request fails, the app still ships with its iTunes metadata and the run reports a warning.\n- If every request is blocked or Apple is unavailable, the run fails with an explicit message instead of returning an empty dataset.\n- Duplicate apps are removed by App Store ID. Duplicate reviews are removed by review ID.\n- Partial runs keep the rows that succeeded and report how many warnings occurred.\n\n## FAQ\n\n**Do I need an Apple Developer account or API key?**\nNo. The actor reads Apple's public App Store listings, review feeds, and the same-origin web API used by the App Store website.\n\n**How do I find an app ID?**\nOpen the app in a browser. The number after `/id` is the App Store ID, for example `https://apps.apple.com/us/app/youtube/id544007664` gives `544007664`.\n\n**Can I pass bundle IDs?**\nYes. Put a bundle ID such as `com.google.ios.youtube` in `appIds`. Bundle IDs also work in `lookup` and `reviews` modes.\n\n**Why do some apps have fewer reviews than requested?**\nApple returns only the reviews that exist for that app in that storefront. The deep route can page far past the 500-review RSS limit for large apps, but a small app may have only a handful. RSS is capped at 500.\n\n**Why are developer replies missing?**\nApple exposes a reply only when the developer actually wrote one. Apps with no reply history return no `developerResponse` field.\n\n**Why is `version` missing from a deep review?**\nThe deep review API does not include the reviewed version. The actor fills it from RSS for the first 500 reviews; older reviews have no version.\n\n**Does the country change results?**\nYes. Country controls pricing and currency, app availability, chart contents, and the language of reviews.\n\n**Can I run several countries in one run?**\nOne country per run. Run the actor once per storefront and combine the datasets.\n\n**Is this affiliated with Apple?**\nNo. This is an independent third-party actor that reads publicly available App Store data. It is not affiliated with or endorsed by Apple Inc.\n\n## Use it as an API (server mode)\n\nNeed one answer right away instead of a batch job? Send the input as an HTTP request and the results come back in the response. There's no run to start and poll.\n\n```bash\ncurl -H \"Authorization: Bearer $APIFY_TOKEN\" \\\n  \"https://nimbryxo-studio--app-store-search-lookup-and-reviews-scraper.apify.actor/?mode=search&searchTerms=calculator&maxItems=3&includeDetails=false&includeDeveloperResponses=false\"\n```\n\nOr POST the same input as JSON:\n\n```bash\ncurl -X POST -H \"Authorization: Bearer $APIFY_TOKEN\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\": \"search\", \"searchTerms\": [\"calculator\"], \"maxItems\": 3, \"includeDetails\": false, \"includeDeveloperResponses\": false}' \\\n  \"https://nimbryxo-studio--app-store-search-lookup-and-reviews-scraper.apify.actor/\"\n```\n\n- The fields are the same as in the input above. With GET, repeat a parameter once for each value in a list.\n- You get back a JSON array with the same records a normal run saves. They're saved to the run's dataset too.\n- Each request is capped at 100 results and 4 minutes. For bigger jobs, start a normal run.\n- The request runs in your own Apify account at the Actor's normal price (a start fee plus a price per result). The server shuts down after a minute with no requests.\n- The Server tab on this page lists every parameter and lets you try a request from your browser.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "App Store Data",
          "description": "App records, chart rows, and customer reviews from the iOS App Store",
          "views": {
            "overview": {
              "title": "Apps & Charts",
              "description": "App and chart records with pricing, ratings, and storefront links",
              "transformation": {
                "fields": [
                  "id",
                  "name",
                  "developer",
                  "price",
                  "currency",
                  "rating",
                  "ratingCount",
                  "genres",
                  "version",
                  "chartPosition",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "id": {
                    "label": "App ID",
                    "format": "text"
                  },
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "developer": {
                    "label": "Developer",
                    "format": "text"
                  },
                  "price": {
                    "label": "Price",
                    "format": "number"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "ratingCount": {
                    "label": "Rating Count",
                    "format": "number"
                  },
                  "genres": {
                    "label": "Genres",
                    "format": "text"
                  },
                  "version": {
                    "label": "Version",
                    "format": "text"
                  },
                  "chartPosition": {
                    "label": "Chart Position",
                    "format": "number"
                  },
                  "url": {
                    "label": "App Store URL",
                    "format": "link"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed App Data",
              "description": "Every collected app field, including privacy labels and version history",
              "transformation": {
                "fields": [
                  "id",
                  "bundleId",
                  "name",
                  "subtitle",
                  "developer",
                  "developerId",
                  "developerUrl",
                  "developerWebsite",
                  "price",
                  "formattedPrice",
                  "currency",
                  "isFree",
                  "rating",
                  "ratingCount",
                  "currentVersionRating",
                  "currentVersionRatingCount",
                  "ratingHistogram",
                  "description",
                  "releaseNotes",
                  "version",
                  "releaseDate",
                  "lastUpdated",
                  "category",
                  "genres",
                  "contentRating",
                  "ageRating",
                  "minimumOs",
                  "requirements",
                  "fileSize",
                  "size",
                  "icon",
                  "screenshots",
                  "ipadScreenshots",
                  "languages",
                  "privacy",
                  "privacyPolicyUrl",
                  "supportUrl",
                  "versionHistory",
                  "chartPosition",
                  "chartType",
                  "country",
                  "language",
                  "url",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "id": {
                    "label": "App ID",
                    "format": "text"
                  },
                  "name": {
                    "label": "Name",
                    "format": "text"
                  },
                  "developer": {
                    "label": "Developer",
                    "format": "text"
                  },
                  "price": {
                    "label": "Price",
                    "format": "number"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "ratingCount": {
                    "label": "Rating Count",
                    "format": "number"
                  },
                  "version": {
                    "label": "Version",
                    "format": "text"
                  },
                  "minimumOs": {
                    "label": "Minimum OS",
                    "format": "text"
                  },
                  "url": {
                    "label": "App Store URL",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            },
            "reviews": {
              "title": "Reviews",
              "description": "Customer reviews with ratings, versions, and developer replies",
              "transformation": {
                "fields": [
                  "id",
                  "appId",
                  "appName",
                  "country",
                  "rating",
                  "title",
                  "text",
                  "author",
                  "authorUrl",
                  "date",
                  "version",
                  "voteCount",
                  "voteSum",
                  "developerResponse",
                  "sourceUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "id": {
                    "label": "Review ID",
                    "format": "text"
                  },
                  "appId": {
                    "label": "App ID",
                    "format": "text"
                  },
                  "rating": {
                    "label": "Rating",
                    "format": "number"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "author": {
                    "label": "Author",
                    "format": "text"
                  },
                  "date": {
                    "label": "Date",
                    "format": "text"
                  },
                  "version": {
                    "label": "Version",
                    "format": "text"
                  },
                  "developerResponse": {
                    "label": "Developer Response",
                    "format": "text"
                  },
                  "sourceUrl": {
                    "label": "Source",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      },
      "webServerSchema": {
        "openapi": "3.0.3",
        "info": {
          "title": "iOS App Store Deep Reviews & App Intelligence (server mode)",
          "version": "1.1",
          "description": "Send one lookup and get the results back in the response. It takes the same input as a normal run: query parameters with GET, or a JSON body with POST. At most 100 results and 240 seconds per request; start a normal run for bigger jobs. Requests run in your own Apify account at the Actor's normal price.",
          "x-oa-server-mode": "1.1"
        },
        "paths": {
          "/": {
            "get": {
              "operationId": "lookupGet",
              "summary": "Run one lookup (query parameters)",
              "parameters": [
                {
                  "name": "mode",
                  "in": "query",
                  "required": true,
                  "description": "What to collect. Search finds apps by keyword, Lookup resolves IDs/URLs, Reviews collects customer feedback, Developer lists a publisher's apps, and Charts reads a top list.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "search",
                      "lookup",
                      "reviews",
                      "developer",
                      "charts"
                    ],
                    "default": "search"
                  },
                  "example": "search"
                },
                {
                  "name": "searchTerms",
                  "in": "query",
                  "required": false,
                  "description": "Keywords to search for (mode=search). Each term returns up to 200 ranked apps, and results are de-duplicated across terms. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 3
                  },
                  "style": "form",
                  "explode": true,
                  "example": [
                    "calculator"
                  ]
                },
                {
                  "name": "appIds",
                  "in": "query",
                  "required": false,
                  "description": "Apps to look up or review (mode=lookup/reviews). Accepts numeric App Store IDs, bundle IDs, app URLs, and developer URLs. Separate multiple values with commas or new lines. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "maxItems": 10
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "startUrls",
                  "in": "query",
                  "required": false,
                  "description": "Paste App Store app or developer URLs (mode=lookup/reviews). App URLs resolve to one app; developer URLs expand to that publisher's catalog. (GET: repeat the parameter once per value.)",
                  "schema": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    },
                    "maxItems": 10
                  },
                  "style": "form",
                  "explode": true
                },
                {
                  "name": "developerId",
                  "in": "query",
                  "required": false,
                  "description": "Apple artist ID or developer page URL (mode=developer). For example 281956209 or https://apps.apple.com/us/developer/google/id281956209. Comma-separated values are accepted.",
                  "schema": {
                    "type": "string"
                  }
                },
                {
                  "name": "developerName",
                  "in": "query",
                  "required": false,
                  "description": "Publisher name to resolve when you do not know the developer ID (mode=developer). The actor searches App Store listings and matches the publisher name.",
                  "schema": {
                    "type": "string"
                  }
                },
                {
                  "name": "country",
                  "in": "query",
                  "required": false,
                  "description": "Two-letter App Store storefront. Changes pricing, availability, chart contents, and review language.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "us",
                      "gb",
                      "de",
                      "fr",
                      "jp",
                      "in",
                      "br",
                      "ca",
                      "au",
                      "cn",
                      "ru",
                      "tr",
                      "kr",
                      "mx",
                      "es",
                      "it",
                      "nl",
                      "se",
                      "pl",
                      "sa",
                      "za",
                      "ae",
                      "sg",
                      "hk",
                      "tw",
                      "th",
                      "id",
                      "my",
                      "ph",
                      "vn",
                      "eg",
                      "ng",
                      "ke",
                      "il",
                      "ch",
                      "at",
                      "be",
                      "dk",
                      "fi",
                      "no",
                      "pt",
                      "ie",
                      "nz",
                      "ar",
                      "cl",
                      "co",
                      "pe",
                      "ua",
                      "cz",
                      "ro",
                      "gr",
                      "hu",
                      "sk",
                      "bg",
                      "hr",
                      "lt",
                      "lv",
                      "ee",
                      "is",
                      "lu",
                      "mt",
                      "cy"
                    ],
                    "default": "us"
                  }
                },
                {
                  "name": "language",
                  "in": "query",
                  "required": false,
                  "description": "Language used for App Store metadata and reviews. Defaults to English (United States).",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "en-US",
                      "en-GB",
                      "de-DE",
                      "fr-FR",
                      "es-ES",
                      "it-IT",
                      "ja-JP",
                      "ko-KR",
                      "pt-BR",
                      "ru-RU",
                      "zh-CN",
                      "nl-NL",
                      "sv-SE",
                      "pl-PL",
                      "tr-TR",
                      "ar-SA"
                    ],
                    "default": "en-US"
                  }
                },
                {
                  "name": "maxItems",
                  "in": "query",
                  "required": false,
                  "description": "Hard cap on rows pushed per run (1-5000). Applies to apps, chart rows, and reviews combined. For very large review corpora, raise this and set maxReviewsPerApp.",
                  "schema": {
                    "type": "integer",
                    "default": 50,
                    "minimum": 1,
                    "maximum": 50
                  },
                  "example": 3
                },
                {
                  "name": "maxReviewsPerApp",
                  "in": "query",
                  "required": false,
                  "description": "Reviews to collect for each app (1-50000). The deep review route returns 20 per request; RSS enrichment is available for the first 500 reviews when version or helpful-vote data exists.",
                  "schema": {
                    "type": "integer",
                    "default": 100,
                    "minimum": 1,
                    "maximum": 100
                  }
                },
                {
                  "name": "reviewSort",
                  "in": "query",
                  "required": false,
                  "description": "Most recent first, or Apple's most-helpful ordering (mode=reviews).",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "recent",
                      "helpful"
                    ],
                    "default": "recent"
                  }
                },
                {
                  "name": "includeDeveloperResponses",
                  "in": "query",
                  "required": false,
                  "description": "Keep developer replies when Apple exposes them (mode=reviews). Replies are available only for apps where the developer actually responded.",
                  "schema": {
                    "type": "boolean",
                    "default": true
                  },
                  "example": false
                },
                {
                  "name": "includeDetails",
                  "in": "query",
                  "required": false,
                  "description": "Add App Store detail fields such as privacy labels, version history, rating histogram, support URL, and subtitle (app-producing modes). Disable it for the fastest, cheapest search runs.",
                  "schema": {
                    "type": "boolean",
                    "default": true
                  },
                  "example": false
                },
                {
                  "name": "chartType",
                  "in": "query",
                  "required": false,
                  "description": "Top chart to read (mode=charts). Mac charts use the App Store Mac catalog.",
                  "schema": {
                    "type": "string",
                    "enum": [
                      "top-free",
                      "top-paid",
                      "top-grossing",
                      "top-free-ipad",
                      "top-paid-ipad",
                      "top-free-mac"
                    ],
                    "default": "top-free"
                  }
                },
                {
                  "name": "proxyConfiguration",
                  "in": "query",
                  "required": false,
                  "description": "Optional. The actor works without a proxy. Add an Apify Proxy configuration only if your own network or a future Apple rate limit needs it. (GET: pass it as JSON.)",
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "object",
                        "default": {
                          "useApifyProxy": false
                        }
                      }
                    }
                  }
                }
              ],
              "responses": {
                "200": {
                  "description": "The results as a JSON array (at most 100). They are also saved to the run's dataset and billed per result, like a normal run.",
                  "headers": {
                    "X-Item-Count": {
                      "schema": {
                        "type": "integer"
                      },
                      "description": "Results returned."
                    },
                    "X-Status-Message": {
                      "schema": {
                        "type": "string"
                      },
                      "description": "The Actor's last status message, e.g. why nothing was found."
                    }
                  },
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/Item"
                        }
                      },
                      "example": [
                        {
                          "id": "1069511488",
                          "appId": "1069511488",
                          "bundleId": "com.apple.calculator",
                          "name": "Calculator",
                          "developer": "Apple Inc.",
                          "developerId": "284417353",
                          "developerUrl": "https://apps.apple.com/us/developer/apple/id284417353?mt=12&uo=4",
                          "developerWebsite": "https://www.apple.com/ipados/ipados-18",
                          "price": 0,
                          "isFree": true,
                          "formattedPrice": "Free",
                          "currency": "USD",
                          "rating": 3.06,
                          "ratingCount": 10002,
                          "currentVersionRating": 3.06,
                          "currentVersionRatingCount": 10002,
                          "description": "Calculator\n\nEasily type out math with the basic and scientific calculators for quick solutions. With the Math Notes calculator, solving expressions, creating...",
                          "releaseNotes": "Bug Fixes and Feature Enhancements",
                          "version": "2.7",
                          "releaseDate": "2016-05-10T18:17:10Z",
                          "lastUpdated": "2026-10-19T20:43:56Z",
                          "category": "Utilities",
                          "genres": [
                            "Utilities"
                          ],
                          "contentRating": "4+",
                          "minimumOs": "10.0",
                          "fileSize": "17395712",
                          "size": 17395712,
                          "icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/f4/35/37/f435379c-2c09-a52a-1bbc-326d8cd54853/calculatorCalistoga-0-0-1x_U007epad-0-1-0-85-220.png/512x...",
                          "screenshots": [
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f0/b9/70/f0b97005-c9b5-87dd-808c-80a9e5cdd78a/iOS_Calculator_App_Store_Screenshots_2026.001.jpeg/...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/ff/89/86/ff898691-ee97-c122-af5d-d8765270a927/iOS_Calculator_App_Store_Screenshots_2026.002.jpeg/...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/6b/3b/15/6b3b1511-b4b8-ac4c-db5e-79b5617f65cb/iOS_Calculator_App_Store_Screenshots_2026.003.jpeg/..."
                          ],
                          "ipadScreenshots": [
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/7e/05/ba/7e05ba5b-fc6d-373c-cc3c-1ff665268761/iPadOS_Calculator_App_Store_Screenshot_2026.001.jpe...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/c5/ac/e2/c5ace2af-1ab9-4222-d071-988a2e1614a5/iPadOS_Calculator_App_Store_Screenshot_2026.002.jpe...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/8a/c3/d1/8ac3d123-83c1-91c9-48bd-cd7c61c9e075/iPadOS_Calculator_App_Store_Screenshot_2026.004.jpe..."
                          ],
                          "languages": [
                            "AR",
                            "CA",
                            "HR"
                          ],
                          "url": "https://apps.apple.com/us/app/calculator/id1069511488?uo=4",
                          "sourceUrl": "https://apps.apple.com/us/app/calculator/id1069511488?uo=4",
                          "recordType": "app",
                          "searchTerm": "calculator",
                          "searchRank": 1,
                          "country": "us",
                          "language": "en-US",
                          "scrapedAt": "2026-11-10T15:32:56.676551+00:00"
                        }
                      ]
                    }
                  }
                },
                "400": {
                  "description": "Invalid, missing or unknown input fields. Nothing ran.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      },
                      "example": {
                        "error": "invalid_input",
                        "errorDescription": "mode: required"
                      }
                    }
                  }
                },
                "422": {
                  "description": "The Actor could not complete this request (for example, nothing matches). No results were delivered.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "500": {
                  "description": "Unexpected failure. Safe to retry.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "504": {
                  "description": "The request used up its 240 s budget. The results found so far are in partialItems.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Error"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "partialItems": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Item"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            },
            "post": {
              "operationId": "lookupPost",
              "summary": "Run one lookup (JSON body)",
              "requestBody": {
                "required": true,
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "object",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "enum": [
                            "search",
                            "lookup",
                            "reviews",
                            "developer",
                            "charts"
                          ],
                          "default": "search",
                          "description": "What to collect. Search finds apps by keyword, Lookup resolves IDs/URLs, Reviews collects customer feedback, Developer lists a publisher's apps, and Charts reads a top list."
                        },
                        "searchTerms": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 3,
                          "description": "Keywords to search for (mode=search). Each term returns up to 200 ranked apps, and results are de-duplicated across terms."
                        },
                        "appIds": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "maxItems": 10,
                          "description": "Apps to look up or review (mode=lookup/reviews). Accepts numeric App Store IDs, bundle IDs, app URLs, and developer URLs. Separate multiple values with commas or new lines."
                        },
                        "startUrls": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "url": {
                                "type": "string",
                                "format": "uri"
                              }
                            },
                            "required": [
                              "url"
                            ]
                          },
                          "maxItems": 10,
                          "description": "Paste App Store app or developer URLs (mode=lookup/reviews). App URLs resolve to one app; developer URLs expand to that publisher's catalog."
                        },
                        "developerId": {
                          "type": "string",
                          "description": "Apple artist ID or developer page URL (mode=developer). For example 281956209 or https://apps.apple.com/us/developer/google/id281956209. Comma-separated values are accepted."
                        },
                        "developerName": {
                          "type": "string",
                          "description": "Publisher name to resolve when you do not know the developer ID (mode=developer). The actor searches App Store listings and matches the publisher name."
                        },
                        "country": {
                          "type": "string",
                          "enum": [
                            "us",
                            "gb",
                            "de",
                            "fr",
                            "jp",
                            "in",
                            "br",
                            "ca",
                            "au",
                            "cn",
                            "ru",
                            "tr",
                            "kr",
                            "mx",
                            "es",
                            "it",
                            "nl",
                            "se",
                            "pl",
                            "sa",
                            "za",
                            "ae",
                            "sg",
                            "hk",
                            "tw",
                            "th",
                            "id",
                            "my",
                            "ph",
                            "vn",
                            "eg",
                            "ng",
                            "ke",
                            "il",
                            "ch",
                            "at",
                            "be",
                            "dk",
                            "fi",
                            "no",
                            "pt",
                            "ie",
                            "nz",
                            "ar",
                            "cl",
                            "co",
                            "pe",
                            "ua",
                            "cz",
                            "ro",
                            "gr",
                            "hu",
                            "sk",
                            "bg",
                            "hr",
                            "lt",
                            "lv",
                            "ee",
                            "is",
                            "lu",
                            "mt",
                            "cy"
                          ],
                          "default": "us",
                          "description": "Two-letter App Store storefront. Changes pricing, availability, chart contents, and review language."
                        },
                        "language": {
                          "type": "string",
                          "enum": [
                            "en-US",
                            "en-GB",
                            "de-DE",
                            "fr-FR",
                            "es-ES",
                            "it-IT",
                            "ja-JP",
                            "ko-KR",
                            "pt-BR",
                            "ru-RU",
                            "zh-CN",
                            "nl-NL",
                            "sv-SE",
                            "pl-PL",
                            "tr-TR",
                            "ar-SA"
                          ],
                          "default": "en-US",
                          "description": "Language used for App Store metadata and reviews. Defaults to English (United States)."
                        },
                        "maxItems": {
                          "type": "integer",
                          "default": 50,
                          "minimum": 1,
                          "maximum": 50,
                          "description": "Hard cap on rows pushed per run (1-5000). Applies to apps, chart rows, and reviews combined. For very large review corpora, raise this and set maxReviewsPerApp."
                        },
                        "maxReviewsPerApp": {
                          "type": "integer",
                          "default": 100,
                          "minimum": 1,
                          "maximum": 100,
                          "description": "Reviews to collect for each app (1-50000). The deep review route returns 20 per request; RSS enrichment is available for the first 500 reviews when version or helpful-vote data exists."
                        },
                        "reviewSort": {
                          "type": "string",
                          "enum": [
                            "recent",
                            "helpful"
                          ],
                          "default": "recent",
                          "description": "Most recent first, or Apple's most-helpful ordering (mode=reviews)."
                        },
                        "includeDeveloperResponses": {
                          "type": "boolean",
                          "default": true,
                          "description": "Keep developer replies when Apple exposes them (mode=reviews). Replies are available only for apps where the developer actually responded."
                        },
                        "includeDetails": {
                          "type": "boolean",
                          "default": true,
                          "description": "Add App Store detail fields such as privacy labels, version history, rating histogram, support URL, and subtitle (app-producing modes). Disable it for the fastest, cheapest search runs."
                        },
                        "chartType": {
                          "type": "string",
                          "enum": [
                            "top-free",
                            "top-paid",
                            "top-grossing",
                            "top-free-ipad",
                            "top-paid-ipad",
                            "top-free-mac"
                          ],
                          "default": "top-free",
                          "description": "Top chart to read (mode=charts). Mac charts use the App Store Mac catalog."
                        },
                        "proxyConfiguration": {
                          "type": "object",
                          "default": {
                            "useApifyProxy": false
                          },
                          "description": "Optional. The actor works without a proxy. Add an Apify Proxy configuration only if your own network or a future Apple rate limit needs it."
                        }
                      },
                      "additionalProperties": false,
                      "required": [
                        "mode"
                      ]
                    },
                    "example": {
                      "mode": "search",
                      "searchTerms": [
                        "calculator"
                      ],
                      "maxItems": 3,
                      "includeDetails": false,
                      "includeDeveloperResponses": false
                    }
                  }
                }
              },
              "responses": {
                "200": {
                  "description": "The results as a JSON array (at most 100). They are also saved to the run's dataset and billed per result, like a normal run.",
                  "headers": {
                    "X-Item-Count": {
                      "schema": {
                        "type": "integer"
                      },
                      "description": "Results returned."
                    },
                    "X-Status-Message": {
                      "schema": {
                        "type": "string"
                      },
                      "description": "The Actor's last status message, e.g. why nothing was found."
                    }
                  },
                  "content": {
                    "application/json": {
                      "schema": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/Item"
                        }
                      },
                      "example": [
                        {
                          "id": "1069511488",
                          "appId": "1069511488",
                          "bundleId": "com.apple.calculator",
                          "name": "Calculator",
                          "developer": "Apple Inc.",
                          "developerId": "284417353",
                          "developerUrl": "https://apps.apple.com/us/developer/apple/id284417353?mt=12&uo=4",
                          "developerWebsite": "https://www.apple.com/ipados/ipados-18",
                          "price": 0,
                          "isFree": true,
                          "formattedPrice": "Free",
                          "currency": "USD",
                          "rating": 3.06,
                          "ratingCount": 10002,
                          "currentVersionRating": 3.06,
                          "currentVersionRatingCount": 10002,
                          "description": "Calculator\n\nEasily type out math with the basic and scientific calculators for quick solutions. With the Math Notes calculator, solving expressions, creating...",
                          "releaseNotes": "Bug Fixes and Feature Enhancements",
                          "version": "2.7",
                          "releaseDate": "2016-05-10T18:17:10Z",
                          "lastUpdated": "2026-10-19T20:43:56Z",
                          "category": "Utilities",
                          "genres": [
                            "Utilities"
                          ],
                          "contentRating": "4+",
                          "minimumOs": "10.0",
                          "fileSize": "17395712",
                          "size": 17395712,
                          "icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/f4/35/37/f435379c-2c09-a52a-1bbc-326d8cd54853/calculatorCalistoga-0-0-1x_U007epad-0-1-0-85-220.png/512x...",
                          "screenshots": [
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f0/b9/70/f0b97005-c9b5-87dd-808c-80a9e5cdd78a/iOS_Calculator_App_Store_Screenshots_2026.001.jpeg/...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/ff/89/86/ff898691-ee97-c122-af5d-d8765270a927/iOS_Calculator_App_Store_Screenshots_2026.002.jpeg/...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/6b/3b/15/6b3b1511-b4b8-ac4c-db5e-79b5617f65cb/iOS_Calculator_App_Store_Screenshots_2026.003.jpeg/..."
                          ],
                          "ipadScreenshots": [
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/7e/05/ba/7e05ba5b-fc6d-373c-cc3c-1ff665268761/iPadOS_Calculator_App_Store_Screenshot_2026.001.jpe...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/c5/ac/e2/c5ace2af-1ab9-4222-d071-988a2e1614a5/iPadOS_Calculator_App_Store_Screenshot_2026.002.jpe...",
                            "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/8a/c3/d1/8ac3d123-83c1-91c9-48bd-cd7c61c9e075/iPadOS_Calculator_App_Store_Screenshot_2026.004.jpe..."
                          ],
                          "languages": [
                            "AR",
                            "CA",
                            "HR"
                          ],
                          "url": "https://apps.apple.com/us/app/calculator/id1069511488?uo=4",
                          "sourceUrl": "https://apps.apple.com/us/app/calculator/id1069511488?uo=4",
                          "recordType": "app",
                          "searchTerm": "calculator",
                          "searchRank": 1,
                          "country": "us",
                          "language": "en-US",
                          "scrapedAt": "2026-11-10T15:32:56.676551+00:00"
                        }
                      ]
                    }
                  }
                },
                "400": {
                  "description": "Invalid, missing or unknown input fields. Nothing ran.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      },
                      "example": {
                        "error": "invalid_input",
                        "errorDescription": "mode: required"
                      }
                    }
                  }
                },
                "422": {
                  "description": "The Actor could not complete this request (for example, nothing matches). No results were delivered.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "500": {
                  "description": "Unexpected failure. Safe to retry.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/Error"
                      }
                    }
                  }
                },
                "504": {
                  "description": "The request used up its 240 s budget. The results found so far are in partialItems.",
                  "content": {
                    "application/json": {
                      "schema": {
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/Error"
                          },
                          {
                            "type": "object",
                            "properties": {
                              "partialItems": {
                                "type": "array",
                                "items": {
                                  "$ref": "#/components/schemas/Item"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "components": {
          "schemas": {
            "Item": {
              "type": "object",
              "description": "One result, the same record a normal run saves to its dataset.",
              "properties": {
                "id": {
                  "type": "string"
                },
                "appId": {
                  "type": "string"
                },
                "bundleId": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "developer": {
                  "type": "string"
                },
                "developerId": {
                  "type": "string"
                },
                "developerUrl": {
                  "type": "string"
                },
                "developerWebsite": {
                  "type": "string"
                },
                "price": {
                  "type": "number"
                },
                "isFree": {
                  "type": "boolean"
                },
                "formattedPrice": {
                  "type": "string"
                },
                "currency": {
                  "type": "string"
                },
                "rating": {
                  "type": "number"
                },
                "ratingCount": {
                  "type": "integer"
                },
                "currentVersionRating": {
                  "type": "number"
                },
                "currentVersionRatingCount": {
                  "type": "integer"
                },
                "description": {
                  "type": "string"
                },
                "releaseNotes": {
                  "type": "string"
                },
                "version": {
                  "type": "string"
                },
                "releaseDate": {
                  "type": "string"
                },
                "lastUpdated": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "genres": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "contentRating": {
                  "type": "string"
                },
                "minimumOs": {
                  "type": "string"
                },
                "fileSize": {
                  "type": "string"
                },
                "size": {
                  "type": "integer"
                },
                "icon": {
                  "type": "string"
                },
                "screenshots": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "ipadScreenshots": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "languages": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "url": {
                  "type": "string"
                },
                "sourceUrl": {
                  "type": "string"
                },
                "recordType": {
                  "type": "string"
                },
                "searchTerm": {
                  "type": "string"
                },
                "searchRank": {
                  "type": "integer"
                },
                "country": {
                  "type": "string"
                },
                "language": {
                  "type": "string"
                },
                "scrapedAt": {
                  "type": "string"
                }
              },
              "example": {
                "id": "1069511488",
                "appId": "1069511488",
                "bundleId": "com.apple.calculator",
                "name": "Calculator",
                "developer": "Apple Inc.",
                "developerId": "284417353",
                "developerUrl": "https://apps.apple.com/us/developer/apple/id284417353?mt=12&uo=4",
                "developerWebsite": "https://www.apple.com/ipados/ipados-18",
                "price": 0,
                "isFree": true,
                "formattedPrice": "Free",
                "currency": "USD",
                "rating": 3.06,
                "ratingCount": 10002,
                "currentVersionRating": 3.06,
                "currentVersionRatingCount": 10002,
                "description": "Calculator\n\nEasily type out math with the basic and scientific calculators for quick solutions. With the Math Notes calculator, solving expressions, creating...",
                "releaseNotes": "Bug Fixes and Feature Enhancements",
                "version": "2.7",
                "releaseDate": "2016-05-10T18:17:10Z",
                "lastUpdated": "2026-10-19T20:43:56Z",
                "category": "Utilities",
                "genres": [
                  "Utilities"
                ],
                "contentRating": "4+",
                "minimumOs": "10.0",
                "fileSize": "17395712",
                "size": 17395712,
                "icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/f4/35/37/f435379c-2c09-a52a-1bbc-326d8cd54853/calculatorCalistoga-0-0-1x_U007epad-0-1-0-85-220.png/512x...",
                "screenshots": [
                  "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f0/b9/70/f0b97005-c9b5-87dd-808c-80a9e5cdd78a/iOS_Calculator_App_Store_Screenshots_2026.001.jpeg/...",
                  "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/ff/89/86/ff898691-ee97-c122-af5d-d8765270a927/iOS_Calculator_App_Store_Screenshots_2026.002.jpeg/...",
                  "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/6b/3b/15/6b3b1511-b4b8-ac4c-db5e-79b5617f65cb/iOS_Calculator_App_Store_Screenshots_2026.003.jpeg/..."
                ],
                "ipadScreenshots": [
                  "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/7e/05/ba/7e05ba5b-fc6d-373c-cc3c-1ff665268761/iPadOS_Calculator_App_Store_Screenshot_2026.001.jpe...",
                  "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/c5/ac/e2/c5ace2af-1ab9-4222-d071-988a2e1614a5/iPadOS_Calculator_App_Store_Screenshot_2026.002.jpe...",
                  "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/8a/c3/d1/8ac3d123-83c1-91c9-48bd-cd7c61c9e075/iPadOS_Calculator_App_Store_Screenshot_2026.004.jpe..."
                ],
                "languages": [
                  "AR",
                  "CA",
                  "HR"
                ],
                "url": "https://apps.apple.com/us/app/calculator/id1069511488?uo=4",
                "sourceUrl": "https://apps.apple.com/us/app/calculator/id1069511488?uo=4",
                "recordType": "app",
                "searchTerm": "calculator",
                "searchRank": 1,
                "country": "us",
                "language": "en-US",
                "scrapedAt": "2026-11-10T15:32:56.676551+00:00"
              }
            },
            "Error": {
              "type": "object",
              "required": [
                "error",
                "errorDescription"
              ],
              "properties": {
                "error": {
                  "type": "string",
                  "enum": [
                    "invalid_input",
                    "request_failed",
                    "internal_error",
                    "timeout",
                    "busy",
                    "not_found",
                    "method_not_allowed",
                    "payload_too_large"
                  ]
                },
                "errorDescription": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "2.0.3",
    "imageDigest": "5f5bc3a2e54c87acefba31c3aaa79c38cb044b0de9067c5ea84b31b4bbc81f50",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.0053211111111111115
    }
  }
}