{
  "openapi": "3.0.1",
  "info": {
    "title": "Walmart Products Scraper & Price Tracker",
    "description": "Walmart products scraper and Walmart price tracker: scrape Walmart.com and Walmart.ca search results and category pages — price, was-price, discount, stock, rating, review count, badges, sponsored flag. USD or CAD. Track price drops between runs. One flat row per product, no personal data.",
    "version": "0.1",
    "x-build-id": "e9gCN1KV3VsAeGQNj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/myth84~walmart-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-myth84-walmart-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~walmart-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-myth84-walmart-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~walmart-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-myth84-walmart-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 Walmart search box, e.g. <code>wireless earbuds</code> or <code>coffee maker</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": "Walmart search or category URLs",
            "type": "array",
            "description": "Paste one or more Walmart URLs copied from your browser: search results, e.g. <code>https://www.walmart.com/search?q=coffee+maker</code>, or a category page (<code>https://www.walmart.com/browse/...</code>), on walmart.com or walmart.ca. Their filters are kept and the URL decides the site and the language; the sort order and price range below are applied on top only when you set them. walmart.com.mx is not supported. Default empty: keywords are enough.",
            "items": {
              "type": "string",
              "pattern": "^https?://(www\\.)?walmart\\.(com|ca)/((en|fr)/)?(search|browse/)"
            },
            "default": []
          },
          "site": {
            "title": "Walmart site",
            "enum": [
              "US",
              "CA"
            ],
            "type": "string",
            "description": "Walmart site to search for keywords: walmart.com (United States, prices in USD) or walmart.ca (Canada, prices in CAD). Both were validated at build time. A URL in the field above always uses its own site. Default US: walmart.com in USD, the site of our daily check.",
            "default": "US"
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string",
            "description": "Language of the walmart.ca pages: English or French (titles, categories and badges in French, prices such as 39,99 $). walmart.com is in English only: French requires the CA site. Default en: English, the language of both sites.",
            "default": "en"
          },
          "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. A search result page holds about 50 products (30 on a category page) and Walmart shows about 13 pages per search, so about 500 unique products per search at most. Default 100: the top of a search in 2 to 4 pages; the form is prefilled with 20 for a quick first run.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "best_match",
              "price_low",
              "price_high",
              "best_seller",
              "rating_high",
              "new"
            ],
            "type": "string",
            "description": "Order of the results. Best match (Walmart's default) and price low to high were validated at build time; price high to low, best sellers, highest rating and new arrivals use Walmart's public URL parameters and are not verified yet. Default best_match: Walmart's own order, the one a shopper sees first.",
            "default": "best_match"
          },
          "priceMin": {
            "title": "Min price",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "number",
            "description": "Keep only products priced at least this amount, in the site currency, e.g. <code>20</code> for 20 USD on walmart.com (Walmart's own filter, which rounds its bounds: validated on walmart.com, not verified on walmart.ca nor on category pages). 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 site currency, e.g. <code>50</code> for 50 USD on walmart.com (Walmart's own filter, which rounds its bounds: validated on walmart.com, not verified on walmart.ca nor on category pages); it must be at least the min price. Leave empty for no maximum."
          },
          "includeSponsored": {
            "title": "Include sponsored products",
            "type": "boolean",
            "description": "Walmart mixes about 10 sponsored products into each page of 50 (none when sorting by price). Keep them (they are flagged in the isSponsored column) or skip them; skipped products keep their place in searchRank. Default on: they are real offers shown on the page.",
            "default": true
          },
          "monitorPrices": {
            "title": "Monitor prices",
            "type": "boolean",
            "description": "Off (default): every product is returned and the four monitoring columns stay null. On: every product is compared with the previous run of the same search, by Walmart product id and site, and maxResults becomes the number of products compared per search.",
            "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. Off (default): every compared product is returned with its changeType (new, price_changed, unchanged). Recommended for scheduled runs.",
            "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 (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 walmart-price-monitor.",
            "default": "walmart-price-monitor"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for the requests to Walmart. Do not set a proxy country: the site is chosen by its domain. You can also provide another Apify proxy group or your own proxy URLs; they are not needed. Default: Apify proxy, automatic datacenter group, the configuration validated for Walmart, its traffic included in the price.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxPages": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Safety cap on the number of result pages read for one search. The scraper also stops at Walmart's last page, at maxResults, or when two consecutive pages bring no new product. Default 20: more than the about 13 pages Walmart shows for a search.",
            "default": 20
          },
          "maxRequests": {
            "title": "Max page requests",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Safety cap on the number of result pages fetched in one run, all searches and retries included. Default 500: about 25,000 products at 50 per page, far above a usual run.",
            "default": 500
          },
          "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 2500: it avoided Walmart's rate limit (HTTP 429) at build time, 1,500 ms did not always.",
            "default": 2500
          },
          "debugStoreHtml": {
            "title": "Store raw HTML pages",
            "type": "boolean",
            "description": "Debugging only: save every fetched page in the run's key-value store. Pages weigh 1 to 2 MB: slows the run down and uses storage. Default off: not needed to get the rows.",
            "default": false
          },
          "debugSendAccept": {
            "title": "Send an Accept header",
            "type": "boolean",
            "description": "Debugging only: send a browser-like Accept header with every request. Off by default because the validated requests sent only Accept-Language; turn it on only to test Walmart's reaction.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}