{
  "title": "Amazon Reviews Scraper Input",
  "description": "Collect Amazon customer reviews and rating summaries with no login and no proxy setup. The actor reads the product page's inline review block (~8-13 top reviews, retried across desktop and mobile because the wall is probabilistic) and, when `extendedHistory` is on, merges Amazon's public extended review feed for the same ASIN (typically 100-850+ unique US reviews). `mergeMarketplaces` adds the product page from other Amazon marketplaces and unions the deduplicated reviews.",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "productUrls": {
      "title": "Product URLs",
      "type": "array",
      "description": "List of Amazon product URLs to scrape reviews from. Supports /dp/, /gp/product/, /gp/aw/d/ and /product/ URL formats across 19+ Amazon domains. A bare 10-character ASIN (e.g. \"B09X7MPX8L\", no URL) is also accepted -- it is expanded into a full URL using the `country` domain below. Leave empty and use `keywords`/`categoryUrls` instead to discover products automatically.",
      "editor": "stringList",
      "prefill": [
        "https://www.amazon.com/dp/B09X7MPX8L"
      ],
      "items": {
        "type": "string"
      },
      "sectionCaption": "Inputs",
      "sectionDescription": "Product URLs whose reviews should be scraped. Any of the supported Amazon country domains is accepted."
    },
    "keywords": {
      "title": "Keywords (auto-discover products)",
      "type": "array",
      "description": "Search keywords used to auto-discover products when `productUrls` is empty (e.g. \"wireless earbuds\"). Fetches Amazon's public `/s?k=` search results page for each keyword and reviews up to `maxProductsToDiscover` resulting products.",
      "editor": "stringList",
      "prefill": [],
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "categoryUrls": {
      "title": "Category / Search URLs (auto-discover products)",
      "type": "array",
      "description": "Advanced mode: supply your own Amazon `/s?...` or `/b?node=...` category/search URL(s) directly (used only when `productUrls` is empty). Products are discovered the same way as `keywords`.",
      "editor": "stringList",
      "prefill": [],
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "maxProductsToDiscover": {
      "title": "Max Products to Discover",
      "type": "integer",
      "description": "Maximum number of products to discover per run from `keywords`/`categoryUrls`. Ignored when `productUrls` is supplied directly.",
      "editor": "number",
      "default": 10,
      "prefill": 10,
      "minimum": 1,
      "maximum": 50
    },
    "extendedHistory": {
      "title": "Extended Review History",
      "type": "boolean",
      "description": "Merge Amazon's public extended review feed for each ASIN (no login, no cookie): up to 100 reviews per star/sort bucket, and walking every bucket yields 100-850+ unique reviews for popular US products, deduplicated against the product-page sample. Coverage varies by ASIN (some products expose few or no rows) and the feed carries Amazon.com reviews only; when off, only the ~8-13 product-page top reviews are returned.",
      "default": true,
      "prefill": true
    },
    "mergeMarketplaces": {
      "title": "Merge Extra Marketplaces",
      "type": "array",
      "description": "Additional Amazon marketplaces whose product page is fetched for the same ASIN and whose reviews are merged (deduplicated by review ID and content). Each marketplace typically adds a handful of locally-written reviews. Empty = only the product's own marketplace.",
      "editor": "select",
      "prefill": [],
      "default": [],
      "items": {
        "type": "string",
        "enum": [
          "amazon.com",
          "amazon.co.uk",
          "amazon.de",
          "amazon.fr",
          "amazon.it",
          "amazon.es",
          "amazon.ca",
          "amazon.com.au",
          "amazon.co.jp",
          "amazon.in",
          "amazon.com.br",
          "amazon.com.mx",
          "amazon.nl",
          "amazon.sg",
          "amazon.ae",
          "amazon.sa",
          "amazon.pl",
          "amazon.se",
          "amazon.com.tr"
        ],
        "enumTitles": [
          "United States (amazon.com)",
          "United Kingdom (amazon.co.uk)",
          "Germany (amazon.de)",
          "France (amazon.fr)",
          "Italy (amazon.it)",
          "Spain (amazon.es)",
          "Canada (amazon.ca)",
          "Australia (amazon.com.au)",
          "Japan (amazon.co.jp)",
          "India (amazon.in)",
          "Brazil (amazon.com.br)",
          "Mexico (amazon.com.mx)",
          "Netherlands (amazon.nl)",
          "Singapore (amazon.sg)",
          "UAE (amazon.ae)",
          "Saudi Arabia (amazon.sa)",
          "Poland (amazon.pl)",
          "Sweden (amazon.se)",
          "Turkey (amazon.com.tr)"
        ]
      }
    },
    "includeAggregates": {
      "title": "Include Review Aggregates",
      "type": "boolean",
      "description": "Emit one additional `amazon_review_aggregate` record per product with the product title, average rating, global ratings count, star histogram (plus derived per-star counts), and \"Customers say\" AI summary with aspects -- parsed from the same page HTML already fetched. These widgets render server-side even when individual review cards are gated, so this record is available more reliably than the reviews themselves.",
      "default": true,
      "prefill": true
    },
    "country": {
      "title": "Amazon Domain",
      "type": "string",
      "description": "Amazon country domain to scrape from. URLs from a different domain are honored automatically.",
      "editor": "select",
      "default": "amazon.com",
      "prefill": "amazon.com",
      "enum": [
        "amazon.com",
        "amazon.co.uk",
        "amazon.de",
        "amazon.fr",
        "amazon.it",
        "amazon.es",
        "amazon.ca",
        "amazon.com.au",
        "amazon.co.jp",
        "amazon.in",
        "amazon.com.br",
        "amazon.com.mx",
        "amazon.nl",
        "amazon.sg",
        "amazon.ae",
        "amazon.sa",
        "amazon.pl",
        "amazon.se",
        "amazon.com.tr"
      ],
      "enumTitles": [
        "United States (amazon.com)",
        "United Kingdom (amazon.co.uk)",
        "Germany (amazon.de)",
        "France (amazon.fr)",
        "Italy (amazon.it)",
        "Spain (amazon.es)",
        "Canada (amazon.ca)",
        "Australia (amazon.com.au)",
        "Japan (amazon.co.jp)",
        "India (amazon.in)",
        "Brazil (amazon.com.br)",
        "Mexico (amazon.com.mx)",
        "Netherlands (amazon.nl)",
        "Singapore (amazon.sg)",
        "UAE (amazon.ae)",
        "Saudi Arabia (amazon.sa)",
        "Poland (amazon.pl)",
        "Sweden (amazon.se)",
        "Turkey (amazon.com.tr)"
      ]
    },
    "maxReviews": {
      "title": "Max Reviews per Product",
      "type": "integer",
      "description": "Hard cap on the number of reviews returned per product AFTER merging and deduplication (1-2000). The product-page sample alone yields ~8-13; the extended review feed can add 100-850+ for popular US products.",
      "editor": "number",
      "default": 100,
      "prefill": 15,
      "minimum": 1,
      "maximum": 2000,
      "sectionCaption": "Filters & Sorting",
      "sectionDescription": "Limit and shape the merged review set returned per product. All filters below are applied after merging and deduplication."
    },
    "sortBy": {
      "title": "Sort Reviews By",
      "type": "string",
      "description": "How to sort the returned reviews: most helpful first, or most recent first.",
      "editor": "select",
      "default": "helpful",
      "prefill": "helpful",
      "enum": [
        "helpful",
        "recent"
      ],
      "enumTitles": [
        "Most Helpful",
        "Most Recent"
      ]
    },
    "filterByStar": {
      "title": "Filter by Star Rating",
      "type": "string",
      "description": "Keep only reviews with this rating. `positive` keeps 4-5 star reviews; `critical` keeps 1-2 star reviews. Applied to the merged set, so narrow filters can legitimately return few or no rows.",
      "editor": "select",
      "default": "",
      "enum": [
        "",
        "1",
        "2",
        "3",
        "4",
        "5",
        "positive",
        "critical"
      ],
      "enumTitles": [
        "All Stars",
        "1 Star",
        "2 Stars",
        "3 Stars",
        "4 Stars",
        "5 Stars",
        "Positive (4-5 stars)",
        "Critical (1-2 stars)"
      ]
    },
    "verifiedPurchasesOnly": {
      "title": "Verified Purchases Only",
      "type": "boolean",
      "description": "Keep only reviews carrying Amazon's Verified Purchase badge. Applied server-side for the extended feed and client-side for product-page rows.",
      "default": false,
      "prefill": false
    },
    "filterKeywords": {
      "title": "Filter by Keywords",
      "type": "array",
      "description": "Keep only reviews whose title or text contains at least one of these keywords (case-insensitive). Empty = no keyword filter.",
      "editor": "stringList",
      "prefill": [],
      "default": [],
      "items": {
        "type": "string"
      }
    },
    "reviewsNewerThan": {
      "title": "Reviews Newer Than",
      "type": "string",
      "description": "Keep only reviews dated on or after this date (e.g. 2026-01-15 or any ISO date). Reviews whose localized date cannot be parsed are kept. Empty = no date filter.",
      "editor": "datepicker",
      "prefill": ""
    },
    "mediaReviewsOnly": {
      "title": "Media Reviews Only",
      "type": "boolean",
      "description": "Keep only reviews that include at least one reviewer-uploaded image or video.",
      "default": false,
      "prefill": false
    },
    "includeImages": {
      "title": "Include Review Images",
      "type": "boolean",
      "description": "Extract images and videos uploaded by reviewers (full-resolution URLs).",
      "default": true,
      "prefill": true,
      "sectionCaption": "Output Options",
      "sectionDescription": "Toggle which fields are emitted. GDPR-sensitive fields are off by default."
    },
    "includeGdprSensitive": {
      "title": "Include GDPR Sensitive Data",
      "type": "boolean",
      "description": "Include reviewer names, profile links, and avatars. Set to false for GDPR compliance.",
      "default": false,
      "prefill": false
    }
  }
}
