Parking search is a real-time data problem. Users don't just want to know "a parking lot exists at address X" — they need to know "how many spots are free right now." Without up-to-date data, the app is useless: the driver arrives and sees "no spaces." That's why the first question in development is where the occupancy data comes from. In our practice, we've worked with various sources and guarantee timeliness through a combination of methods.
Parking Data Sources
Smart parking lots with sensors (ultrasonic, magnetic) transmit data via IoT gateways. Integration via REST API or MQTT. Data updates every 30-60 seconds. This is the best scenario — accuracy close to 100%. City APIs — many cities publish municipal parking data through open APIs. London, Berlin, Barcelona — ready feeds exist. Format is usually JSON REST or CSV. Crowdsourcing — users mark "occupied" / "freed spot." Accuracy is low (40-60%), suitable as a supplement. Data providers — ParkWhiz API, SpotHero API, Parkopedia — aggregators with US/Europe coverage. Paid but comprehensive.
| Source | Accuracy | Update | Cost |
|---|---|---|---|
| Smart parking (sensors) | ~98% | 30-60 s | IoT integration |
| City APIs | 70-90% | 1-5 min | Free/open |
| Crowdsourcing | 40-60% | Real time | Free (UGC) |
| Providers (ParkWhiz etc.) | 80-95% | 1-2 min | Paid APIs |
Architecture: a server aggregates data from all sources, normalizes into a unified model ParkingSpot { id, lat, lng, capacity, available, price, type, schedule }, and the client receives it via REST or WebSocket.
How to implement an occupancy map?
Markers on the map show occupancy by color: green (>50% free), yellow (20-50%), red (<20%), gray (no data). Google Maps SDK GMSMarker with custom iconView or Mapbox SymbolLayer with data-driven styling — marker color from the available_percent field in GeoJSON. Mapbox with data-driven styling handles up to 10,000 points without lag, whereas Google Maps already stutters noticeably at 5,000 — Mapbox is 2x more performant on large datasets. Real-time sensor data is 10 times more accurate than crowd-sourcing but requires IoT integration.
Clustering at low zoom: the cluster shows the total number of free spots from all parking lots inside. DefaultClusterRenderer (Google Maps Utility) is overridden for custom display. On approaching a parking lot (tap on marker) — a bottom sheet shows details: access diagram, hourly prices, opening hours, entrance photo.
Address search with route building
The user enters a destination address → the app shows parking lots within 300-500 meters, sorted by distance + availability. "Route" button → route to the selected parking lot via Google Maps SDK openWithBundleId deep link or in-app navigation via Mapbox.
What about booking and payment?
Pre-booking — reserving a spot for a specific time. Not all parking lots support it; it depends on having a barrier with remote control. Booking form: entry/exit date/time, server-side cost calculation. Payment via Stripe, YooKassa, Apple Pay / Google Pay. After payment — confirmation with QR code for entry or PIN for the barrier. For parking lots without automatic barriers — pay-by-phone via the app. Push notification 15 minutes before paid time expires, with an option to extend directly from the notification (UNNotificationAction).
Additional features
Recently visited parking lots — automatically from order history. Favorites — manual addition. Synced via backend, available on all user devices. Notification "your favorite parking lot near the office is free" — geofence + monitoring available > 0 via WebSocket. The user subscribes to a specific parking lot. Indoor navigation for large shopping centers: photo of the parking layout with description "entrance from the mall, floor -2, sector C." A more advanced option is WiFi fingerprinting or BLE beacons.
More about geofence notifications
A geofence is a virtual perimeter around a selected parking lot. When the user enters the 500 m zone, the app checks spot availability via WebSocket and sends a push if a spot frees up. This works only with active internet and GPS enabled.
Process and timeline
- Requirements analysis and UX/UI prototype (1-2 weeks)
- Backend development (data aggregation, WebSocket) (2-3 weeks)
- iOS and Android apps on SwiftUI/Jetpack Compose (3-5 weeks)
- Integration with parking APIs (1-2 weeks)
- Payment integration (1 week)
- Testing and release on App Store and Google Play (1-2 weeks)
- Documentation and 3 months of warranty support
Development timeline: from 8 to 14 weeks. Cost is calculated individually based on functionality and integrations. Our experience: 5+ years in mobile development, 20+ parking projects in Europe and CIS. We guarantee data timeliness and stable operation under load. Get a consultation for your project — we will estimate timeline and budget within 2 days.







