Finding specific OEM replacement parts at self-service salvage yards usually involves manual website searches or physically walking rows of junked cars. For independent repair shops, fleet maintainers, and part flippers, this manual process causes missed inventory when a matching donor vehicle lands at a yard miles away.
Row52 centralizes inventory data for Pick-n-Pull and other participating self-service yards across the United States and Canada. The Row52 Junkyard & Salvage Yard Parts Scraper queries this live network directly. Instead of clicking through form fields, you can programmatically fetch yard locations, track newly dropped vehicles, search by 17-character VIN, or query across specific model-year ranges.
Selecting Search Modes and Filtering Criteria
The actor uses the mode parameter to define the scope of the request. The available modes are search, byVin, byYard, and listYards.
To search for donor vehicles using year ranges and geographic constraints, set mode to "search". For example, searching for Ford F-150s from model years 2010 through 2018 within a specific geographical radius relies on yearMin, yearMax, make, model, zipCode, and radius.
{
"mode": "search",
"make": "Ford",
"model": "F-150",
"yearMin": 2010,
"yearMax": 2018,
"zipCode": "95814",
"radius": "50",
"maxItems": 50
}
When specifying model years, setting year overrides both yearMin and yearMax. The radius options are strict discrete strings matching Row52's native boundaries: "10", "25", "50", "100", "250", or "500".
If you need to pull every available location in a given region to map out scrape targets, switch to listYards mode:
{
"mode": "listYards",
"state": "California"
}
This returns yard records containing numeric yardId values, operational statuses (isActive, allowPullers), store addresses, and published parts pricing links (partsPricingUrl).
Vehicle Output Schema and Partial Records
When querying in search, byVin, or byYard modes, the actor yields flat vehicle records containing yard assignment detail down to the specific aisle or row when reported.
{
"recordType": "vehicle",
"vehicleId": "123456",
"vin": "2HGFB2F9XFH550172",
"year": 2015,
"make": "Honda",
"model": "Civic",
"color": "Gray",
"row": "042",
"barCodeNumber": "992104",
"dateAdded": "2026-03-28",
"yardId": 42,
"yardName": "Sacramento",
"yardCity": "Sacramento",
"yardState": "CA",
"yardZip": "95828",
"distanceMiles": 8.4,
"scrapedAt": "2026-03-30T14:20:00.000Z"
}
The scraper omits empty fields entirely. If a yard operator logs a vehicle without noting the engine, transmission, trim, or color, those keys will not be present in the returned JSON object rather than appearing as null or empty strings.
Running the Scraper with Python
You can execute searches programmatically using the apify-client Python SDK. The code below initializes a search for 2015 Honda Civics within 50 miles of a specified postal code, sorted by the date the vehicle was placed in the yard.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"mode": "search",
"year": 2015,
"make": "Honda",
"model": "Civic",
"zipCode": "95814",
"radius": "50",
"sortBy": "dateAdded",
"sortOrder": "desc",
"maxItems": 20
}
run = client.actor("crawlerbros/row52-junkyard-parts-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
yard_name = item.get("yardName", "Unknown Yard")
row = item.get("row", "N/A")
date_added = item.get("dateAdded", "Unknown Date")
print(f"Found {item['year']} {item['make']} {item['model']} - Row: {row} at {yard_name} (Added: {date_added})")
How to Set Up an Automated Inventory Run
-
Locate Target Yards: Run the actor in
listYardsmode with your target state or province populated in thestatefield to collect localyardIdvalues or verify participating coverage. -
Configure Search Boundaries: Select your operational
mode(search,byVin, orbyYard). SetzipCodeandradiusif geographic proximity is required. -
Apply Model Filters: Pass exact string values for
makeandmodel. If targeting a generation span instead of a single year, pass integer bounds toyearMinandyearMax. -
Set Sorting and Capping: Set
sortBytodateAddedandsortOrdertodescto process fresh arrivals first. SetmaxItemsto restrict dataset payload size. -
Execute and Parse: Trigger the run via SDK, API, or platform schedule, then iterate through the output dataset items, handling optional keys safely using standard lookup methods like Python's
.get().
Event Pricing and Platform Billing Breakdown
This actor operates on a pay-per-event pricing structure. Every emitted record and actor execution triggers event charges billed at fixed rates:
- Actor Start Charge: $0.005 per GB of memory allocated to the run upon initialization.
- Dataset Results: $0.005 per event emitted to the default dataset on the standard FREE tier. On Apify tier levels, this event rate drops to $0.00433 on BRONZE, $0.00367 on SILVER, and $0.003 on GOLD, PLATINUM, and DIAMOND tiers.
Platform usage for the run is billed separately at your Apify plan's rates.
Architectural Limitations
This tool relies directly on the data reported by participating yard locations. It does not track actual real-time part availability on a specific chassis. If a vehicle is listed as present on row 42, the scraper confirms the vehicle was processed and placed in that aisle, but it cannot confirm whether another customer has already pulled the specific alternator, door panel, or transmission you are looking for.
Source for the runs in this article: Row52 Junkyard & Salvage Yard Parts Scraper. The input schema there is authoritative; treat anything in this post that contradicts it as out of date.
Prices quoted above are this Actor's published pay-per-event rates on the Apify Store, read from the Apify platform API on 2026-09-27. Check the Actor page for the current rates.
Top comments (0)