Tracking used car market pricing across national retail chains presents a specific technical challenge: inventory aggregator pages frequently cap the number of items returned per distinct query context. CarMax renders a single results page per search, manufacturer, or store location combination. A query for popular inventory categories without granular parameters hits this display wall immediately, truncation hiding hundreds of matching vehicles.
Programmatic data collection requires working within these single-page inventory windows. The carmax-scraper actor accesses CarMax inventory endpoints directly without requiring headful browser execution, session cookies, or platform logins. To extract complete datasets, engineers must structure their input configurations around CarMax's query boundaries using explicit filtering parameters.
Single-Page Render Boundaries on CarMax Inventory Pages
CarMax returns up to 24 vehicles on a rendered results page for a given query payload. Running a broad execution with only a search string like toyota or a manufacturer selection like Toyota drops any matching records beyond that page limit.
To systematically capture inventory without losing records to this cap, data pipelines must divide target vehicle pools into narrow search slices. The actor provides specific input parameters to control query scope:
-
mode: Controls query type, accepting either"search"for string matching or"byMake"for targeted manufacturer filtering. -
makeandmodel: Restricts"byMake"operations to specific vehicle brands (such as"Honda","Ford", or"Toyota") and specific model names (such as"Civic"or"Camry"). -
zipCode: Centers inventory queries around a specific local CarMax store location. -
minPrice/maxPrice: Restricts listings to a targeted price bracket in USD. -
minYear/maxYear: Filters results to specific model-year ranges. -
maxMileage: Drops any vehicle exceeding the designated mileage value. -
maxItems: Sets an explicit limit on records emitted to the dataset during a execution (defaulting to 24).
When extracting data across a large national brand, relying on a single top-level search query drops the majority of available cars. Implementing narrow price steps (for example, setting minPrice: 15000 and maxPrice: 18000) or combining make and model with a localized zipCode keeps result sets under the single-page cap, allowing full extraction across sequential runs.
Structured Output Schema for Downstream Pipelines
The actor normalizes raw responses into a consistent record structure. Missing fields are omitted entirely rather than populated with null or placeholder strings, keeping dataset payloads lean for downstream analysis.
Each vehicle object emitted to the dataset includes the following data fields:
{
"vehicleId": "25814920",
"vin": "14123456789012345",
"make": "Toyota",
"model": "Camry",
"year": 2021,
"trim": "SE",
"price": 22998,
"mileage": 34120,
"exteriorColor": "Gray",
"interiorColor": "Black",
"transmission": "Automatic",
"fuelType": "Gasoline",
"driveTrain": "Front Wheel Drive",
"bodyType": "Sedan",
"horsepower": "203",
"mpgCity": 28,
"mpgHighway": 39,
"location": "Austin, TX",
"storeName": "Austin South",
"features": [
"Rear View Camera",
"Cruise Control",
"Auxiliary Audio Input"
],
"imageUrl": "https://img2.carmax.com/img/vehicles/25814920/1.jpg",
"vehicleUrl": "https://www.carmax.com/car/25814920",
"isNewArrival": true,
"sourceUrl": "https://www.carmax.com/cars/toyota/camry",
"scrapedAt": "2024-10-24T12:00:00.000Z",
"recordType": "vehicle"
}
Key technical fields like vin, vehicleId, and scrapedAt allow pipelines to easily perform deduplication, change tracking, and temporal price monitoring in external relational or document databases.
Setting Up a Segmented Extraction Task
To run an extraction task that stays within CarMax result limits, structure the run input as JSON targeting a specific parameter slice.
Step 1: Define Target Parameters
Select whether to search by keyword or manufacturer, and assign constraints that keep the result count under 24 items.
{
"mode": "byMake",
"make": "Honda",
"model": "Civic",
"zipCode": "78744",
"minYear": 2020,
"maxYear": 2022,
"maxPrice": 25000,
"maxMileage": 45000,
"maxItems": 24
}
Step 2: Execute the Actor Programmatically
Initialize the run via the Apify Python SDK, passing the structured input configuration.
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_KEY")
run_input = {
"mode": "search",
"searchQuery": "electric suv",
"minYear": 2021,
"maxPrice": 40000,
"maxItems": 24
}
run = client.actor("crawlerbros/carmax-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item.get('year')} {item.get('make')} {item.get('model')} - ${item.get('price')} ({item.get('vin')})")
Step 3: Consume and Save Emitted Records
Process dataset output directly from the default dataset into your analytical store or storage bucket.
Event Pricing and Platform Resource Costs
This actor uses a pay-per-event pricing model based on dataset writes and actor initialization.
- Actor Start Event: Charged at $0.005 per GB of memory allocated to the run upon execution start.
- Dataset Item Event: Each extracted listing saved to the default dataset costs $0.005 per event on the FREE tier. This event rate scales down across account discount tiers: BRONZE ($0.00433), SILVER ($0.00367), GOLD ($0.003), PLATINUM ($0.003), and DIAMOND ($0.003).
Platform usage for the run is billed separately at your Apify plan's rates.
Scope Limits and System Boundaries
This tool reads public page search results and does not automatically paginate or crawl deep listing catalogs beyond a single output set per execution. Pipelines requiring exhaustive nationwide database sweeps must handle parameter orchestration and iteration externally by invoking multiple targeted runs across distinct store ZIP codes, model tiers, or narrow price ranges.
Everything above runs on CarMax Used Car Listings Scraper. Start with a small input and a low result limit before you widen the run -- the output shape is easier to check that way.
Prices quoted above are this Actor's published pay-per-event rates on the Apify Store, read from the Apify platform API on 2026-10-05. Check the Actor page for the current rates.
Top comments (0)