PCARMARKET APIpcarmarket.com ↗
Access live and completed PCARMARKET auction data: current bids, vehicle specs, seller info, gallery images, and sale outcomes via 3 structured endpoints.
What is the PCARMARKET API?
The PCARMARKET API exposes 3 endpoints covering live auction listings, full vehicle detail, and completed auction results from pcarmarket.com. The get_listing_details endpoint returns over a dozen fields per listing including VIN, make, model, year, engine description, seller username, and a full photo gallery. The get_auction_results endpoint lets you page through sold and unsold lots with final bids and sale outcomes.
curl -X GET 'https://api.parse.bot/scraper/51db8df3-8aae-4da7-9648-d52f42278f47/list_live_auctions?page=2&limit=3' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace pcarmarket-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: PCARMARKET SDK — browse live auctions, drill into details, and review past results."""
from parse_apis.pcarmarket_com_api import PcarMarket, ResultType, InputNotFound
client = PcarMarket()
# Browse the first few live auctions ending soonest.
for auction in client.listing_summaries.list(limit=5):
print(auction.title, f"${auction.high_bid or 0:,.0f}", auction.reserve_status)
# Drill down: take the first listing summary and fetch its full detail.
summary = client.listing_summaries.list(limit=1).first()
if summary is not None:
detail = summary.details()
print(detail.title)
print(f" Year/Make/Model: {detail.year} {detail.make} {detail.model}")
print(f" VIN: {detail.vin}")
print(f" Mileage: {detail.mileage} {detail.odometer_unit}")
print(f" Transmission: {detail.transmission_detail}")
print(f" Exterior: {detail.exterior_color} Interior: {detail.interior_color}")
print(f" Seller: {detail.seller} ({detail.seller_type}), {detail.location}")
print(f" Bids: {detail.bid_count} Current: {detail.current_bid}")
print(f" Images: {detail.image_count}")
# Point lookup by slug derived from a previous result.
if summary is not None:
try:
listing = client.listings.get(slug=summary.slug)
print(listing.title, listing.listing_url)
except InputNotFound:
print("Listing no longer available")
# Page through recent sold auction results.
for result in client.auction_results.list(result_type=ResultType.SOLD, limit=3):
sold_label = f"${result.sold_price:,}" if result.sold_price else "unsold"
print(result.title, sold_label, result.end_date)
print("exercised: listing_summaries.list / details / listings.get / auction_results.list")
Returns one page of currently live (active) auctions on PCARMARKET, ordered by ending soonest, together with the total number of live auctions and whether more pages exist. Each item is a listing summary: title, current bid (formatted string and numeric high bid), bid count, hero image URL, listing page URL, year/make/model when the lot is a vehicle (non-vehicle lots such as watches or signs return null for those), mileage, seller ZIP/country and the auction start/end timestamps. Pagination is caller-driven via page and limit: omitting page returns the first page, omitting limit returns 24 items; limit is clamped to 100. Requesting a page past the last one yields a not-found input error. One upstream request per call.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number of the ending-soonest ordering. |
| limit | integer | Number of auctions per page; values above 100 are clamped to 100. |
{
"type": "object",
"fields": {
"page": "page number served",
"limit": "page size applied after clamping",
"total": "total number of live auctions across all pages",
"auctions": "array of listing summaries; each has listing_id, slug (pass to get_listing_details), title, listing_url, hero_image_url, current_bid (formatted, null when no bids), high_bid (number, null when no bids), bid_count, reserve_status, year/make/model (null for non-vehicle lots), mileage, odometer_unit, location_zip, country, status, start_date, end_date (ISO-8601 with offset), time_remaining_seconds",
"has_more": "true when a following page exists"
},
"sample": {
"data": {
"page": 1,
"limit": 3,
"total": 55,
"auctions": [
{
"make": "Porsche",
"slug": "2009-porsche-911-carrera-cabriolet-8",
"year": 2009,
"model": "911 Carrera Cabriolet",
"title": "44k-Mile 2009 Porsche 997.2 Carrera Cabriolet",
"status": "Active",
"country": "United States of America",
"mileage": 44000,
"end_date": "2026-09-08T14:30:00-04:00",
"high_bid": 9002,
"bid_count": 1,
"listing_id": 67463,
"start_date": "2026-08-31T13:39:36-04:00",
"current_bid": "$9,002",
"listing_url": "https://www.pcarmarket.com/auction/2009-porsche-911-carrera-cabriolet-8",
"location_zip": "20109",
"odometer_unit": "mi",
"hero_image_url": "https://d2niwqq19lf86s.cloudfront.net/htwritable/media/.thumbnails/ee0e7b75-a531-4828-9651-faba371e28ae-IMG_0591.webp/ee0e7b75-a531-4828-9651-faba371e28ae-IMG_0591-tiny-810x0.webp",
"reserve_status": "unmet",
"time_remaining_seconds": 177885
}
],
"has_more": true
},
"status": "success"
}
}About the PCARMARKET API
Live Auctions
The list_live_auctions endpoint returns a paginated feed of currently active auctions, ordered by soonest-ending. Each summary includes listing_id, slug, title, listing_url, hero_image_url, current bid as both a formatted string and a raw numeric current_bid, bid count, and end time. The page and limit parameters control pagination; limit is clamped at 100. The response also surfaces total (count of all live lots) and has_more so you can walk every active listing.
Listing Detail
Pass any slug from the live auctions feed — or the trailing path segment of any listing URL — to get_listing_details. The response covers vehicle identity fields (vin, make, model, year), engine (extracted from the listing write-up, may be null for some lots), seller username, country, auction status, and a full image gallery alongside the hero image and opening paragraph. Non-vehicle lots return null for the vehicle-specific fields.
Completed Auction Results
The get_auction_results endpoint returns completed lots in fixed pages of 36, most recently ended first. The result_type parameter filters between sold lots (default) and unsold lots whose reserve was not met. Each result item includes slug, url, final bid amount, and sale outcome. The response envelope exposes items_total and pages_total so you can determine the full scope of historical results before paginating.
The PCARMARKET API is a managed, monitored endpoint for pcarmarket.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pcarmarket.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official pcarmarket.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track real-time bidding activity on Porsche auctions by polling
list_live_auctionsfor current bid and bid count changes - Build a sold-prices database for specific makes and models using
get_auction_resultswith the soldresult_typefilter - Identify reserve-not-met lots by querying
get_auction_resultswith the unsold filter and comparing final bids - Enrich vehicle records with VIN, engine description, and seller country from
get_listing_details - Monitor gallery image assets per listing to populate a vehicle media archive using the photo gallery returned by
get_listing_details - Aggregate auction close times from live listing end times to analyze when PCARMARKET lots typically expire
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does PCARMARKET have an official developer API?+
What does `get_auction_results` return for unsold lots, and how do I request them?+
result_type parameter to the unsold value to retrieve lots whose reserve was not met. Each result item includes the final bid reached and the sale outcome alongside the slug and listing URL. Sold lots are the default when result_type is omitted.Does the API expose the full auction write-up or description text?+
get_listing_details endpoint returns an opening paragraph from the listing and a best-effort engine field extracted from the write-up. The complete long-form description body is not currently a distinct response field. You can fork this API on Parse and revise it to extract and return the full description text.Can I filter live auctions by make, model, or price range?+
list_live_auctions endpoint returns all active lots ordered by end time and does not currently accept make, model, or bid-range filter parameters. You can fork this API on Parse and revise it to add filtering logic over the returned fields.