Car-Part Scraper — Used Auto Parts Prices & Recycler Stock
Pricing
from $1.00 / 1,000 part listings
Car-Part Scraper — Used Auto Parts Prices & Recycler Stock
Scrape Car-Part used auto parts: prices, ARA grades, stock numbers, year/make/model, core charges, ZIP distance, and photos. One part, a year range, or several parts on one vehicle. Phone and email stay off unless you opt in.
Pricing
from $1.00 / 1,000 part listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
33
Total users
15
Monthly active users
8 days ago
Last modified
Categories
Features
Share
Car-Part Scraper — Used Auto Parts Prices, Grades & Recycler Inventory
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Car-Part or its affiliates. Data is read from publicly accessible pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
Contact-data controls: Phone/WhatsApp/fax and email fields are omitted from the dataset by default. Enable
includePhonesand/orincludeEmailsonly for contacts already published on public pages and only when you have a lawful basis. Any contact-field examples below assume that explicit opt-in; otherwise those fields are absent.
Scrape used auto parts inventory from North America's largest recycler marketplace network. Extract structured listings: part name, donor year / make / model, asking price, core charge, ARA part grade, stock number, mileage, supplier name and website, distance from ZIP, live-chat flag, and part photos.
Search one year + make/model + part, a year range, several parts on the same vehicle, or paste existing search.cgi result URLs. Handles interchange refine pages, multi-page results, and US residential proxy defaults for Cloudflare.
Best for: used-parts price intelligence, salvage / recycler sourcing, body-shop inventory checks, core-charge research, and ZIP-distance supplier shortlists.
Crawloop auto & salvage suite — find the Actor for your task.
| I need… | Actor |
|---|---|
| Used part price from recyclers | Car-Part Scraper ◄ you are here · PartsHotlines · LKQ Online |
| A donor car in a self-service yard | Row52 · Pick-n-Pull |
| Salvage auction lots, bids, VIN | Copart · IAAI |
| New part catalog price | RockAuto · CarParts.com · Oscaro (EUR) |
| Whole-car prices | Cars.com · Cars & Bids · Facebook Marketplace · Mobile.de · AutoScout24 · AutoTrader.ca · AutoTrader UK |
| Heavy-truck parts and trucks | Vander Haag's Parts · TruckPaper |
When to use this Actor
- Parts price benchmarking — Compare recycler asking prices for engines, transmissions, body panels, lighting, and electronics by vehicle year and model.
- Whole-vehicle pricing — Send
querieswith several parts (engine, transmission, hood, headlight) and get one dataset.maxItemscaps the run. - Local sourcing — Sort by distance from a buyer ZIP. Turn on
includePhonesandincludeEmailsto add yard phone and email. - Interchange-aware searches — Take the first option, match a trim/VIN label, or walk interchange choices (at most 8 branches; a nested page uses only its first child).
- Exact browser searches — Paste a
search.cgiURL to resume a filtered results set without re-entering the form.
Data pipeline
Input Flow Output───────────────────── ───────────────────── ──────────────────────────year + makeModel + part ──► catalog resolve + form POST ──► interchange (optional)queries (many parts) ──► one search per part ──► shared maxItems capstartUrls (search.cgi) ──► paginate results pages ──► quoteForm + table parseZIP + sort + year range ──► US residential HTTP ──► price, grade, yard, images
Key Features
- Catalog resolution — Fuzzy-matches make/model and part names against the live dropdown catalog (1,600+ models, 700+ part types). Prefer exact labels like
EngineorHeadlight Assembly. - Structured quote fields — Reads
quoteForm.cgiparameters (stock, price, seller id) for reliable records. - ARA grade & core charge — Captures part grade and core / exchange fees when shown.
- Supplier — Name, website, city / state / country, live chat flag. Phone and email are added only when
includePhones/includeEmailsare on. - Year range — Optional
yearTois sent as Car-Part's end year. Empty means the single start year. - Several parts —
queriesruns engine, transmission, and body parts in one Actor run. A filled list ignores the single year / make / part fields. - Images — CDN photo URLs when recyclers upload pictures.
- US residential proxy default — Required for stable access to
search.cgibehind Cloudflare.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
includePhones | Boolean | false | Add phone, mobile, WhatsApp, or fax already published on the page. |
includeEmails | Boolean | false | Add email already published on the page. |
startUrls | Array | [] | Car-Part search.cgi result URLs. Skips the form when set. |
year | Integer | — | Vehicle year (required for a single-part search). |
yearTo | Integer | — | Optional end year. Empty searches only year. Applies to every queries row. |
makeModel | String | — | Catalog make/model, e.g. Toyota Camry. Ignored when queries has rows. |
part | String | — | Catalog part name, e.g. Engine. Ignored when queries has rows. |
queries | Array | [] | Several {year, makeModel, part} rows for one vehicle. |
userZip | String | — | ZIP / postal code for distance sorting. |
userLocation | String | USA | All States / USA / Canada / Mexico. |
sortBy | String | price | price, zip, grade, year, condition. |
interchangeMode | String | first | first, match, or all. all stops after 8 branches. |
interchangeQuery | String | — | Substring for match mode (e.g. 2.5L). |
vin | String | — | Optional VIN passed through to Car-Part Smart VIN search. |
maxItems | Integer | 100 | Max listings for the whole run (0 = unlimited). |
maxPages | Integer | 20 | Max result pages per search / interchange branch. |
concurrency | Integer | 1 | Parallel page fetches (1–5). |
softDeadlineSecs | Integer | 0 | Stop early and return partial results. 0 uses 720s. The default run timeout is 300s, so for large searches raise the run timeout or set this below it. |
proxyConfiguration | Object | US RESIDENTIAL | Apify Proxy — US residential required. |
monitorMode | Boolean | false | Scheduled delta mode: only new listings and price drops. |
monitorStoreName | String | car-part-monitor | Named KV store for fingerprints between runs. |
resetMonitorState | Boolean | false | Clear monitor state; next run is a new baseline. |
Monitor new parts and price drops
Turn on monitorMode when you run this Actor on an Apify Schedule (for example hourly or daily) with the same search input. The first run saves a baseline of every listing it scans and still returns rows up to maxItems. Later runs scan the full result set (bounded by maxPages) but emit and charge only new listings and price drops — unchanged rows update internal state only.
Use a dedicated monitorStoreName per watch (for example camry-engine-90210) so parallel schedules do not overwrite each other. Set resetMonitorState to true when you change the search or want to rebuild the baseline.
{"year": 2019,"makeModel": "Toyota Camry","part": "Engine","userZip": "90210","monitorMode": true,"monitorStoreName": "camry-engine-90210","maxItems": 50,"maxPages": 20}
Tip: pair monitor mode with an Apify Schedule on this Actor so you get a steady feed of new inventory and lower prices without re-downloading the whole market every time.
Input example — form search
{"year": 2019,"makeModel": "Toyota Camry","part": "Engine","userZip": "90210","userLocation": "USA","sortBy": "price","interchangeMode": "first","maxItems": 100,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Input example — several parts on one vehicle
{"yearTo": 2019,"userZip": "90210","userLocation": "USA","sortBy": "price","interchangeMode": "first","maxItems": 80,"queries": [{ "year": 2015, "makeModel": "Toyota Camry", "part": "Engine" },{ "year": 2015, "makeModel": "Toyota Camry", "part": "Transmission" },{ "year": 2015, "makeModel": "Toyota Camry", "part": "Hood" },{ "year": 2015, "makeModel": "Toyota Camry", "part": "Headlight Assembly" }],"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
year, makeModel, and part outside queries are ignored while that list has rows. yearTo applies to every row.
Input example — result URL
{"startUrls": [{"url": "https://www.car-part.com/cgi-bin/search.cgi?userDate=2013&userModel=Volkswagen%20Golf%20GTI&userPart=Engine&userZip=06095&userPreference=price&userPage=1"}],"maxItems": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Output Format
Each dataset item is one recycler part offer:
| Field | Description |
|---|---|
listingId, sessionId | Composite listing key; search-session token |
year, makeModel, partName | Donor vehicle and part type as listed |
requestedYear, requestedYearTo, requestedMakeModel, requestedPart | Search that produced the row. requestedYearTo is empty for a single year. |
description, interchangeCode | Condition / interchange notes |
price, priceFormatted, priceCad, coreCharge, currency | Pricing. priceCad is the Canadian dollar amount when the cell includes --Can--. |
partGrade, stockNumber, mileage | Grade, stock tag, donor miles |
supplierName, supplierWebsite | Recycler name and site. supplierPhone and supplierEmail appear only when includePhones / includeEmails are on. |
country, stateProvince, city, distanceMiles | Location & distance from ZIP |
liveChatAvailable, imageUrls | Chat flag and photo URLs |
scrapedAt | UTC ISO timestamp |
Output example
{"listingId": "1127-3S2523-2010-3120","sessionId": "13000000735758473","year": 2010,"makeModel": "Audi A3","partName": "Engine Assembly","requestedYear": 2010,"requestedYearTo": null,"requestedMakeModel": "Audi A3","requestedPart": "Engine","description": "2.0L,AT,AWD,W/TURBO","price": 3120,"priceFormatted": "$3120","coreCharge": null,"currency": "USD","partGrade": "A","stockNumber": "3S2523","mileage": 0,"supplierName": "All Foreign Auto Parts - PRP Freight, CDC","supplierWebsite": "http://Www.AllForeignAutoParts.com","sellerId": "1127","country": "USA","stateProvince": "PA","city": "Pittsburgh","distanceMiles": 390,"liveChatAvailable": true,"imageUrls": ["https://wsimgky.car-part.com/3885/2023/3S2523/3885_396029_01.jpg"],"dbPart": "300.1","dbModel": "75.29.1.1","interchangeCode": "CDFDE","scrapedAt": "2026-07-24T16:00:00Z"}
Notes
- Proxy: Datacenter IPs typically receive Cloudflare 403 on
cgi-bin/search.cgi. Keep US residential enabled. - Exact catalog names: Prefer exact part labels (
Engine, not a free-text synonym). The Actor fuzzy-matches, but exact values are more reliable. - Interchange
all: At most 8 branches per search. A nested interchange page keeps only its first child. Pair with a tightmaxItems/maxPages. queries: One bad catalog name is skipped. If every row fails, the run finishes with 0 listings and the first catalog error.
Use cases
| Use case | What you get |
|---|---|
| Parts price benchmarking | Recycler asking prices by year / make / model / part |
| Local sourcing | ZIP distance + supplier name / website. Phone and email only with includePhones / includeEmails. |
| Whole vehicle | Several parts in queries, one dataset, one maxItems cap |
| Interchange coverage | First option, a text match, or up to 8 branches. Nested pages keep the first child. |
| Salvage / body-shop ops | ARA grade, stock #, core charge, photos |
| AI / MCP workflows | Run via Apify API, clients, or MCP and summarize part offers |
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/car-part-scraper').call({year: 2019,makeModel: 'Toyota Camry',part: 'Engine',userZip: '90210',maxItems: 50,proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],apifyProxyCountry: 'US',},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/car-part-scraper").call(run_input={"year": 2019,"makeModel": "Toyota Camry","part": "Engine","userZip": "90210","sortBy": "price","maxItems": 50,"proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US",},})items = list(client.dataset(run["defaultDatasetId"]).iterate_items())print(len(items), items[:3])
cURL
curl "https://api.apify.com/v2/acts/crawloop~car-part-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"year": 2019,"makeModel": "Toyota Camry","part": "Engine","userZip": "90210","maxItems": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/car-part-scraper.
Example prompts:
- "Run Car-Part Scraper for 2019 Toyota Camry Engine near ZIP 90210, max 50, and return price, partGrade, supplierName, distanceMiles"
- "Scrape Car-Part offers for a 2015 Honda Civic Headlight Assembly and summarize the cheapest 10"
- "Chain Copart Scraper then Car-Part Scraper when I have a salvage lot year/make/model and need used engine and transmission prices"