Kelley Blue Book Scraper: KBB Used Car Values & Price Range avatar

Kelley Blue Book Scraper: KBB Used Car Values & Price Range

Pricing

from $1.95 / 1,000 vehicle valueds

Go to Apify Store
Kelley Blue Book Scraper: KBB Used Car Values & Price Range

Kelley Blue Book Scraper: KBB Used Car Values & Price Range

Kelley Blue Book (KBB) used car values for a fleet or dealer inventory list: paste make/model/year lines, get one row per vehicle with KBB's USD price range, Fair Purchase Price, original MSRP, trims, ratings and specs. Run monthly to track depreciation.

Pricing

from $1.95 / 1,000 vehicle valueds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Paste a fleet list or a dealer inventory list of vehicles (make, model, year) and get one row per vehicle from Kelley Blue Book (KBB): KBB's price range in USD, the Fair Purchase Price, the certified pre-owned price, the original MSRP, every trim with its own Fair Purchase Price, KBB's expert and owner ratings, how many are for sale, and the main specs. Run it on a schedule (monthly) and every row carries the date it was read, so the dataset becomes a used-car value and depreciation tracker.

No account, no API key, no login, no browser. One request per vehicle.

Input

FieldNotes
vehiclesOne vehicle per line, as a spreadsheet or fleet system pastes them: 2019 Toyota Camry, Toyota Camry 2019, 2019,Toyota,Camry (comma- or tab-separated, any order, one cell the year), KBB slugs toyota/camry/2019, or a kbb.com year page https://www.kbb.com/toyota/camry/2019/. Names become KBB's URL slugs: 3 Series is 3-series, F-150 is f-150, CR-V is cr-v; Land Rover, Alfa Romeo, Aston Martin, Mercedes Benz and Rolls Royce are read as two-word makes. The same vehicle given twice is valued and charged once.
maxItemsValue at most this many vehicles, in list order (default 100, up to 2,000).
proxyConfigurationApify datacenter proxy, the default. Do not choose the residential group: kbb.com refused the Apify residential proxy with HTTP 403 on every request when this actor was built.

Example input:

{
"vehicles": [
"2019 Toyota Camry",
"2020,Honda,Civic",
"https://www.kbb.com/ford/f-150/2021/",
"tesla/model-3/2022"
],
"maxItems": 100
}

A line that is not a vehicle (no four-digit year at its start or end, no make and model) stops the run before anything is charged, with the line named.

What the price range is (and is not)

price_min and price_max are the range KBB publishes in the page's structured data for that model year. Measured on 22 KBB year pages on 2026-10-18:

  • The page never prints or labels these two numbers. The full 2019 Toyota Camry page (1.06 MB) has no "$16,450" or "$19,950" anywhere in its text.
  • KBB's own page data tags the same pair buyused (the price to buy the car used; buynew for a model year still sold new), and the low end is the default trim's national list price at default equipment and mileage, before you enter a ZIP code, mileage, options or condition. price_basis carries that tag as sent.
  • It is not the Fair Purchase Price. KBB's Fair Purchase Price (what KBB says people typically pay, the figure the page does print) was below price_min on 22 of 22 pages: 2019 Camry $15,950 against $16,450. It is in its own column, fair_purchase_price, and per trim in trims.
  • It is not a trade-in or private-party value. Nothing on the page labels the range that way (the numbers are not in its text at all), and KBB's data tags it buyused. Trade-in and private-party values are for one specific car, in KBB's separate "My Car's Value" tool, which this actor does not use.
  • The page does not say what bounds the top end; the per-trim list is in trims.

Use price_min/price_max and fair_purchase_price as a consistent, national, model-level signal tracked over time, not as the value of one specific car.

Output

FieldNotes
query, make_slug, model_slug, year, source_urlThe line you gave, the KBB slugs and year read from it, and the kbb.com page that was read.
name, make, modelAs KBB names them: 2019 Toyota Camry, Toyota, Camry.
vehicle_urlKBB's page for what it valued. Usually source_url; KBB values a model with several body styles by its default one (/ford/f-150/2021/ was valued as /ford/f150-regular-cab/2021/), and the log says so.
body_type, conditionSedan, SUV, Pickup...; used, or new for a model year still sold new.
currencyUSD on every page measured.
price_min, price_maxKBB's price range for the year, see above. Equal when KBB lists one trim.
price_basisKBB's tag for that range: buyused or buynew.
fair_purchase_priceKBB's Fair Purchase Price for base_trim.
certified_priceKBB's certified pre-owned price for base_trim. Null when KBB gives none (it sends 0, e.g. the 2019 BMW 3 Series).
original_msrpbase_trim's MSRP when new.
base_trimKBB's default trim for the page (LE Sedan 4D), the trim price_min is the list price of. Not always the trim with the lowest Fair Purchase Price.
trims_model, trimsEvery trim KBB lists for the year: {"name", "fair_purchase_price", "original_msrp"}, and the model (body style) that list is for. On a market-model page (2020 GMC Sierra 1500) the list can be one body style's (Regular Cab) while the range is the model's.
kbb_categoryKBB's class, e.g. Mid-size Car.
expert_ratingKBB's expert rating out of 5. Null when the page has no expert review (2019 Mazda CX-5).
consumer_rating, consumer_review_countOwners' average out of 5 and the review count. KBB pools these over the model's generation, not the one year.
listings_for_saleHow many of these KBB showed as for sale.
fuel_type, drivetrain, transmission, seating_capacity, mpg_combinedFrom KBB's structured data. fuel_type and mpg_combined are null for electric cars.
image_urlThe first photo KBB lists.
fetched_atWhen the page was read (UTC). The page carries no "as of" date of its own.

Any field KBB did not send is null, never 0: a zero would read as a measured price.

Example row (real values, 2026-10-18; trims shortened):

{
"query": "2019 Toyota Camry",
"make_slug": "toyota",
"model_slug": "camry",
"year": 2019,
"source_url": "https://www.kbb.com/toyota/camry/2019/",
"name": "2019 Toyota Camry",
"make": "Toyota",
"model": "Camry",
"vehicle_url": "https://www.kbb.com/toyota/camry/2019/",
"body_type": "Sedan",
"condition": "used",
"currency": "USD",
"price_min": 16450.0,
"price_max": 19950.0,
"price_basis": "buyused",
"fair_purchase_price": 15950.0,
"certified_price": 16950.0,
"original_msrp": 25555.0,
"base_trim": "LE Sedan 4D",
"trims_model": "Camry",
"trims": [
{"name": "LE Sedan 4D", "fair_purchase_price": 15950.0, "original_msrp": 25555.0},
{"name": "XSE Sedan 4D", "fair_purchase_price": 19000.0, "original_msrp": 30680.0}
],
"kbb_category": "Mid-size Car",
"expert_rating": 4.6,
"consumer_rating": 3.9,
"consumer_review_count": 351,
"listings_for_sale": 696,
"fuel_type": "Regular",
"drivetrain": "FrontWheelDrive",
"transmission": "Automatic, 8-Spd w/Sequential Shift",
"seating_capacity": 5,
"mpg_combined": 32.0,
"image_url": "https://file.kelleybluebookimages.com/kbb/base/evox/CP/13080/2019-Toyota-Camry-front_13080_032_1833x720_2QQ_cropped.png",
"fetched_at": "2026-10-18T05:00:00Z"
}

Vehicles KBB does not have

Reported in the run log, one line each, not charged; the rest of the list is still valued. Measured answers:

  • A year, make or model KBB does not know (/toyota/camry/1965/, /notamake/camry/2019/): HTTP 404.
  • A model slug KBB does not use (/ram/1500/2019/; KBB's page is /ram/1500-crew-cab/2019/): KBB redirects to its Car Finder.
  • A year KBB has no page for yet (/toyota/camry/2031/): KBB redirects to the model page for the current year. The actor checks the year on the page it got and refuses it rather than return a 2026 price as a 2031 one.

Pricing

Pay per event: $0.00195 per vehicle valued plus $0.002 per run start. 100 vehicles cost $0.197. A vehicle KBB has no page for, a duplicate line, or a line past maxItems is not charged.

How it fetches

It reads the structured data (application/ld+json) and the page data that kbb.com's own year page embeds, one page per vehicle. kbb.com is behind Akamai. Measured 2026-10-18: Apify datacenter addresses answered 20 of 20 year pages with HTTP 200 over 35 minutes; the Apify residential proxy and the machine this actor was built on got HTTP 403 "Access Denied". A refusal (403, 429, 5xx), a 200 that is not a KBB page, or a dropped connection is treated as the address being blocked: the actor rotates to a fresh datacenter address and retries.

Limits worth knowing:

  • Values are KBB's national figures for the default equipment; the actor does not enter a ZIP code, mileage, options or condition.
  • One row per make/model/year page, not per trim; the trims are in trims.

If KBB changes its page data, the run fails with a message instead of returning empty rows.