SpotHero Monthly Parking Search API
Find monthly parking near a point from a start date, with the same facility details and the monthly price.
- 1 credit per call
- Failed calls are free
- Updated
- spothero.monthly-parking.search
{ "search_type": "monthly", "facilities": [ { "title": "35 S Dearborn St. (30 W Monroe St.) - Garage", "address": "35 South Dearborn Street", "available": true, "base_price": 525, "facility_id": 10369, "facility_type": "garage", "lat": 41.881422, "lon": -87.629297, "navigation_tip": "Enter this location at 35 S Dearborn St. This is the entrance address for the 30 W Monroe St. garage, operated by LAZ Parking. It is locate…", "operator": "LAZ Parking", "rating_average": 4.6, "rating_count": 3435, "total_price": 540.75, "walking_meters": 204 }, { "title": "10 S Wells St. - Poetry Garage", "address": "10 South Wells Street", "available": true, "base_price": 75, "facility_id": 4436, "facility_type": "garage", "lat": 41.8815649758, "lon": -87.6339424233, "navigation_tip": "Enter this location at 10 S Wells St. This is the Poetry Garage, operated by SP+. It is located on the west/right-hand side of S Wells St. …", "rating_average": 4.8, "rating_count": 11768, "total_price": 77.25, "walking_meters": 287 } ]}
| # | Facility | Address | Total price | Base price | Available | Walk (m) | Rating | Operator | Type | Facility ID |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 35 S Dearborn St. (30 W Monroe St.) - Garage | 35 South Dearborn Street | 540.75 | 525 | true | 204 | 4.6 | LAZ Parking | garage | 10369 |
| 2 | 10 S Wells St. - Poetry Garage | 10 South Wells Street | 77.25 | 75 | true | 287 | 4.8 | garage | 4436 | |
| 3 | 22 W Monroe St. - Hampton Inn Majestic Valet Stand | 22 West Monroe Street | 391.4 | 380 | true | 314 | 4.3 | LAZ Parking | valet_stand | 152959 |
| 4 | 181 N Clark St - Government Center (Monthly) | 181 North Clark Street | 139.05 | 135 | true | 384 | 5 | InterPark Parking | garage | 9001 |
| 5 | 217 W Washington Street - Washington-Wells (Monthly) | 217 West Washington Street | 355.35 | 345 | true | 442 | 4.9 | InterPark Parking | garage | 8999 |
| 6 | 110 W Lake St. (200 N Clark) (Monthly) | 110 West Lake Street | 154.5 | 150 | true | 474 | 5 | InterPark Parking | garage | 38199 |
| 7 | 1 S Lower Wacker Dr. | 484.1 | 470 | true | 491 | 4 | ABM Parking | garage | 776 | |
| 8 | 224 N Clark St. - One Eleven Wacker Garage | 224 North Clark Street | 329.6 | 320 | true | 495 | 4.3 | SP+ Parking | garage | 9041 |
| 9 | 230 W Washington St - Washington-Franklin (Monthly) | 230 West Washington Street | 164.8 | 160 | true | 545 | InterPark Parking | garage | 9042 | |
| 10 | 44 W Marble Place (33 W Monroe) | 437.75 | 425 | true | 283 | 4.6 | LAZ Parking | garage | 636 |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| latitude | number | yes | The destination's latitude. | 41.881943 |
| longitude | number | yes | The destination's longitude. | -87.630976 |
| starts | string | yes | When the monthly parking starts. | 2026-10-10T16:00:00-05:00 |
| cursor | string | no | Pass next_cursor from the last response to get the next page. | |
| limit | integer | no | How many facilities to return. | |
| max_distance_meters | integer | no | How far from the point to look, in metres. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| facilities[].title | string | The name as SpotHero shows it. | 35 S Dearborn St. (30 W Monroe St.) - Garage |
| facilities[].address | string | The parking facility's street address. | 35 South Dearborn Street |
| facilities[].total_price | number | The price with fees. | 540.75 |
| facilities[].base_price | integer | The price before fees. | 525 |
| facilities[].available | boolean | Whether a space can be booked for the time asked. | true |
| facilities[].walking_meters | integer | The walk from the facility to the destination, in metres. | 204 |
| facilities[].rating_average | number | The facility's average star rating. | 4.6 |
| facilities[].operator | string | The company that runs the facility. | LAZ Parking |
| facilities[].facility_type | string | The kind of facility, such as a lot or garage. | garage |
| facilities[].facility_id | integer | SpotHero's ID for the facility. | 10,369 |
| facilities[].lat | number | The facility's latitude. | 41.88 |
| facilities[].lon | number | The facility's longitude. | -87.63 |
| facilities[].navigation_tip | string | The facility's directions for drivers. | Enter this location at 35 S Dearborn St. This is the entrance a… |
| facilities[].rating_count | integer | How many ratings the facility has. | 3435 |
| facilities | array | The parking facilities. | 20 records |
| search_type | string | Whether hourly or monthly parking was searched. | monthly |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "spothero.monthly-parking.search", "input": { "latitude": 41.881943, "longitude": -87.630976, "starts": "2026-10-10T16:00:00-05:00" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "spothero.monthly-parking.search", "input": { "latitude": 41.881943, "longitude": -87.630976, "starts": "2026-10-10T16:00:00-05:00" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "spothero.monthly-parking.search", "input": { "latitude": 41.881943, "longitude": -87.630976, "starts": "2026-10-10T16:00:00-05:00" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, list monthly parking on SpotHero near 41.881943, -87.630976 starting next month, and show the five cheapest garages within a five-minute walk.
More from the SpotHero API
The same data from other platforms
SpotHero Monthly Parking Search API FAQ
The short answers. The docs have the long ones.
How much does the SpotHero Monthly Parking Search API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send latitude, longitude and starts. The input fields below list every option with its type and limits.
Do I need a SpotHero login?
No. It reads public SpotHero data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds spothero.monthly-parking.search, checks its price and runs it with the same credits as the REST API.
Your first SpotHero call is free.
Up to 100 free credits to start, no card needed.