Skip to main content gottem  — one API for every scraper.
Automotive
Verified

BMW Scraper

Extract BMW model lineups, build-your-own configurations, pricing, performance specs, and certified pre-owned inventory. Built on spider-browser .

Get started Docs
target
bmw.com
success rate
99.9%
latency
~4ms
Quick start

Extract data in minutes.

bmw-scraper.ts
import { SpiderBrowser } from "spider-browser";

const spider = new SpiderBrowser({
  apiKey: process.env.SPIDER_API_KEY!,
  stealth: 2,
});

await spider.connect();
const page = spider.page!;
await page.goto("https://www.bmwusa.com/models.html");
await page.content(12000);

const data = await page.evaluate(`(() => {
  const models = [];
  document.querySelectorAll("[class*='model-card'], [class*='vehicle-card']").forEach(el => {
    const name = el.querySelector("h2, h3, [class*='model-name']")?.textContent?.trim();
    const price = el.querySelector("[class*='price'], [class*='msrp']")?.textContent?.trim();
    const engine = el.querySelector("[class*='engine']")?.textContent?.trim();
    const hp = el.querySelector("[class*='horsepower'], [class*='power']")?.textContent?.trim();
    const link = el.querySelector("a")?.getAttribute("href");
    if (name) models.push({ name, price, engine, hp, link });
  });
  return JSON.stringify({ total: models.length, models: models.slice(0, 15) });
})()`);

console.log(JSON.parse(data));
await spider.close();
ready to run · spider-browser · TypeScript
Fetch API

One endpoint for bmw.com.

Structured JSON from bmw.com with a single POST. AI-resolved selectors, cached on the first call.

POST /fetch/bmwusa.com/
Model nameStarting MSRPEngineHorsepower0-60 timeDrivetrain
cURL
curl -X POST https://api.spider.cloud/fetch/bmwusa.com/ \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"return_format": "json"}'
Python
import requests

resp = requests.post(
    "https://api.spider.cloud/fetch/bmwusa.com/",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={"return_format": "json"},
)
print(resp.json())
Node.js
const resp = await fetch("https://api.spider.cloud/fetch/bmwusa.com/", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ return_format: "json" }),
});
const data = await resp.json();
console.log(data);
Extraction

Fields you can pull.

Model nameStarting MSRPEngineHorsepower0-60 timeDrivetrainConfiguration optionsAvailable packages
Listings

Vehicle inventory

Extract make, model, year, price, and mileage from bmw.com listings.

Rendering

Dynamic search

Handle interactive search filters, map views, and lazy-loaded inventory pages.

Scale

Market coverage

Process thousands of vehicle listings across dealers and private sellers.

Related

More Automotive scrapers.

Start

Start scraping bmw.com.

Grab an API key and call the endpoint above. The first request resolves the config; every request after hits cache.