CarParts.com Scraper — Price & Stock Monitor avatar

CarParts.com Scraper — Price & Stock Monitor

Pricing

from $11.99 / 1,000 parts

Go to Apify Store
CarParts.com Scraper — Price & Stock Monitor

CarParts.com Scraper — Price & Stock Monitor

Watch CarParts.com aftermarket prices and catalog status. Save SKU, brand, part number, price, core, and shipping, then alert on new parts and price or status changes.

Pricing

from $11.99 / 1,000 parts

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Categories

Share

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by CarParts.com, Inc. or its affiliates. Data is read from the public product search only. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Watch aftermarket auto parts prices and catalog status. Each row is one part: SKU, brand, manufacturer part number, price, core charge, shipping, fit label, and OE number when the search publishes it. Turn on monitor mode and an Apify Schedule to save only new parts, price drops, price rises, and catalog-status changes.

Best for: parts-counter price checks, brand and SKU watches, and a scheduled alert when a price or catalog status moves.

Auto parts suite — US aftermarket price here, then a EUR catalog price, a used yard price, and the donor car.

ActorWhat it returns
Row52 ScraperJunkyard donor cars: VIN, yard, row
Pick-n-Pull ScraperSelf-service yard inventory: VIN, row
PartsHotlines ScraperUsed part price, grade, and yard
CarParts.com Scraper ◄── you are hereUS aftermarket price and catalog status
Oscaro ScraperFrench catalog price in EUR
Car-Part ScraperUsed recycler price, grade, and distance

When to use this Actor

  • Price a repair — Search brake pads, an alternator, or a part number and export the cheapest matches with brand, price, core, and shipping.
  • Fit a vehicle — Add year, make, and model so the search is limited to that vehicle.
  • Watch a SKU window — Schedule the same search. The first run stores a baseline. Later runs return only parts that are new or whose price or catalog status changed.
  • Compare with used stock and EUR prices — After this run, check a Hotlines yard price with PartsHotlines Scraper and recycler asking prices with Car-Part Scraper. For a French EUR price, run Oscaro Scraper. To find the donor car, run Row52 Scraper or Pick-n-Pull Scraper.

This Actor reads the public product search. It does not log in, place orders, or read account pages.

Data pipeline

Input Flow Output
───────────────────── ───────────────────── ──────────────────────────
keyword or search URL ──► public product search ──► SKU, price, core, shipping
year / make / model ──► vehicle filters ──► brand, part number, OE
monitorMode + Schedule ──► named key-value store ──► new, price, or status change

Key features

  • Cheapest first — Each search is sorted by price, low to high, so a scheduled watch stays on the same window.
  • Vehicle filters — Optional year, make, model, brand, and part type apply to every search in the run.
  • Price and status — Selling price, regular price, special price, core charge, shipping, pricing status, and SKU status.
  • OE and interchange — OE number and interchange numbers when the search result publishes them.
  • Monitor — Baseline on the first run. Later runs charge only new parts, price drops, price rises, and catalog-status changes.
  • No proxy by default — The public search answers over HTTP. Leave the proxy off unless a run is blocked.

Input parameters

ParameterTypeDefaultDescription
searchQueriesArray["brake pads"]Part name, keyword, or part number. Each entry is its own search.
startUrlsArray—Search URL. The q value is the keyword. A category path is used as the keyword.
yearString—Model year, for example 2020.
makeString—Make, for example Toyota.
modelString—Model, for example Camry.
brandString—Brand facet label, for example Bosch.
partString—Part facet label, for example Brake Pad Set.
maxItemsInteger50Maximum parts to save. In monitor mode this caps alerts.
maxPagesInteger3Pages per search. One page is 20 parts. A monitor scans every page.
includeFitmentBooleanfalseAdd a fitment count and up to 25 vehicle keys.
monitorModeBooleanfalseSave only changes after the baseline run.
monitorStoreNameStringcarparts-com-monitorNamed store for one watch.
resetMonitorStateBooleanfalseClear the baseline before this run.
proxyConfigurationObjectoffLeave off unless a run is blocked.
{
"searchQueries": ["brake pads"],
"year": "2020",
"make": "Toyota",
"model": "Camry",
"maxItems": 50,
"maxPages": 3
}

Input example — scheduled price watch

{
"searchQueries": ["brake pads"],
"year": "2020",
"make": "Toyota",
"model": "Camry",
"monitorMode": true,
"monitorStoreName": "camry-brake-pads",
"maxItems": 50,
"maxPages": 3
}

Use one monitorStoreName per watch. The first run returns the current window and stores every scanned SKU. Later runs return rows with monitorChange set to new, price_drop, price_rise, or status_change, plus previousPrice when the price moved. A run with no changes saves nothing new.

skuStatus is the catalog status code (for example OBS when the index publishes it). A change in that code or in pricingStatusId is a status_change. This is the catalog status from search, not a live warehouse quantity.

Output fields

FieldDescription
skuCatalog SKU. Monitor key.
titlePart title.
brandBrand.
partNumberManufacturer part number.
partPart type facet.
locationPosition, such as Front.
priceSelling price in USD.
regularPriceRegular price.
specialPriceSpecial price when one is published.
corePriceCore charge when one is published.
shippingPriceShipping amount published with the part.
pricingStatusIdCatalog pricing status code.
skuStatusCatalog SKU status.
productFitFit label.
quantitySoldHow the part is sold.
warrantyWarranty text when published.
replacesOeNumberOE number when published.
interchangePartNumberInterchange numbers when published.
urlProduct page URL.
imageUrlImage URL.
searchQuerySearch that returned the part.
year, make, modelVehicle filters for this search, when set.
monitorChangenew, price_drop, price_rise, or status_change.
previousPricePrice from the previous monitor run.
scrapedAtUTC time of the run.

Output example

{
"sku": "JSTPSSCP1650",
"productId": "17128064",
"title": "Front Brake Pad Set, Ceramic",
"brand": "JC Whitney",
"partNumber": "JSTPSSCP1650",
"part": "Brake Pad Set",
"location": "Front",
"price": 23.49,
"regularPrice": 23.49,
"specialPrice": null,
"corePrice": null,
"shippingPrice": 9.3,
"currency": "USD",
"pricingStatusId": 1,
"skuStatus": "OBS",
"productFit": "Direct Fit",
"quantitySold": "2-Wheel Set",
"warranty": "3-year or 36,000-mile limited warranty",
"replacesOeNumber": "D10603TA0A",
"interchangePartNumber": "TXC1650, 500165",
"url": "https://www.carparts.com/Brake%20Pad%20Set/JC%20Whitney/JSTPSSCP1650",
"searchQuery": "brake pads",
"year": "2020",
"make": "Toyota",
"model": "Camry",
"scrapedAt": "2026-10-23T14:00:00+00:00"
}

Use cases

  • A shop checks the current aftermarket price for a Camry brake-pad set before quoting a job.
  • A reseller schedules a part-number watch and reads only the rows whose price dropped.
  • A catalog team exports brand, SKU, OE number, and core charge for one part type.
  • A buyer compares the new-part price from this Actor with used recycler prices from the Car-Part Scraper.

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/carparts-com-scraper').call({
searchQueries: ['brake pads'],
year: '2020',
make: 'Toyota',
model: 'Camry',
monitorMode: true,
monitorStoreName: 'camry-brake-pads',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/carparts-com-scraper").call(run_input={
"searchQueries": ["brake pads"],
"year": "2020",
"make": "Toyota",
"model": "Camry",
"monitorMode": True,
"monitorStoreName": "camry-brake-pads",
"maxItems": 50,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl "https://api.apify.com/v2/acts/crawloop~carparts-com-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["brake pads"],"year":"2020","make":"Toyota","model":"Camry","maxItems":20}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store name.

Example prompts:

  • "Run CarParts.com Scraper for 2020 Toyota Camry brake pads and return the 20 cheapest rows as JSON."
  • "Watch brake pads for a 2020 Camry with monitor mode and summarize any price drops."
  • "After CarParts.com Scraper prices 2020 Camry brake pads, run Oscaro Scraper for the EUR price and PartsHotlines Scraper for the used yard price."

Suite next step

Take the part name, year, and make from this dataset and compare a used yard price with PartsHotlines Scraper or Car-Part Scraper. For the same kind of part on the French catalog, run Oscaro Scraper. To find the donor car, run Row52 Scraper or Pick-n-Pull Scraper.

FAQ

Does the first monitor run return parts?
Yes. The first run with an empty monitor store returns parts up to maxItems and stores every scanned SKU. The next run returns only changes.

What does a zero-row monitor run mean?
The search still ran. No scanned part was new, and none of the stored prices or catalog statuses changed.

Is SKU status a live stock count?
No. skuStatus and pricingStatusId are the codes published in the product search. A change in those codes is reported as status_change.

Can I paste a search URL?
Yes. startUrls reads the q parameter. A category path is used as the keyword. Year, make, model, brand, and part from the input still apply.