{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Reviews Scraper | iOS & Mac",
    "description": "Collect iOS and Mac App Store reviews across countries. Export ratings, review text, dates and developer replies where available. Filter by date, deduplicate results and schedule product-feedback monitoring.",
    "version": "0.1",
    "x-build-id": "6dTDRBSXQimkEea2i"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/peerless_columbine~apple-app-store-reviews-scraper-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-peerless_columbine-apple-app-store-reviews-scraper-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/peerless_columbine~apple-app-store-reviews-scraper-api/runs": {
      "post": {
        "operationId": "runs-sync-peerless_columbine-apple-app-store-reviews-scraper-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/peerless_columbine~apple-app-store-reviews-scraper-api/run-sync": {
      "post": {
        "operationId": "run-sync-peerless_columbine-apple-app-store-reviews-scraper-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "appIds": {
            "title": "App Store IDs",
            "uniqueItems": true,
            "type": "array",
            "description": "Numeric Apple App Store IDs, without the id prefix.",
            "items": {
              "type": "string"
            }
          },
          "product_ids": {
            "title": "Product IDs compatibility alias",
            "uniqueItems": true,
            "type": "array",
            "description": "Compatibility alias for callers using product_ids.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "App Store URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Apple App Store application URLs. The app ID and storefront country are parsed automatically.",
            "items": {
              "type": "string"
            }
          },
          "app_name": {
            "title": "App name auto-resolve",
            "type": "string",
            "description": "Optional app name to resolve through Apple's public Search API when no exact ID is available."
          },
          "country": {
            "title": "Country",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "Select one of 175 Apple storefronts. us is only the default. Archive and Mac requests use the official Apple storefront ID for the selected country; actual reviews depend on app/source availability. Custom two-letter codes are accepted for RSS. A nonempty countries list overrides this field.",
            "default": "us"
          },
          "countries": {
            "title": "Countries",
            "uniqueItems": true,
            "type": "array",
            "description": "Select multiple storefronts in one run. Overrides country. All 175 listed storefronts have Apple source mappings; an app may have no reviews in a selected market. Custom codes remain accepted for RSS.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "us",
                "ae",
                "af",
                "ag",
                "ai",
                "al",
                "am",
                "ao",
                "ar",
                "at",
                "au",
                "az",
                "ba",
                "bb",
                "be",
                "bf",
                "bg",
                "bh",
                "bj",
                "bm",
                "bn",
                "bo",
                "br",
                "bs",
                "bt",
                "bw",
                "by",
                "bz",
                "ca",
                "cd",
                "cg",
                "ch",
                "ci",
                "cl",
                "cm",
                "cn",
                "co",
                "cr",
                "cv",
                "cy",
                "cz",
                "de",
                "dk",
                "dm",
                "do",
                "dz",
                "ec",
                "ee",
                "eg",
                "es",
                "fi",
                "fj",
                "fm",
                "fr",
                "ga",
                "gb",
                "gd",
                "ge",
                "gh",
                "gm",
                "gr",
                "gt",
                "gw",
                "gy",
                "hk",
                "hn",
                "hr",
                "hu",
                "id",
                "ie",
                "il",
                "in",
                "iq",
                "is",
                "it",
                "jm",
                "jo",
                "jp",
                "ke",
                "kg",
                "kh",
                "kn",
                "kr",
                "kw",
                "ky",
                "kz",
                "la",
                "lb",
                "lc",
                "lk",
                "lr",
                "lt",
                "lu",
                "lv",
                "ly",
                "ma",
                "md",
                "me",
                "mg",
                "mk",
                "ml",
                "mm",
                "mn",
                "mo",
                "mr",
                "ms",
                "mt",
                "mu",
                "mv",
                "mw",
                "mx",
                "my",
                "mz",
                "na",
                "ne",
                "ng",
                "ni",
                "nl",
                "no",
                "np",
                "nr",
                "nz",
                "om",
                "pa",
                "pe",
                "pg",
                "ph",
                "pk",
                "pl",
                "pt",
                "pw",
                "py",
                "qa",
                "ro",
                "rs",
                "ru",
                "rw",
                "sa",
                "sb",
                "sc",
                "se",
                "sg",
                "si",
                "sk",
                "sl",
                "sn",
                "sr",
                "st",
                "sv",
                "sz",
                "tc",
                "td",
                "th",
                "tj",
                "tm",
                "tn",
                "to",
                "tr",
                "tt",
                "tw",
                "tz",
                "ua",
                "ug",
                "uy",
                "uz",
                "vc",
                "ve",
                "vg",
                "vn",
                "vu",
                "xk",
                "ye",
                "za",
                "zm",
                "zw"
              ],
              "enumTitles": [
                "United States (us)",
                "UAE (ae)",
                "Afghanistan (af)",
                "Antigua and Barbuda (ag)",
                "Anguilla (ai)",
                "Albania (al)",
                "Armenia (am)",
                "Angola (ao)",
                "Argentina (ar)",
                "Austria (at)",
                "Australia (au)",
                "Azerbaijan (az)",
                "Bosnia and Herzegovina (ba)",
                "Barbados (bb)",
                "Belgium (be)",
                "Burkina Faso (bf)",
                "Bulgaria (bg)",
                "Bahrain (bh)",
                "Benin (bj)",
                "Bermuda (bm)",
                "Brunei Darussalam (bn)",
                "Bolivia (bo)",
                "Brazil (br)",
                "Bahamas (bs)",
                "Bhutan (bt)",
                "Botswana (bw)",
                "Belarus (by)",
                "Belize (bz)",
                "Canada (ca)",
                "Democratic Republic of the Congo (cd)",
                "Republic of the Congo (cg)",
                "Switzerland (ch)",
                "Côte d’Ivoire (ci)",
                "Chile (cl)",
                "Cameroon (cm)",
                "China mainland (cn)",
                "Colombia (co)",
                "Costa Rica (cr)",
                "Cape Verde (cv)",
                "Cyprus (cy)",
                "Czech Republic (cz)",
                "Germany (de)",
                "Denmark (dk)",
                "Dominica (dm)",
                "Dominican Republic (do)",
                "Algeria (dz)",
                "Ecuador (ec)",
                "Estonia (ee)",
                "Egypt (eg)",
                "Spain (es)",
                "Finland (fi)",
                "Fiji (fj)",
                "Micronesia, Federated States of (fm)",
                "France (fr)",
                "Gabon (ga)",
                "United Kingdom (gb)",
                "Grenada (gd)",
                "Georgia (ge)",
                "Ghana (gh)",
                "Gambia (gm)",
                "Greece (gr)",
                "Guatemala (gt)",
                "Guinea-Bissau (gw)",
                "Guyana (gy)",
                "Hong Kong (hk)",
                "Honduras (hn)",
                "Croatia (hr)",
                "Hungary (hu)",
                "Indonesia (id)",
                "Ireland (ie)",
                "Israel (il)",
                "India (in)",
                "Iraq (iq)",
                "Iceland (is)",
                "Italy (it)",
                "Jamaica (jm)",
                "Jordan (jo)",
                "Japan (jp)",
                "Kenya (ke)",
                "Kyrgyzstan (kg)",
                "Cambodia (kh)",
                "St. Kitts and Nevis (kn)",
                "Korea, Republic of (kr)",
                "Kuwait (kw)",
                "Cayman Islands (ky)",
                "Kazakhstan (kz)",
                "Lao People’s Democratic Republic (la)",
                "Lebanon (lb)",
                "St. Lucia (lc)",
                "Sri Lanka (lk)",
                "Liberia (lr)",
                "Lithuania (lt)",
                "Luxembourg (lu)",
                "Latvia (lv)",
                "Libya (ly)",
                "Morocco (ma)",
                "Moldova (md)",
                "Montenegro (me)",
                "Madagascar (mg)",
                "North Macedonia (mk)",
                "Mali (ml)",
                "Myanmar (mm)",
                "Mongolia (mn)",
                "Macao (mo)",
                "Mauritania (mr)",
                "Montserrat (ms)",
                "Malta (mt)",
                "Mauritius (mu)",
                "Maldives (mv)",
                "Malawi (mw)",
                "Mexico (mx)",
                "Malaysia (my)",
                "Mozambique (mz)",
                "Namibia (na)",
                "Niger (ne)",
                "Nigeria (ng)",
                "Nicaragua (ni)",
                "Netherlands (nl)",
                "Norway (no)",
                "Nepal (np)",
                "Nauru (nr)",
                "New Zealand (nz)",
                "Oman (om)",
                "Panama (pa)",
                "Peru (pe)",
                "Papua New Guinea (pg)",
                "Philippines (ph)",
                "Pakistan (pk)",
                "Poland (pl)",
                "Portugal (pt)",
                "Palau (pw)",
                "Paraguay (py)",
                "Qatar (qa)",
                "Romania (ro)",
                "Serbia (rs)",
                "Russia (ru)",
                "Rwanda (rw)",
                "Saudi Arabia (sa)",
                "Solomon Islands (sb)",
                "Seychelles (sc)",
                "Sweden (se)",
                "Singapore (sg)",
                "Slovenia (si)",
                "Slovakia (sk)",
                "Sierra Leone (sl)",
                "Senegal (sn)",
                "Suriname (sr)",
                "São Tomé and Príncipe (st)",
                "El Salvador (sv)",
                "Eswatini (sz)",
                "Turks and Caicos (tc)",
                "Chad (td)",
                "Thailand (th)",
                "Tajikistan (tj)",
                "Turkmenistan (tm)",
                "Tunisia (tn)",
                "Tonga (to)",
                "Türkiye (tr)",
                "Trinidad and Tobago (tt)",
                "Taiwan (tw)",
                "Tanzania (tz)",
                "Ukraine (ua)",
                "Uganda (ug)",
                "Uruguay (uy)",
                "Uzbekistan (uz)",
                "St. Vincent and The Grenadines (vc)",
                "Venezuela (ve)",
                "British Virgin Islands (vg)",
                "Vietnam (vn)",
                "Vanuatu (vu)",
                "Kosovo (xk)",
                "Yemen (ye)",
                "South Africa (za)",
                "Zambia (zm)",
                "Zimbabwe (zw)"
              ]
            }
          },
          "start_page": {
            "title": "Start page",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Page index/count. RSS ceiling 10; archive ceiling 2000, 25 reviews per page.",
            "default": 1
          },
          "since": {
            "title": "Only reviews since",
            "type": "string",
            "description": "Optional ISO date or timestamp. Useful for scheduled incremental monitoring."
          },
          "deduplicateReviews": {
            "title": "Deduplicate reviews",
            "type": "boolean",
            "description": "Deduplicate by app ID, country and Apple review ID.",
            "default": true
          },
          "requestDelayMillis": {
            "title": "Request spacing",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Spacing between pages inside one app/country task. Defaults to 500 ms to reduce bursts on long archive scans; set 0 explicitly to disable.",
            "default": 500
          },
          "sourceMode": {
            "title": "Review source",
            "enum": [
              "auto",
              "rss",
              "archive"
            ],
            "type": "string",
            "description": "RSS uses 50-row pages; iOS archive uses 25-row pages; Mac HTML uses native 10-row pages. Product IDs support automatic platform detection.",
            "default": "auto"
          },
          "platform": {
            "title": "Platform",
            "enum": [
              "auto",
              "ios",
              "mac"
            ],
            "type": "string",
            "description": "Automatically identify each product, or explicitly select iOS / Mac. Explicit selection takes precedence over detection.",
            "default": "auto"
          },
          "includeSourceMetadata": {
            "title": "Include archive source totals",
            "type": "boolean",
            "description": "For archive mode, make one extra metadata lookup per app/storefront for written-review and rating totals. Counts are unfiltered; derived page count is not an accessibility guarantee.",
            "default": true
          },
          "includeReviewVersions": {
            "title": "Include historical review versions",
            "type": "boolean",
            "description": "For archive pages, join public XML version metadata by review ID and matching text. Adds one public request per page; failures retain the review and an explicit warning.",
            "default": true
          },
          "include_macos": {
            "title": "Include macOS apps",
            "type": "boolean",
            "description": "Detect app platform and skip Mac apps when false. Explicit platform remains authoritative.",
            "default": true
          },
          "parse_helpfulness": {
            "title": "Parse helpfulness counts",
            "type": "boolean",
            "description": "Include helpful_count and total_helpful_count when present in the public source.",
            "default": true
          },
          "output_file": {
            "title": "Local output filename",
            "type": "string",
            "description": "Local testing only: save a delivered-result JSON copy under storage/local_exports. Use a simple .json filename. Existing files are never overwritten. Ignored completely on Apify cloud; auto-generated locally if blank."
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "mostrecent",
              "mosthelpful",
              "mostfavorable",
              "mostcritical"
            ],
            "type": "string",
            "description": "Source-native Apple review sort. mostrecent and mosthelpful are verified public-feed modes.",
            "default": "mostrecent"
          },
          "ratings": {
            "title": "Ratings filter",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional star ratings to keep after source retrieval, for example [\"1\",\"2\"] for negative reviews.",
            "items": {
              "type": "string"
            }
          },
          "sort_order": {
            "title": "Archive sort alias",
            "enum": [
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "1 helpful, 2 favorable, 3 critical, 4 recent."
          },
          "normalize_dates": {
            "title": "Include normalized dates",
            "type": "boolean",
            "description": "Include review_date_iso in johnvc-compatible output.",
            "default": true
          },
          "maxItems": {
            "title": "Maximum output reviews",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Optional global cap across all app/country combinations. Leave blank to derive the total budget from the per-app/storefront quota and task count for compatibility inputs (product_ids, app_name or max_reviews); native inputs default to 1000 at runtime. An explicitly supplied value takes precedence over the automatic budget."
          },
          "maxReviewsPerAppCountry": {
            "title": "Max reviews per app and country",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Per app/country cap. RSS source ceiling is 500; archive ceiling is 50000."
          },
          "maxPages": {
            "title": "Maximum pages per app/country",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Maximum native pages per app and country. Omit to derive the Mac/automatic budget from the requested review count; explicit limits take precedence."
          },
          "maxRequestRetries": {
            "title": "Request retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for transient Apple HTTP failures.",
            "default": 2
          },
          "max_reviews": {
            "title": "Maximum reviews per app and country compatibility",
            "minimum": 0,
            "type": "integer",
            "description": "Alias per app/country cap; zero uses selected source ceiling. maxItems remains the global cap."
          },
          "customMapFunction": {
            "title": "Legacy custom map function",
            "type": "string",
            "description": "JavaScript function applied after output formatting to each review. Must return one JSON object. Isolated runtime with no network, file system or Python access; 50ms CPU and 16MB per row, 10s total. Not a filter."
          },
          "outputSchema": {
            "title": "Output format",
            "enum": [
              "extended",
              "wolves",
              "johnvc"
            ],
            "type": "string",
            "description": "Explicit migration format. Missing source values stay null; extended preserves diagnostics.",
            "default": "extended"
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum app/country combinations fetched concurrently.",
            "default": 8
          },
          "wolvesInput": {
            "title": "Import thewolves input",
            "type": "object",
            "description": "Paste the complete competitor input JSON here to preserve its field types and defaults. Put all options inside this object. This is optional; normal native inputs remain available."
          },
          "johnvcInput": {
            "title": "Import johnvc input",
            "type": "object",
            "description": "Paste the complete competitor input JSON here to preserve its field types and defaults. Put all options inside this object. This is optional; normal native inputs remain available."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}