BestParking APIbestparking.com ↗
Search parking lots by coordinates, get lot details with pricing quotes, autocomplete locations, and retrieve supported cities via the BestParking API.
What is the BestParking API?
The BestParking API exposes 4 endpoints covering parking search, lot details, location autocomplete, and city coverage for the BestParking.com platform (powered by ParkWhiz). The search_parking endpoint accepts a lat/lng pair and optional ISO 8601 time window to return per-lot pricing, availability, and curated picks for the cheapest and closest options. Results include bookable quotes for both transient (hourly/daily) and monthly parking.
curl -X GET 'https://api.parse.bot/scraper/67c0c881-f6f9-4f3d-b4b9-4b26be95160e/search_parking?lat=40.7128&lng=-74.006&end_time=2026-07-12T12%3A00%3A00&start_time=2026-07-12T10%3A00%3A00&search_type=transient' \ -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 bestparking-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.
"""BestParking SDK — find and compare parking near any location."""
from parse_apis.bestparking_api import BestParking, SearchType, LocationNotFound
client = BestParking()
# List supported cities — static reference data.
for city in client.cities.list(limit=5):
print(city.name, city.slug, city.lat, city.lng)
# Search parking near NYC (transient/hourly).
quote = client.locations.search(
lat=40.7128, lng=-74.006, search_type=SearchType.TRANSIENT, limit=1
).first()
if quote:
print(quote.location_id, quote.type, quote.distance.meters)
# Autocomplete a venue search.
results = client.autocompletes.search(query="Chicago")
for suggestion in results.suggestions[:3]:
print(suggestion.full_name, suggestion.result_type, suggestion.country)
for event in results.events[:2]:
print(event.name, event.start_time, event.venue_name)
# Handle errors gracefully when searching.
try:
for q in client.locations.search(lat=0.0, lng=0.0, limit=3):
print(q.location_id, q.type)
except LocationNotFound as exc:
print(f"Location not found: {exc.location_id}")
print("exercised: cities.list / locations.search / autocompletes.search")
Search for parking locations (hourly or monthly) near a specific coordinate. Returns detailed pricing, availability, and curated recommendations (cheapest, closest). When start_time and end_time are omitted, defaults to a 2-hour window starting now. Each result includes full location info, pricing segments, amenities, and booking options.
| Param | Type | Description |
|---|---|---|
| latrequired | number | Latitude of the search center. |
| lngrequired | number | Longitude of the search center. |
| end_time | string | End time for the parking quote in ISO 8601 format (e.g. 2026-06-12T12:00:00). Defaults to 2 hours after start_time if omitted. |
| start_time | string | Start time for the parking quote in ISO 8601 format (e.g. 2026-06-12T10:00:00). Defaults to current hour if omitted. |
| search_type | string | Type of search: 'transient' (hourly/daily) or 'monthly'. |
{
"type": "object",
"fields": {
"data": "array of parking location quotes with pricing and availability",
"curated_data": "object containing cheapest and closest recommendations"
},
"sample": {
"data": {
"data": [
{
"type": "offstreet",
"distance": {
"straight_line": {
"feet": 518,
"meters": 157
}
},
"_embedded": {
"pw:location": {
"id": "56108",
"city": "New York",
"name": "150 Nassau St. Garage",
"state": "NY",
"address1": "150 Nassau St.",
"rating_summary": {
"rating_count": 1,
"average_rating": 2
}
}
},
"location_id": "56108",
"purchase_options": [
{
"price": {
"USD": "60.99"
},
"amenities": [
{
"key": "attended",
"name": "Attended"
},
{
"key": "indoor",
"name": "Covered"
}
],
"space_availability": {
"status": "available"
}
}
]
}
],
"curated_data": {
"closest": {
"type": "offstreet",
"distance": {
"straight_line": {
"feet": 518,
"meters": 157
}
},
"location_id": "56108"
},
"cheapest": {
"type": "offstreet",
"distance": {
"straight_line": {
"feet": 3500,
"meters": 1066
}
},
"_embedded": {
"pw:location": {
"id": "5147",
"city": "New York",
"name": "Impark - 55 Water St. Garage",
"state": "NY",
"address1": "41 Old Slip"
}
},
"location_id": "5147",
"purchase_options": [
{
"price": {
"USD": "19.22"
},
"space_availability": {
"status": "available"
}
}
]
}
}
},
"status": "success"
}
}About the BestParking API
Search and Pricing
The search_parking endpoint is the core of the API. Pass lat, lng, and optionally start_time and end_time in ISO 8601 format to receive an array of nearby parking locations in data, each with pricing and availability for the requested window. If times are omitted, the endpoint defaults to a 2-hour window starting at the current hour. The curated_data object in the response breaks out the cheapest and closest recommendations so you don't need to sort client-side. Set search_type to 'transient' for hourly/daily results or 'monthly' for monthly parking quotes.
Lot Details
get_parking_lot_details takes a location_id (returned by search_parking) and optional start_time/end_time parameters. With times, it returns purchase_options — an array of bookable pricing options for that window. Without times, it returns static location metadata from _embedded.pw:location: name, address, city, description, rating summary, and hours of operation. The time range should match the lot's pricing type (short-term or monthly) to get relevant quotes.
Autocomplete and City Coverage
autocomplete_locations accepts a free-text query and returns two arrays: autocomplete (location suggestions with id, full_name, address, and coordinates) and events (upcoming events near matching venues, each with name, start_time, end_time, and venue info). This makes it straightforward to resolve a user-typed string to a location_id or a lat/lng pair before calling search_parking.
get_supported_cities takes no inputs and returns a cities array where each object contains name, slug, lat, and lng. Use this to build city-picker UIs or to seed coordinate-based searches without a geocoder.
The BestParking API is a managed, monitored endpoint for bestparking.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bestparking.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 bestparking.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?+
- Find the cheapest parking near a venue by passing event coordinates to
search_parkingand readingcurated_data.cheapest. - Display real-time parking prices for a neighborhood map by querying
search_parkingwith a center coordinate and a specific time window. - Resolve a user-typed address or landmark to parking options by chaining
autocomplete_locationsintosearch_parking. - Show full lot details — hours, ratings, and bookable options — by calling
get_parking_lot_detailswith alocation_idfrom search results. - Build a monthly parking finder for commuters by passing
search_type: 'monthly'tosearch_parking. - Populate a city selector for a parking app using the
name,slug,lat, andlngfields fromget_supported_cities. - Surface upcoming events near a searched location alongside parking suggestions using the
eventsarray fromautocomplete_locations.
| 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.
Does BestParking have an official public developer API?+
What does `search_parking` return beyond a list of lots?+
data array of lot quotes — each with pricing and availability — the response includes a curated_data object that pre-selects the cheapest and closest options for the searched coordinates and time window. This saves a client-side sort for common UI patterns.Does `get_parking_lot_details` always return pricing?+
start_time and end_time are provided. Without a time range, the endpoint returns static location metadata (name, address, city, description, rating_summary, hours) but the purchase_options array will be absent or empty. Supply times that match the lot's pricing type — transient or monthly — to get bookable quote data.Does the API cover parking availability for airports or specific garages outside supported cities?+
get_supported_cities, and lot results are tied to the BestParking/ParkWhiz inventory for those areas. Garages or regions not in that inventory will not appear in search_parking results. You can fork this API on Parse and revise it to add endpoints targeting additional regions or data sources.