{
  "openapi": "3.0.1",
  "info": {
    "title": "Amazon Products Scraper & Price Tracker",
    "description": "Amazon products scraper and Amazon price tracker: scrape Amazon search results on 9 marketplaces for any keywords or search URL — price, list price, discount, coupon, rating, review count, bought in past month, badges. Track price drops between runs. One flat row per product, no personal data.",
    "version": "0.1",
    "x-build-id": "fxlPUxjolVEiCcnWS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/myth84~amazon-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-myth84-amazon-search-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/myth84~amazon-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-myth84-amazon-search-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/myth84~amazon-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-myth84-amazon-search-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": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Enter one search per line, as you would type it in the Amazon search box, e.g. <code>wireless earbuds</code> or <code>yoga mat</code>. Each search gets its own results, up to the maximum number of products below. Default <code>wireless earbuds</code>: only for runs started without any keyword or URL (the form is prefilled with it); a run with URLs only searches just those URLs.",
            "default": [
              "wireless earbuds"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Amazon search URLs",
            "type": "array",
            "description": "Paste one or more Amazon search result URLs copied from your browser, e.g. <code>https://www.amazon.com/s?k=yoga+mat</code>, with any filters you applied on the page, on any marketplace below. Their filters are kept and the URL decides the marketplace; the sort order, price range and department below are applied on top only when you set them. Product pages (<code>/dp/...</code>) are not search URLs. Default empty: keywords are enough.",
            "items": {
              "type": "string",
              "pattern": "^https?://(www\\.)?amazon\\.(com|co\\.uk|de|fr|it|es|com\\.mx|co\\.jp|ca)/([^/?#]+/)?s/?\\?.+"
            },
            "default": []
          },
          "marketplace": {
            "title": "Amazon marketplace",
            "enum": [
              "US",
              "UK",
              "DE",
              "FR",
              "IT",
              "ES",
              "MX",
              "JP",
              "CA"
            ],
            "type": "string",
            "description": "Amazon marketplace to search for keywords: it decides the catalogue, the language of the titles and the currency. All of them were served at build time except amazon.ca, which is not verified yet. A URL in the field above always uses its own marketplace. Default US: amazon.com in USD, the marketplace of our daily check.",
            "default": "US"
          },
          "maxResults": {
            "title": "Maximum products per search",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Stop each search (keywords or URL) after this many unique products; you are never charged for more. Amazon shows at most 20 result pages per search: about 320 products in list layout (16 per page) and 336 to 420 in grid layout (7 pages of 48 to 60). Default 100: the top of a search in about 2 to 7 pages; the form is prefilled with 20 for a quick first run.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_low",
              "price_high",
              "avg_review",
              "newest",
              "popularity"
            ],
            "type": "string",
            "description": "Order of the results. Featured (Amazon's default), price low to high, price high to low and average customer review were validated at build time; newest arrivals and best sellers use Amazon's public URL parameters and are not verified yet. Default relevance: Amazon's featured order, the one a shopper sees first.",
            "default": "relevance"
          },
          "priceMin": {
            "title": "Min price",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "number",
            "description": "Keep only products priced at least this amount, in the marketplace currency, e.g. <code>20</code> for 20 USD on amazon.com (Amazon's own filter, which lets a few products outside the range through). Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Max price",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "number",
            "description": "Keep only products priced at most this amount, in the marketplace currency, e.g. <code>50</code> for 50 USD on amazon.com (Amazon's own filter); it must be at least the min price. Leave empty for no maximum."
          },
          "department": {
            "title": "Department",
            "type": "string",
            "description": "Optional Amazon department alias to search in, as in the <code>i=</code> parameter of Amazon's search URLs: <code>electronics</code>, <code>office-products</code>, <code>kitchen</code>, <code>beauty</code>, <code>toys-and-games</code>… (letters, digits, dashes and underscores). Leave empty to search all departments."
          },
          "includeSponsored": {
            "title": "Include sponsored products",
            "type": "boolean",
            "description": "Amazon mixes sponsored products into the results (several per page). Keep them (they are flagged in the isSponsored column) or skip them; skipped products are not counted in searchRank. Default on: they are real offers, and searchRank then counts every product shown.",
            "default": true
          },
          "localPrices": {
            "title": "Local prices outside the US",
            "type": "boolean",
            "description": "For a marketplace other than amazon.com, read the results as a visitor of that country sees them: local currency and the prices of every product. Seen from another country, Amazon converts prices and hides those of products it would not deliver there. Applies only with the default proxy configuration; no effect on amazon.com. Default on: the prices a local shopper sees, proxy traffic included in the price.",
            "default": true
          },
          "maxPages": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Safety cap on the number of result pages read for one search (Amazon shows 20 at most). The scraper also stops at Amazon's last page, at maxResults, or when two consecutive pages bring no new product. Default 20: Amazon's own limit, so the cap never cuts a search short.",
            "default": 20
          },
          "monitorPrices": {
            "title": "Monitor prices",
            "type": "boolean",
            "description": "On: every product is compared with the previous run of the same search, by ASIN and marketplace, and maxResults becomes the number of products compared per search. Default off: a plain search, every product is returned and the four monitoring columns stay null.",
            "default": false
          },
          "onlyChanges": {
            "title": "Return only changes",
            "type": "boolean",
            "description": "With price monitoring on: return and charge only the new products and the products whose price changed since the previous run; a run without any change succeeds with an empty dataset. Recommended for scheduled runs. Default off: every compared product is returned with its changeType (new, price_changed, unchanged).",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitoring store",
            "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?$",
            "type": "string",
            "description": "Name of the key-value store, in your account, that keeps the previous prices when price monitoring is on (one record per search), e.g. <code>earbuds-daily</code>. Runs sharing a name share the records; use one name per schedule when two schedules run the same search with different settings. Letters, digits and dashes only, at most 63 characters; upper case is lowered. Default amazon-price-monitor: one store holds every search.",
            "default": "amazon-price-monitor"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for the requests to Amazon. Do not set a proxy country: the marketplace is chosen by its domain and Local prices picks the country. You can also provide your own proxy group, country or URLs; they turn Local prices off. Default: Apify proxy, automatic datacenter group, the configuration validated for Amazon, its traffic included in the price.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxRequests": {
            "title": "Max page requests",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Safety cap on the number of page requests in one run, all searches and attempts included. Default 600: 30 searches of 20 pages without retries, far above a usual run; raise it for a long list of searches.",
            "default": 600
          },
          "maxAttemptsPerPage": {
            "title": "Attempts per page",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Amazon answers some requests with a temporary error page: the scraper then retries the page at once, each time as a new visitor, up to this many attempts (plus one last attempt per search) before giving the search up. Default 5: about one attempt in four got that page at build time, and five attempts make an unread page rare.",
            "default": 5
          },
          "delayMs": {
            "title": "Delay between pages",
            "minimum": 0,
            "maximum": 30000,
            "type": "integer",
            "description": "Pause between two page requests of the same search, in milliseconds; 0 disables the pause. Default 1000: a polite pace of at most one page per second for each search.",
            "default": 1000
          },
          "debugStoreHtml": {
            "title": "Store raw answers",
            "type": "boolean",
            "description": "Debugging only: save every fetched result page in the run's key-value store. Answers weigh 0.5 to 2 MB: slows the run down and uses storage. Default off: not needed to get the rows.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}