{
  "openapi": "3.0.1",
  "info": {
    "title": "Amazon Product Scraper ($0.5/1K) — URLs, Search & Details",
    "description": "$0.50/1K. Paste Amazon category or product URLs (or a keyword / ASIN) — numeric prices, Choice / Best Seller flags, Prime, ratings across 21 markets. A /dp/ link opens that product page (BSR, buy box, variants, estimated sales). Search enrich is optional. Monitor POSTs Slack/Zapier alerts.",
    "version": "0.0",
    "x-build-id": "L82AhxLF2mTAEYmzC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~amazon-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-amazon-search",
        "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/memo23~amazon-search/runs": {
      "post": {
        "operationId": "runs-sync-memo23-amazon-search",
        "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/memo23~amazon-search/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-amazon-search",
        "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": {
          "startUrls": {
            "title": "Amazon category or product URLs",
            "type": "array",
            "description": "Paste a category / search URL (amazon.com/s?k=…) or a product URL (amazon.com/dp/ASIN). Best-seller lists and /b?node= category pages work too. A /dp/ link fetches that product page. The domain picks the marketplace.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "queries": {
            "title": "Or type keywords / ASINs",
            "type": "array",
            "description": "Keywords run a paginated search on every selected marketplace. A bare ASIN (e.g. \"B082Z1YYRK\") opens that product page — same as pasting /dp/ASIN above.",
            "items": {
              "type": "string"
            }
          },
          "marketplaces": {
            "title": "🌍 Marketplaces",
            "type": "array",
            "description": "Which Amazon marketplaces the keyword / ASIN queries run on. Prices come back in the marketplace currency with the ISO code attached. Start URLs ignore this and use the domain in the URL.",
            "items": {
              "type": "string",
              "enum": [
                "com",
                "co.uk",
                "de",
                "fr",
                "it",
                "es",
                "ca",
                "com.au",
                "co.jp",
                "in",
                "nl",
                "se",
                "pl",
                "com.be",
                "ae",
                "com.mx",
                "com.tr",
                "sg",
                "com.br",
                "sa",
                "eg"
              ],
              "enumTitles": [
                "amazon.com (US)",
                "amazon.co.uk (UK)",
                "amazon.de (Germany)",
                "amazon.fr (France)",
                "amazon.it (Italy)",
                "amazon.es (Spain)",
                "amazon.ca (Canada)",
                "amazon.com.au (Australia)",
                "amazon.co.jp (Japan)",
                "amazon.in (India)",
                "amazon.nl (Netherlands)",
                "amazon.se (Sweden)",
                "amazon.pl (Poland)",
                "amazon.com.be (Belgium)",
                "amazon.ae (UAE)",
                "amazon.com.mx (Mexico)",
                "amazon.com.tr (Turkey)",
                "amazon.sg (Singapore)",
                "amazon.com.br (Brazil)",
                "amazon.sa (Saudi Arabia)",
                "amazon.eg (Egypt)"
              ]
            },
            "default": [
              "com"
            ]
          },
          "sortBy": {
            "title": "↕️ Sort results by",
            "enum": [
              "relevance",
              "price-asc",
              "price-desc",
              "rating",
              "newest",
              "bestSellers"
            ],
            "type": "string",
            "description": "Result ordering for keyword queries (start URLs keep whatever sort their URL carries).",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lower price bound in the marketplace currency (applies to keyword queries)."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Upper price bound in the marketplace currency (applies to keyword queries)."
          },
          "primeOnly": {
            "title": "Prime only",
            "type": "boolean",
            "description": "Keep only listings Amazon marks as Prime. Applied after the page is parsed (Amazon no longer exposes a stable anonymous Prime URL filter — using the old one returns zero results).",
            "default": false
          },
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Restrict keyword searches to one brand (e.g. \"Anker\", \"Samsung\"). Uses Amazon's brand facet — works across marketplaces. Leave empty for any brand."
          },
          "fourStarsAndUp": {
            "title": "4 stars & up",
            "type": "boolean",
            "description": "Restrict keyword searches to products rated 4 stars and above. Supported on .com, .co.uk, .de, .fr, .it, .es, .ca; omitted (not guessed) on other marketplaces.",
            "default": false
          },
          "deals": {
            "title": "Deals",
            "enum": [
              "off",
              "all-discounts",
              "todays-deals"
            ],
            "type": "string",
            "description": "Restrict keyword searches to deal listings. All discounts / Today's Deals are currently encoded for amazon.com (other marketplaces skip this filter rather than apply a wrong id).",
            "default": "off"
          },
          "includeSponsored": {
            "title": "Include sponsored results",
            "type": "boolean",
            "description": "When false, sponsored cards are dropped after positions are assigned — page / positionOverall still match what a shopper sees.",
            "default": true
          },
          "enrichDetails": {
            "title": "Enrich from product page",
            "type": "boolean",
            "description": "For search / category crawls, fetch each kept product's /dp/ page (BSR, variants, buy box, sales estimate). Product URLs and bare ASINs already open the product page — you do not need this for those. Extra product-details event per enriched row ($1/1K from 29 Sep 2026).",
            "default": false
          },
          "maxOffers": {
            "title": "Maximum scraped offers",
            "minimum": 0,
            "type": "integer",
            "description": "How many marketplace offers to attach on each product (price, seller, ships-from, condition, FBA). 0 skips the offer list. Charged as an offer event once that price is live.",
            "default": 0
          },
          "maxProductVariantsAsSeparateResults": {
            "title": "Maximum product variants as separate results",
            "minimum": 0,
            "type": "integer",
            "description": "Fetch other colour/size ASINs and emit each as its own row (parentAsin set). 0 keeps variants only on the parent. Each extra row is a normal product result.",
            "default": 0
          },
          "scrapeProductVariantPrices": {
            "title": "Scrape product variant prices",
            "type": "boolean",
            "description": "Fetch each variant's /dp/ page and write price / priceValue onto the parent's variants[] list. Extra fetches — leave off unless you need those prices.",
            "default": false
          },
          "countryCode": {
            "title": "Delivery country code",
            "type": "string",
            "description": "ISO country for Amazon's delivery location (e.g. US, DE, GB). Combined with zip code. Prices and availability follow this address when Amazon honours it."
          },
          "zipCode": {
            "title": "Delivery zip / postal code",
            "type": "string",
            "description": "Postal code for Amazon's delivery location (e.g. 10001). Uses Amazon glow address-change plus an sp-cdn cookie. Delivery-location billing starts when that event is priced."
          },
          "locationDeliverableRoutes": {
            "title": "Apply delivery location on",
            "type": "array",
            "description": "Which page types get the zip/country. Default is product pages, search, and offers.",
            "items": {
              "type": "string",
              "enum": [
                "PRODUCT",
                "SEARCH",
                "OFFERS"
              ],
              "enumTitles": [
                "Product detail",
                "Search / category",
                "Offers"
              ]
            },
            "default": [
              "PRODUCT",
              "SEARCH",
              "OFFERS"
            ]
          },
          "maxSearchPagesPerStartUrl": {
            "title": "Maximum search pages (per start URL)",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Stop after this many listing pages per URL. Also stops at max products per query. Best-seller lists still cap at 2."
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "ja",
              "nl",
              "pl",
              "pt",
              "sv",
              "tr",
              "ar"
            ],
            "type": "string",
            "description": "Accept-Language hint (en, de, fr, es, it, ja, nl, pl, pt, sv, tr, ar). If the marketplace does not speak it, Amazon falls back to the domain default."
          },
          "proxyCountry": {
            "title": "Proxy country",
            "type": "string",
            "description": "Override the residential exit country (ISO2, e.g. us, de, gb). Leave empty to pin the exit to the Amazon domain (recommended)."
          },
          "maxItems": {
            "title": "Max products (whole run)",
            "minimum": 1,
            "type": "integer",
            "description": "Hard ceiling of product rows across the whole run. Also capped by your plan and charge limit."
          },
          "maxItemsPerQuery": {
            "title": "Max products per query / URL",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound of product rows per search query or start URL. One search page yields ~20–48 products.",
            "default": 200
          },
          "monitorMode": {
            "title": "📡 Monitor mode",
            "enum": [
              "off",
              "price-changes",
              "all-changes"
            ],
            "type": "string",
            "description": "Schedule the same input to receive only what changed. \"Price changes\" emits new products and price moves; \"All changes\" also emits rating and review-count moves. The first run builds the baseline and returns all products. Runs that find no changes publish no billable rows.",
            "default": "off"
          },
          "monitorName": {
            "title": "📡 Monitor name",
            "type": "string",
            "description": "Stable name for the monitoring baseline — use the same name (with the same queries/marketplaces) on every scheduled run of the same watch. Example: \"competitor-asins-us\"."
          },
          "webhookUrl": {
            "title": "🔔 Change webhook URL (optional)",
            "pattern": "^https?://.+",
            "type": "string",
            "description": "HTTPS endpoint that receives a JSON POST with the changed rows whenever a monitor run finds changes (never on the first baseline run). Works with Slack incoming webhooks, Zapier/Make catch hooks, or your own backend. Payload: { event: \"amazon-products.changes\", monitorName, totalChanges, countsByChangeType, rows }. Example: \"https://hooks.zapier.com/hooks/catch/123/abc\"."
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many listing pages to fetch in parallel (1–20). The default is safe for any memory size.",
            "default": 6
          },
          "proxy": {
            "title": "Proxy (optional override)",
            "type": "object",
            "description": "Leave unset for the built-in residential setup (recommended — Amazon blocks datacenter IPs). Set only to route traffic through your own Apify proxy groups instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}