{
  "openapi": "3.0.1",
  "info": {
    "title": "Amazon Product Scraper: Search, Details, Best Sellers & Prices",
    "description": "Amazon search results, product details and Best Sellers from 11 marketplaces (US, UK, DE, FR, IT, ES, CA, IN, JP, AU, MX) in one schema: price, list price, rating, BSR, seller, stock, images, variations. Local delivery address and currency. $1 per 1,000 results, $2 per 1,000 product pages.",
    "version": "1.0",
    "x-build-id": "wcOiPULJwd2kopHu0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fairfetch~amazon-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fairfetch-amazon-product-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/fairfetch~amazon-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fairfetch-amazon-product-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/fairfetch~amazon-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fairfetch-amazon-product-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search on the selected marketplace, like typing them into Amazon's search box. Every result is one row with its position, page and a sponsored flag. Up to \"Max results per search\" rows per term.",
            "items": {
              "type": "string"
            }
          },
          "productUrls": {
            "title": "Products (ASINs or product URLs)",
            "type": "array",
            "description": "One product per line, returned with every detail field (one product-page request each):\n- ASIN: B0BTYCRJSS (uses the marketplace selected below)\n- Product URL from any supported marketplace: https://www.amazon.de/dp/B0BTYCRJSS (the URL's marketplace is used)\nAmazon search or Best Sellers URLs pasted here are recognized too. ASINs that don't exist are reported in the run summary and cost nothing.",
            "items": {
              "type": "string"
            }
          },
          "bestSellerUrls": {
            "title": "Best Sellers / New Releases (URLs or categories)",
            "type": "array",
            "description": "Amazon's ranked charts, top 100 per category (2 pages of 50):\n- Paste the URL of any Best Sellers, New Releases, Movers & Shakers, Most Wished For or Gift Ideas page, e.g. https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics\n- Or type a category as it appears in such URLs (\"electronics\", \"books\", \"electronics/172541\"); it is opened on the selected marketplace as the chart chosen in \"Chart type\". Category names differ per marketplace (amazon.de electronics is \"ce-de\"), so URLs are the safest.\nA chart page without a category returns the top 6 of every department.",
            "items": {
              "type": "string"
            }
          },
          "marketplace": {
            "title": "Marketplace",
            "enum": [
              "US",
              "UK",
              "DE",
              "FR",
              "IT",
              "ES",
              "CA",
              "IN",
              "JP",
              "AU",
              "MX"
            ],
            "type": "string",
            "description": "Amazon site for search terms, plain ASINs and category names. Prices are in its currency, texts in its main language. URLs always use their own marketplace.",
            "default": "US"
          },
          "maxResultsPerSearch": {
            "title": "Max results per search term",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Results to return for each search term (or search URL), read page by page (16-60 per page). Amazon shows at most about 7 result pages, so a term returns up to roughly 100-400 results; it stops early when Amazon has no more pages.",
            "default": 50
          },
          "sort": {
            "title": "Sort search results by",
            "enum": [
              "relevance",
              "price-asc",
              "price-desc",
              "rating",
              "newest",
              "best-sellers"
            ],
            "type": "string",
            "description": "Amazon's own \"Sort by\" options (search terms only; for search URLs, sort in the browser before copying the URL).",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Only search results at or above this price, in the marketplace currency (Amazon's own price filter; search terms only). Leave empty for no limit."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Only search results at or below this price, in the marketplace currency (search terms only). Leave empty for no limit."
          },
          "searchUrls": {
            "title": "Search result URLs (optional)",
            "type": "array",
            "description": "Search pages you set up in your browser with any filters (brand, rating, department, Prime...). Paste the URL of the first results page; it is read like a search term.",
            "items": {
              "type": "string"
            }
          },
          "chartType": {
            "title": "Chart type (for category names)",
            "enum": [
              "best-sellers",
              "new-releases",
              "movers-and-shakers",
              "most-wished-for",
              "gift-ideas"
            ],
            "type": "string",
            "description": "Which chart a category name in \"Best Sellers / New Releases\" opens. Pasted URLs keep their own chart.",
            "default": "best-sellers"
          },
          "maxItemsPerChart": {
            "title": "Max products per chart",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Products to return from each chart, in rank order (Amazon lists 100). On a department overview page (a Best Sellers URL without a category) the limit applies to each department, which shows its top 6.",
            "default": 100
          },
          "includeDetails": {
            "title": "Full product details for search and chart results",
            "type": "boolean",
            "description": "Search and chart rows have the card fields (title, price, list price, rating, ratings, badges, position or rank, image). Turn this on to open every result's product page and return all fields (brand, seller, availability, images, bullet points, description, Best Sellers rank, specifications, variations). Each such row is charged as a product row instead of a listing row, and runs are slower.",
            "default": false
          },
          "deduplicate": {
            "title": "Return each product once per run",
            "type": "boolean",
            "description": "Skip a product that an earlier input of the same run already returned (e.g. found by two search terms, or listed as a product and also in a chart). Charts and searches can then have gaps in their ranks / positions. Turn off to keep every position, e.g. for rank tracking. Within one search, a product that appears both as an ad and organically is always kept twice (sponsored flag).",
            "default": true
          },
          "setDeliveryLocation": {
            "title": "Use a local delivery address",
            "type": "boolean",
            "description": "Amazon shows prices, availability and delivery for a delivery location. Requests from abroad see foreign currencies and \"cannot be delivered\" pages, so the Actor sets a central postcode of the marketplace's country (e.g. 10115 Berlin, EC1A 1BB London, 100-0001 Tokyo, 2000 Sydney) with the same \"Deliver to\" form a shopper uses. amazon.com, .ca, .com.mx and .in already give a visitor from abroad a domestic location, which is kept unless you enter a postcode below. If you turn this off, prices and availability are those of the location Amazon picks from the server's IP address (`deliveryLocation` shows it).",
            "default": true
          },
          "deliveryPostcode": {
            "title": "Delivery postcode for the selected marketplace",
            "type": "string",
            "description": "Optional. A postcode of the selected marketplace's country (e.g. 90210 for amazon.com, M5V 2T6 for amazon.ca, SW1A 1AA for amazon.co.uk). Prices and availability are then those for that address. The format is checked before the run; if Amazon rejects the postcode, that marketplace's inputs fail with the reason (nothing is charged) instead of returning prices for another location."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Fallback for amazon.com and amazon.in only. Requests go out directly from Apify; when Amazon blocks direct requests to one of these two marketplaces, it switches to this proxy (US IP addresses) for 10 minutes, and back to direct requests if the proxy is blocked even more. A proxy page that shows a delivery location abroad is fetched again with another IP. All other marketplaces, and any marketplace with your own postcode, always use direct requests: in our tests (19 Oct 2026) the proxy did worse than direct requests on amazon.ca and .com.mx, and through Apify's data-center proxy Amazon answered the delivery-address form with a bot check every time. A session that gets an error page is replaced; a CAPTCHA, challenge or 403 page is retried only once. Residential proxies are not supported. You can use your own proxy URLs instead of Apify Proxy.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many pages are fetched at the same time, each on its own session. At 10, a run reads about 4,000-5,000 product pages per hour (product pages take 2-5 seconds on Amazon's side); search and chart pages are much faster. For more product pages than that, raise the run timeout (default 1 hour): 90 seconds before its timeout the run stops starting new pages (queued product pages included; their search / chart card data is returned instead) and still writes its summary.",
            "default": 10
          },
          "maxAttempts": {
            "title": "Attempts per page",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How often a page is tried when Amazon answers with a rate-limit or error page (503, empty page, network error), each time with a fresh session. A CAPTCHA, bot-check, JavaScript-challenge or 403 \"forbidden\" page is retried only once, from another session; if it comes again, the page is reported as blocked. Blocked pages are never charged.",
            "default": 8
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}