Kelley Blue Book Scraper — KBB Used Cars for Sale avatar

Kelley Blue Book Scraper — KBB Used Cars for Sale

Pricing

from $30.00 / 1,000 vehicle listing extracteds

Go to Apify Store
Kelley Blue Book Scraper — KBB Used Cars for Sale

Kelley Blue Book Scraper — KBB Used Cars for Sale

Scrape KBB used cars for sale from Kelley Blue Book search pages: price, mileage, make, model, KBB price badge and seller. USD 40 per 1,000 listings.

Pricing

from $30.00 / 1,000 vehicle listing extracteds

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 hours ago

Last modified

Share

Kelley Blue Book Scraper collects KBB used cars for sale, plus new and certified listings, from public kbb.com cars-for-sale search pages and returns one record per vehicle with title, year, make, model, trim, advertised price, mileage, KBB price badge, seller, distance, badges, image and listing URL. It is built for dealers, automotive analysts and pricing teams who track listed inventory, and it costs USD 40 per 1,000 vehicle listings on the FREE tier (USD 30 on GOLD and above).

What data does the Kelley Blue Book scraper return?

Each dataset row is one vehicle listing card from a KBB cars-for-sale results page:

FieldWhat it contains
listingUrlKBB vehicle page, normalized to https://www.kbb.com/cars-for-sale/vehicle/<id>
listingTypeCondition label the card shows, for example Used, New or a certified label such as Porsche Certified
titleVehicle title as displayed, for example 2018 Chevrolet Silverado 1500
year, make, modelParsed from the title (Land Rover, Mercedes-Benz and Rolls-Royce stay whole makes); null when the title cannot be parsed
trimTrim shown on the card after the title, for example LT or Targa 4 GTS; null when the card shows none
priceAdvertised price in USD, as a number
mileageAdvertised mileage in miles (35K mi becomes 35000)
priceRatingKBB price badge such as Great Price, Good Price or Fair Price
sellerNameDealer or seller name when the card shows it, for example Porsche Fort Wayne
distanceMilesDistance from the search location when the card shows one (cards without a search location usually do not)
badgesVisible badges from a fixed list: price badges, No Accidents, One Owner, Online Paperwork, Buy Online, Hybrid, Electric
imageUrlPrimary listing image
rawTextThe card's visible text, kept for auditing and your own parsing
sourceUrl, scrapedAtResults page the card came from, and collection time

The run summary is saved as SUMMARY in the key-value store: pages visited, cards seen, records saved, charged listing events and warnings for pages that could not be loaded.

How do I scrape KBB used cars for sale for one model or ZIP code?

Set the filters you want on kbb.com (make, model, ZIP code, radius, price, condition), copy the results URL and put it in startUrls. The Actor reads that page, follows further pages by adding a page number to the URL, and stops at maxPages per URL or maxItems in total.

{
"startUrls": [{ "url": "https://www.kbb.com/cars-for-sale/used" }],
"maxItems": 25,
"maxPages": 2
}
  • startUrls: 1 to 10 URLs on kbb.com whose path contains /cars-for-sale/. Other hosts or paths stop the run with an input warning before any page is requested.
  • maxItems: 1 to 200 unique listings per run (default 25).
  • maxPages: 1 to 10 result pages per start URL (default 2).

Listings are deduplicated by KBB vehicle ID across pages and URLs, so a car that appears on two searches is saved and charged once.

Does it return Kelley Blue Book values or trade-in prices?

No. The Actor returns the advertised asking price and KBB's price badge from cars-for-sale listings. It does not return KBB Fair Market Range, trade-in, private-party or dealer values, VIN history reports, or dealer feeds. Use price with priceRating to see how KBB labels a listed car against the market.

When should I use it, and when not?

Use it when you need a snapshot of cars listed on KBB for a make, model or area: price and mileage tracking, competitor inventory checks for a dealership, used-car market research, or a feed of listings for an AI agent to compare.

Use something else when:

How do I run it from code?

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/kelley-blue-book-scraper').call({
startUrls: [{ url: 'https://www.kbb.com/cars-for-sale/used' }],
maxItems: 25,
maxPages: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const car of items) console.log(car.year, car.make, car.model, car.price, car.mileage, car.priceRating);

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/kelley-blue-book-scraper").call(run_input={
"startUrls": [{"url": "https://www.kbb.com/cars-for-sale/used"}],
"maxItems": 25,
"maxPages": 2,
})
for car in client.dataset(run.default_dataset_id).iterate_items():
print(car["title"], car.get("price"), car.get("mileage"), car.get("sellerName"))

Use it from an AI assistant

Kelley Blue Book Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/kelley-blue-book-scraper to your client and ask, for example: "Get 20 used cars listed on KBB from this search URL and list the ones marked Great Price with under 50,000 miles." Each saved listing is charged at the prices below.

What does the output look like?

A record from the 2026-10-27 run of the default input (rawText shortened):

[
{
"listingUrl": "https://www.kbb.com/cars-for-sale/vehicle/794025729",
"sourceUrl": "https://www.kbb.com/cars-for-sale/used",
"listingType": "CarBravo Certified",
"title": "2018 Chevrolet Silverado 1500",
"year": 2018,
"make": "Chevrolet",
"model": "Silverado 1500",
"trim": "LT",
"price": 28372,
"mileage": 66000,
"priceRating": "Great Price",
"sellerName": "Laura Buick GMC, Inc.",
"distanceMiles": null,
"badges": ["Great Price", "No Accidents", "Online Paperwork", "Buy Online"],
"imageUrl": "https://atcimages.kbb.com/hn/c/75703e7133034415a998496a21ed342e.jpg?format=auto&width=408&height=306",
"rawText": "CarBravo Certified 2018 Chevrolet Silverado 1500 LT 66K mi 28,372 See payment Great Price Dealer Fees Included No Accidents ...",
"scrapedAt": "2026-10-27T12:47:51.807Z"
}
]

How much does the KBB scraper cost?

The Actor uses pay-per-event pricing, and platform usage is included in the event prices. Each unique listing saved to the dataset is one charged event; pages that fail to load are not charged.

EventFREEBRONZESILVERGOLDPLATINUM / DIAMOND
Vehicle listing extractedUSD 0.04USD 0.04USD 0.04USD 0.03USD 0.03
Actor start (per started GB of allocated memory)USD 0.005USD 0.005USD 0.005USD 0.005USD 0.005

Worked totals on the FREE tier at the default 512 MB memory (one start event):

  • 5 listings (the Store example input): 5 × USD 0.04 + USD 0.005 = USD 0.205
  • 200 listings (the per-run maximum): 200 × USD 0.04 + USD 0.005 = USD 8.005

The status message and SUMMARY estimate use the live event prices. If you set a maximum charge per run, the Actor stops before saving a listing it could no longer charge, so every saved listing is a charged listing.

Limits and reliability

  • Access: KBB uses bot protection that blocks most datacenter traffic. The Actor fetches pages over US residential connections and retries each page up to 3 times with a fresh session. It does not log in or solve CAPTCHAs.
  • Failures are reported, not hidden: a page that still fails is listed in SUMMARY.warnings. If no listing is saved and any page failed, the run fails with the first reason instead of returning an empty success.
  • Parsing: fields come from listing cards. If KBB changes its card markup, rawText still holds the visible text, and parsed fields such as sellerName can be null.
  • Run size: at most 10 start URLs, 10 pages per URL and 200 listings per run; the default run timeout is 10 minutes.
  • Freshness: prices and availability are what KBB showed at scrapedAt. Re-run before making purchase or pricing decisions.

FAQ

Is there a Kelley Blue Book API for cars for sale?

KBB licenses data products to businesses through its B2B site. For listings, this Actor is a self-serve option: it reads the public cars-for-sale pages and returns structured JSON, CSV or Excel through Apify, with no API key.

Does it return KBB values or trade-in values?

No. It returns advertised listing prices and KBB's price badge, not valuation figures.

Can I scrape KBB used cars near a specific ZIP code?

Yes. Set the ZIP code and radius on kbb.com, then paste the resulting cars-for-sale URL into startUrls.

Does it return VINs or full vehicle specifications?

No. It reads search result cards, which do not carry the VIN or full specifications. For VINs, use the CARFAX or CarMax scrapers listed below.

How many listings can I get per run?

Up to 200 unique listings per run, from up to 10 start URLs. Schedule several runs with different searches for larger coverage.

What happens if KBB blocks a request?

The page is retried up to 3 times with a new session. Persistent failures appear in SUMMARY, and a run that saves nothing because of failures ends as failed with no listing charges.

Can I monitor KBB prices over time?

Yes. Save your input as an Apify task, schedule it daily or weekly, and compare price and priceRating by listingUrl between runs.

The Actor reads publicly accessible kbb.com cars-for-sale pages without logging in and does not bypass access controls or CAPTCHAs. Respect Kelley Blue Book's terms of use, keep request volumes reasonable, and verify prices with the seller before acting on them. This tool is not affiliated with or endorsed by Kelley Blue Book or Cox Automotive, and this is not legal advice.

Last verified: 2026-10-27