Porsche APIfinder.porsche.com ↗
Search Porsche dealer listings, retrieve full specs, equipment lists, pricing, and Carfax history links via the Porsche Finder API.
What is the Porsche API?
The Porsche Finder API provides 4 endpoints covering dealer inventory from finder.porsche.com, including vehicle search, full listing details, filter hit counts, and Carfax history report links. The search_listings endpoint returns paginated summaries with price, mileage, color, transmission, seller info, and image URLs, while get_listing_detail exposes VIN, equipment categories, gallery images, warranty data, and technical specifications for any individual listing.
curl -X GET 'https://api.parse.bot/scraper/e980225b-a3e4-4a14-a553-9cee1d8bfa1b/search_listings?lat=40.7128&lng=-74.0060&model=911&radius=100&location=New+York&condition=new' \ -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 finder-porsche-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.
"""Porsche Finder SDK — search vehicles, drill into details, check history."""
from parse_apis.porsche_finder_api import PorscheFinder, Condition, Model, ListingNotFound
client = PorscheFinder()
# Search for preowned 911s near New York, capped at 5 results.
for listing in client.listingsummaries.search(
model=Model._911, condition=Condition.PREOWNED, location="New York", limit=5
):
print(listing.title, listing.price, listing.color, listing.seller.formatted_city)
# Drill into the first result's full details (technical specs, equipment, gallery).
summary = client.listingsummaries.search(model=Model._911, limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.vin, detail.stock_number)
for section in detail.technical_data:
print(section.name, [(item.label, item.value) for item in section.items[:2]])
for opt in detail.equipment.important:
print(opt.label)
# Get vehicle history report for the listing.
if summary:
try:
report = summary.history_report()
print(report.listing_id, report.report_url)
except ListingNotFound as exc:
print(f"listing gone: {exc.listing_slug}")
# Check available filter options for Cayenne models.
filters = client.filterresults.get(model=Model.CAYENNE, location="Los Angeles")
for opt in filters.hitcounts.get("condition", []):
print(opt.key, opt.value)
print("exercised: listingsummaries.search / details / history_report / filterresults.get")
Search for Porsche vehicles by model, category, location, and other filters. Returns paginated listing summaries with pricing, mileage, color, drivetrain, seller info, and images. Each result includes a listing_url_slug for drilling into full details via get_listing_detail. Paginates server-side but the current implementation returns a single page of results per request.
| Param | Type | Description |
|---|---|---|
| lat | string | Latitude of search center in decimal degrees. |
| lng | string | Longitude of search center in decimal degrees. |
| sort | string | Sort order for results. Empty string uses default relevance sorting. |
| model | string | Model series to search within. Accepted values include '911', '718', 'cayenne', 'taycan', 'macan', 'panamera'. |
| radius | string | Search radius in miles from the search center. |
| category | string | Model category slug to narrow results within a model series (e.g., '911-gt3', '911-turbo-s-coupe', '911-carrera-gts-coupe'). Empty string returns all categories. |
| location | string | Location name used as the search center for geographic filtering. |
| condition | string | Vehicle condition filter. Accepted values: 'preowned', 'new', or empty string for all conditions. |
{
"type": "object",
"fields": {
"total": "integer - number of listings on this page",
"listings": "array of listing summary objects with id, listing_url_slug, title, model, price, mileage, color, transmission, seller, images",
"active_page": "integer - current page number",
"total_pages": "integer - total pages available"
}
}About the Porsche API
Search and Filter Inventory
The search_listings endpoint accepts geographic inputs (lat, lng, radius, location) alongside model filters (model, category, condition) to return paginated Porsche dealer listings. Each item in the listings array includes a listing_url_slug needed for drilling into full detail. The model parameter accepts values like 911, taycan, cayenne, or macan; the category parameter narrows further to sub-models such as 911-gt3 or 911-turbo-s-coupe. Pagination is tracked via active_page and total_pages.
Full Listing Detail and Equipment
get_listing_detail takes a listing_slug (e.g., porsche-911-turbo-s-my23-preowned-7078KL) and returns a detailed record including vin, price, color, model generation code, and a seller object with dealer name and address. The equipment field is organized into important, special, and standard categories with descriptions. The gallery object includes an image count and categorized image list. A warranty object covers warranty type, duration, and description.
Filter Counts for UI Building
get_filter_counts returns available filter options and their hit counts for a given search configuration — including bodyType, condition, drivetrain, transmission, exteriorColorGroups, interiorColorGroups, modelCategory, and modelGeneration. This endpoint is useful for building dynamic filter interfaces that reflect what inventory actually exists for a given model and location.
Vehicle History
get_vehicle_history_report accepts a listing_id and returns a report_url pointing to the Carfax page for that vehicle. New vehicles without history return null for report_url. The listing ID is surfaced in search_listings results as the id field.
The Porsche API is a managed, monitored endpoint for finder.porsche.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when finder.porsche.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 finder.porsche.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?+
- Build a Porsche inventory aggregator filtered by model category (e.g., 911-gt3) and geographic radius
- Display detailed spec sheets for individual listings using VIN, equipment lists, and technical data from get_listing_detail
- Power a dynamic filter UI using hit counts from get_filter_counts for drivetrain, color, and transmission options
- Attach Carfax history report links to pre-owned listing pages using get_vehicle_history_report
- Track pre-owned 911 pricing across dealer locations by combining search_listings with lat/lng and condition filters
- Compare standard vs. special equipment across multiple Taycan or Macan listings using the equipment object
- Identify dealer inventory density by region using seller city and postal_code fields from listing results
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.