{
  "openapi": "3.0.1",
  "info": {
    "title": "Best Buy Product Scraper",
    "description": "Scrape Best Buy products — price, ratings, reviews, images, specs & availability. Keyword or category search, full detail enrichment, clean JSON/CSV, no code.",
    "version": "1.0",
    "x-build-id": "uea7UPB4lz76ht1xx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~best-buy-product-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-best-buy-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/sian.agency~best-buy-product-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-best-buy-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/sian.agency~best-buy-product-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-best-buy-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": {
          "keywords": {
            "title": "🔍 Search Keywords",
            "type": "array",
            "description": "🔍 **KEYWORD SEARCH:** Free-text Best Buy searches — exactly what you'd type into the site's search bar.\n\n📝 **EXAMPLES:** `laptop` · `4k tv` · `sony headphones` · `wireless mouse` · `air fryer`\n\n💡 **TIP:** Add one keyword per line — each runs as its own search and all results land in the same dataset.\n\n🖊️ **BULK EDIT:** Click \"Bulk edit\" to paste many keywords at once (one per line).\n\n✅ **IMPORTANT:** Provide either keywords, category ids, OR Best Buy URLs (at least one is needed to have something to scrape).",
            "default": [
              "laptop"
            ],
            "items": {
              "type": "string"
            }
          },
          "scrapeMode": {
            "title": "⚙️ Scrape Mode",
            "enum": [
              "overview",
              "detail"
            ],
            "type": "string",
            "description": "⚙️ **SCRAPE DEPTH:** Choose how much data to pull per product.\n\n⚡ **Overview (fast):** Search results only — SKU, title, brand, price, was-price, savings, rating, review count, image, availability, condition & seller. Fastest and cheapest path.\n\n🔬 **Detail (enriched specs + description):** Everything in Overview PLUS the full specifications table (30–90 rows), the long product description, the full image gallery, model number, UPC, color and the breadcrumb category path scraped from each product page.\n\n💡 **TIP:** Start with Overview to scope your catalog, then switch to Detail when you need the complete spec sheet for feeds or comparisons.",
            "default": "overview"
          },
          "sort": {
            "title": "🔃 Sort Order",
            "enum": [
              "featured",
              "price_low",
              "price_high",
              "best_selling",
              "top_rated",
              "newest"
            ],
            "type": "string",
            "description": "🔃 **RESULT ORDERING:** Order search results using Best Buy's own native sort options — so you get the same ranking real shoppers see.\n\n🏆 **Best selling** surfaces the most popular products first · 💲 **Price** sorts ascending or descending · ⭐ **Top rated** leads with the highest-reviewed items · 🆕 **Newest** prioritizes the latest arrivals.",
            "default": "featured"
          },
          "brand": {
            "title": "™️ Brand Filter",
            "type": "string",
            "description": "™️ **BRAND FILTER:** Restrict results to a single brand (e.g. `Sony`, `Apple`, `Samsung`, `HP`). Uses Best Buy's own brand facet, so it mirrors the site's brand filter.\n\n💡 **TIP:** Leave blank to include every brand."
          },
          "minPrice": {
            "title": "💵 Min Price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "💵 **MINIMUM PRICE:** Only return products at or above this price (USD). Leave blank for no lower bound."
          },
          "maxPrice": {
            "title": "💰 Max Price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "💰 **MAXIMUM PRICE:** Only return products at or below this price (USD). Leave blank for no upper bound."
          },
          "topRated": {
            "title": "⭐ Top-Rated Only",
            "type": "boolean",
            "description": "⭐ **TOP-RATED ONLY:** When on, limits results to Best Buy's \"Top-Rated\" customer-rating facet — the highest-reviewed products.",
            "default": false
          },
          "categoryIds": {
            "title": "🧭 Category IDs (Advanced)",
            "type": "array",
            "description": "🧭 **CATEGORY BROWSING (Advanced):** Scrape a whole Best Buy category instead of a keyword search.\n\n🔧 **HOW TO GET IT:** Open any Best Buy category page and copy the numeric id from the URL after the category slug (e.g. for `bestbuy.com/site/laptops/all-laptops/pcmcat138500050001.c?id=pcmcat138500050001` use `pcmcat138500050001`).\n\n💡 **TIP:** Leave this empty if you're only using keywords — it's purely an advanced alternative for category-level harvesting.\n\n🖊️ **BULK EDIT:** Add one category id per line to sweep multiple categories in a single run.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "🔗 Best Buy URLs (Advanced)",
            "type": "array",
            "description": "🔗 **PASTE RESULT-PAGE URLs:** Paste full Best Buy search or category result-page URLs to scrape them verbatim — filters and sorting you already set in the URL are preserved.\n\n📝 **EXAMPLE:** `https://www.bestbuy.com/site/searchpage.jsp?st=4k+tv`\n\n🖊️ **BULK EDIT:** Add one URL per line to sweep several pages in a single run.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "🔢 Max Results",
            "minimum": 1,
            "type": "integer",
            "description": "🔢 **RESULT CAP:** Maximum number of products to return across all keywords, categories and URLs combined.\n\n🎁 **TIER-BASED LIMITS:**\n- **FREE users:** Up to 25 products per run\n- **PAID users:** Unlimited — scrape entire catalogs in a single run\n\n💡 **TIP:** Keep this low while you dial in your keywords, then raise it once the output looks right.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}