Waze All-in-One API avatar

Waze All-in-One API

Pricing

from $4.68 / 1,000 real-time road alerts

Go to Apify Store
Waze All-in-One API

Waze All-in-One API

Standby REST API for Waze: real-time road events, live route calculation, place search, nearby POI, reverse geocoding, walking distance, batch ETA, and emergency/roadside-assistance contacts — via Waze's internal RT protocol. Confirmed working worldwide, not just one region. No API key needed.

Pricing

from $4.68 / 1,000 real-time road alerts

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

1

Monthly active users

7 days ago

Last modified

Share

What does Waze All-in-One API do?

Waze All-in-One API is a REST endpoint for Waze's live data — crowd-sourced road events, route calculation with real-time traffic, place search, nearby points of interest, reverse geocoding, logistics helpers (walking distance, batch ETA), and real local emergency/roadside-assistance contacts — from a single always-on API powered by Apify Standby.

It talks directly to the same protocol the official Waze Android app uses, using the real app's own message schema (field names and numbers are the real app's, not guesses). No Waze account, no API key, no scraping setup — call the endpoint, get JSON back. Each request mints its own short-lived anonymous session server-side; you never see or manage credentials.

Confirmed working worldwide — every endpoint below was tested live in Indonesia, the UK, the US, and Israel during development, not just one market.

Why use Waze All-in-One API?

  • Real crowd-sourced road events — closures, contraflow lanes, and hazards with geometry, the same data rendered as dashed lines and pins in the Waze app
  • Live route calculation — distance, ETA, live traffic comparison, and route-level warnings (tolls, permits, restricted lanes), the same engine behind the app's own navigation
  • Place search — the same location-biased venue lookup as the app's search bar
  • Nearby POI discovery — what's around a point, with real category tags, no text query needed
  • Reverse geocoding — turn any coordinate into a street address
  • Batch ETA — real-time ETA to many destinations in one request, for dispatch/delivery routing
  • Emergency & roadside assistance contacts — real local numbers (police/ambulance/fire, auto clubs, manufacturer roadside assistance), not templated
  • Global — not tied to one country's data
  • Always-on — Standby mode means no cold start, responds in milliseconds
  • No account needed — every request authenticates itself
  • Use cases: traffic monitoring dashboards, logistics/routing risk analysis, road-closure alerting, ETA estimation, delivery dispatch, urban mobility research, travel/safety apps

Endpoints

MethodPathDescription
GET/alertsReal-time road events (closures, contraflow, hazards) within a bounding box
GET/routeLive route calculation between two points — distance, ETA, traffic, warnings
GET/searchPlace/venue search, biased toward a location
GET/nearbyPoints of interest near a location, with real category tags
GET/reverse-geocodeTurn a coordinate into a street address
GET/walking-distanceWalking distance in meters between two points
GET/eta-batchLive ETA from one origin to many destinations in a single call
GET/sos-providersEmergency numbers and roadside-assistance contacts for a location

How to use Waze All-in-One API

  1. Open this Actor's Standby API URL (shown on the Actor's page, under the API tab).
  2. Call any endpoint — for example:
    curl "https://romy--waze-all-in-one-api.apify.actor/alerts?north=-6.15&south=-6.18&east=106.83&west=106.82"
    curl "https://romy--waze-all-in-one-api.apify.actor/route?from_lat=-6.1754&from_lon=106.827&to_lat=-6.1274&to_lon=106.6577"
    curl "https://romy--waze-all-in-one-api.apify.actor/search?query=SPBU&lat=-6.1754&lon=106.827"
    curl "https://romy--waze-all-in-one-api.apify.actor/nearby?lat=-6.175&lon=106.827"
    curl "https://romy--waze-all-in-one-api.apify.actor/reverse-geocode?lat=-6.1954&lon=106.8206"
    curl "https://romy--waze-all-in-one-api.apify.actor/walking-distance?from_lat=-6.1754&from_lon=106.827&to_lat=-6.178&to_lon=106.83"
    curl "https://romy--waze-all-in-one-api.apify.actor/eta-batch?from_lat=-6.1754&from_lon=106.827&to=-6.1274,106.6577&to=-6.1954,106.8206"
    curl "https://romy--waze-all-in-one-api.apify.actor/sos-providers?lat=40.7580&lon=-73.9855"
  3. Read the JSON response — no setup required.

Input

This Actor takes no run-input; it starts immediately in Standby mode. All parameters are passed per-request as HTTP query strings — see the endpoint table above and the OpenAPI schema (API tab on the Actor's page).

Output

Every response is returned directly over HTTP — this Actor does not write to an Apify dataset. Real responses (trimmed):

GET /alerts?north=-6.15&south=-6.18&east=106.83&west=106.82:

{
"success": true,
"events": [
{
"id": "750503858",
"version": 0,
"typeCode": 5,
"street": "Contra Flow Hayam Wuruk",
"city": "Jakarta Pusat",
"crossStreet": "Gajah Mada",
"points": [
{ "lon": 106.820862, "lat": -6.167265 },
{ "lon": 106.819936, "lat": -6.163168 }
],
"roadSegmentIds": ["516284383", "516266383"],
"raw": ["AddRoadInfo", "750503858", "0", "5", "0", "Contra Flow Hayam Wuruk", "Jakarta Pusat", "", "Gajah Mada", "F", "F", "0", "0", "2", "0", "-1", "T", "-1", "-1", "12", "-1", "F", "0", "0", "465", "", "1164106498", "1"]
}
]
}

GET /route?from_lat=-6.1754&from_lon=106.827&to_lat=-6.1274&to_lon=106.6577:

{
"success": true,
"routes": [
{ "totalLength": 31365, "totalSeconds": 1986 },
{ "totalLength": 27001, "totalSeconds": 2909 },
{ "totalLength": 27176, "totalSeconds": 1990 }
]
}

GET /search?query=SPBU&lat=-6.1754&lon=106.827:

{
"success": true,
"venues": [
{
"name": "SPBU 34.10401",
"location": { "x": 106.843635672, "y": -6.184980284 },
"city": "Jakarta Pusat",
"country": "ID",
"address": "Kramat Raya 116 RT 002/09",
"phone": "+62-21-3106507"
}
]
}

GET /nearby?lat=-6.175&lon=106.827&max_results=2:

{
"success": true,
"venues": [
{ "name": "Monumen Nasional", "categories": ["MUSEUM"], "location": { "x": 106.827159601, "y": -6.175430914 }, "city": "Jakarta Pusat", "country": "ID" },
{ "name": "Monas Futsal Arenas", "categories": ["STADIUM_ARENA"], "location": { "x": 106.829028705, "y": -6.174461243 }, "street": "Medan Merdeka Timur", "city": "Jakarta Pusat", "country": "ID" }
]
}

GET /reverse-geocode?lat=-6.1954&lon=106.8206:

{
"success": true,
"venue": { "street": "Jalan Teluk Betung", "city": "Jakarta Pusat" }
}

GET /walking-distance?from_lat=-6.1754&from_lon=106.827&to_lat=-6.178&to_lon=106.83:

{ "success": true, "meters": 411 }

GET /eta-batch?from_lat=-6.1754&from_lon=106.827&to=-6.1274,106.6577&to=-6.1954,106.8206:

{
"success": true,
"results": [
{ "lat": -6.1274, "lon": 106.6577, "seconds": 2056 },
{ "lat": -6.1954, "lon": 106.8206, "seconds": 455 }
]
}

GET /sos-providers?lat=40.7580&lon=-73.9855:

{
"success": true,
"providers": [
{ "phone": "911", "name": "911" },
{ "type": 1, "subtype": 3, "phone": "18444110791", "name": "AAA" },
{ "type": 1, "subtype": 3, "phone": "18777983752", "name": "Tesla" }
]
}

Data table

/alerts events:

FieldDescription
idStable event id, unchanged across live updates
versionUpdate/sequence number for this event
typeCodeNumeric event type (not yet mapped to a name — see Known limitations)
street / city / crossStreetLocation context, as reported
pointsEvent geometry (polyline), decoded lon/lat
roadSegmentIdsUnderlying Waze road-graph segment ids the event is linked to
rawThe unparsed AddRoadInfo CSV fields, for the handful of positions not yet mapped to a named field above

/route alternatives:

FieldDescription
totalLengthDistance in meters
totalSecondsETA in seconds
trafficCommentLive traffic-comparison text (e.g. "lighter traffic than usual"), when present
isInvalidForPrivateVehicleTrue when this route needs a taxi/permit/restricted-vehicle type
questionRoute-level warnings/confirmations (tolls, permits, restricted lanes), when present

/search, /nearby venues / /reverse-geocode venue:

FieldDescription
name / houseNumber / street / city / country / address / phoneVenue/address details, as reported (not every field is populated for every result)
location.x / location.yLongitude / latitude (plain decimal degrees) — /search and /nearby only
categoriesReal Waze taxonomy (e.g. ["MUSEUM"], ["CAFE"]) — /nearby only

/eta-batch results:

FieldDescription
lat / lonEchoes back the destination requested
secondsLive ETA in seconds, null if that leg failed

/sos-providers providers:

FieldDescription
name / phone / urlContact details, as reported
type / subtypeNumeric category (not yet mapped to a name)

Pricing

Pay-per-event, billed on each successful call. See the Actor's Pricing tab for current rates.

Known limitations

  • /alerts' typeCode, and a handful of its other numeric fields, aren't mapped to human-readable names. AddRoadInfo is parsed entirely natively (no Java-side protobuf class to cross-reference, unlike every other endpoint here) — confirmed by decompiling the actual native parser function. That decompile did surface two verified wire-format facts not yet correlated to an exact field position: one numeric field is a float scaled ×10 (not a plain int), and one field supports a |-delimited sub-list of up to 20 integers — never populated in any sample captured so far. The unmapped positions are returned under raw rather than guessed at.
  • /route doesn't return route line geometry. Waze encodes it with Google's S2 cell geometry format (a compressed spherical-geometry encoding), which isn't decoded by this Actor — distance, ETA, traffic, and warnings are all real-time and accurate, only the polyline itself is omitted.
  • /reverse-geocode returned empty in some regions during testing (New York and Tel Aviv, both otherwise dense Waze markets) despite working reliably in Indonesia and the UK. Cause not yet isolated — logged as a regional caveat rather than assumed fixed everywhere.
  • Parking search exists in the protocol but isn't exposed here. It returned zero results in every live test during development — Jakarta, a Jakarta mall district, and Tel Aviv (Waze's own home market) — despite a well-formed request, across multiple radii and with/without the "popular" flag. Most likely the request needs a different shape than a generic point+radius search (e.g. anchored to a specific venue) rather than a data gap. Kept in the proto schema for future work, not exposed as a public endpoint while empty.
  • /nearby doesn't support filtering by category. The protocol has a category filter field, and real category strings were pulled straight from the app (GAS_STATION, PARKING_LOT, CHARGING_STATION, EV_CHARGING_STATION, ...), but every one tried returned zero results in testing, while leaving the filter unset reliably returns real nearby venues with their category already attached. Filter client-side on the categories field in the response for now.
  • This is an unofficial, reverse-engineered integration, not affiliated with or endorsed by Waze / Google. Behavior may change if Waze changes its protocol.

Found a bug or have a feature request? Use the Issues tab on this Actor's page.