
GetYourGuide Scraper
scrape.ly/store/roamandroof/getyourguide-scraperTravelE-commerce
1 monthly user

Live Waze traffic alerts (accidents, hazards, police, closures) and jams for any map area, Waze driving routes with ETAs, tolls and on-route incidents, and Waze place search. No login.
Pull live Waze traffic into clean rows: every accident, hazard, police report, road closure and traffic jam inside any map area, Waze's driving routes with travel times, tolls and on-route incidents, and Waze place search. No Waze account, no API key, and you pay per map area query, not per row.
Times Square, New York -> JFK Airport and get up to 5 alternative routes with minutes, kilometres, toll price, HOV rules and the alerts and jams along each route.latitude,longitude (tip: right-click a point in any web map to copy its coordinates). Add more areas under More map areas.from -> to lines.| Field | What it does |
|---|---|
operation | alertsAndJams, drivingDirections or venues (places search). Left empty, it is picked from the fields you filled in. |
bottomLeft, topRight | Corners of the map area as latitude,longitude. |
areas | More map areas, one per line: south,west,north,east. |
maxAlerts, maxJams | Results per map area (0 to 10,000 each, 0 skips that type). |
alertTypes, alertSubtypes | Only keep these alert types (ACCIDENT, HAZARD, POLICE, ROAD_CLOSED, ...) or Waze subtypes. |
minJamLevel, maxAgeMinutes | Only jams at or above a level (1 light to 5 blocked); only alerts reported in the last N minutes. |
sourceCoordinates, destinationCoordinates, routes | Trips for driving directions (coordinates or place names). |
maxRoutes, departureTimestamp, arrivalTimestamp, returnRouteCoordinates | Route options. |
searchQueries | Place search terms (Places search). |
{
"operation": "alertsAndJams",
"bottomLeft": "40.66615,-74.13732",
"topRight": "40.77278,-73.76818",
"maxAlerts": 20,
"maxJams": 20,
"alertTypes": ["ACCIDENT", "ROAD_CLOSED"]
}
{
"operation": "drivingDirections",
"routes": ["Times Square, New York -> JFK Airport", "32.0853,34.781767 -> 32.794046,34.989571"],
"maxRoutes": 3
}
Every row has a recordType: alert, jam, route or place. The dataset has a table view for each.
| Field | Description |
|---|---|
alertType, alertSubtype, alertDescription | What was reported, e.g. HAZARD / HAZARD_ON_ROAD_LANE_CLOSED / "Road Work Ahead - move LEFT". |
street, city, country, latitude, longitude | Where it is. |
publishedAt, reportedBy, provider, numThumbsUp, comments | When and by whom it was reported, and how many drivers confirmed it. |
jamLevel, speedKmh, lengthMeters, drivingTimeSeconds, endLocation, lineCoordinates | Jam severity (0-5), current speed, length, time to drive through, where it ends and its road geometry. |
blockAlertId, blockAlertType, blockAlertDescription | The incident that causes a jam, when Waze links one. |
routeName, durationMinutes, distanceKm, isFastest, isToll, tollPrice, tollPriceCurrency, isHov, trafficLabel | Route summary. |
routeAlerts, routeJams, routeCoordinates | Incidents and jams on the route, and the route polyline (optional). |
placeName, address, placeId | Places search results. |
wazeUrl, area, region, scrapedAt | A Waze link, the map area the row came from, Waze's region (na, row, il) and the scrape time. |
Example rows from a test run (trimmed):
[
{
"recordType": "alert",
"alertId": "alert-227743556/55ecacbf-41cd-42be-bd6a-a12d10c1a02c",
"alertType": "HAZARD",
"alertSubtype": "HAZARD_ON_ROAD_LANE_CLOSED",
"alertDescription": "Road Work Ahead - move LEFT",
"street": "Avenue C",
"city": "Bayonne",
"country": "US",
"latitude": 40.683189,
"longitude": -74.105176,
"publishedAt": "2026-10-21T14:02:08Z",
"reportedBy": "HAAS Alert",
"numThumbsUp": 23,
"wazeUrl": "https://www.waze.com/ul?ll=40.683189%2C-74.105176&navigate=yes",
"region": "na"
},
{
"recordType": "jam",
"jamId": "1734569656",
"jamLevel": 3,
"street": "Broadway",
"city": "Manhattan, NY",
"country": "US",
"endLocation": "W 55th St",
"speedKmh": 4.56,
"lengthMeters": 173,
"drivingTimeSeconds": 137,
"updatedAt": "2026-10-21T17:14:55Z",
"lineCoordinates": [{"lat": 40.766301, "lng": -73.981889}, {"lat": 40.765477, "lng": -73.982028}]
},
{
"recordType": "route",
"routeIndex": 0,
"routeName": "Grand Central Pkwy E Queens (12.03)",
"durationMinutes": 58.1,
"distanceKm": 27.22,
"isFastest": true,
"isToll": true,
"tollPrice": 12.03,
"tollPriceCurrency": "USD",
"tollPassName": "E-ZPass - NY",
"tollPriceWithPass": 7.46,
"trafficLabel": "usual traffic",
"routeAlerts": [{"alertId": "228249141", "type": "POLICE", "subtype": "NO_SUBTYPE", "latitude": 40.741408, "longitude": -73.953829}],
"source": "Times Square, New York",
"destination": "JFK Airport",
"destinationName": "John F. Kennedy International Airport (JFK), Queens"
}
]
Pay per event, plus the run's platform usage (compute and the Scrapely browser session that opens the Waze live map, typically about $0.01 to $0.02 per run):
Example: the default input (one New York area, 20 alerts + 20 jams) costs $0.015 plus about $0.015 of platform usage, so roughly $0.03 per area. 1,000 alerts and 1,000 jams from one large area are 10 charges, about $0.15 plus usage.
Is it legal to scrape Waze? The actor reads the same public live map data that anyone sees on waze.com without logging in. It does not collect personal data beyond what Waze shows publicly (e.g. the name of a partner feed that reported an alert). Check that your use complies with Waze's terms and your local laws.
Do I need a Waze account or a proxy? No. The actor handles access to the live map itself. The default datacenter proxy works well.
How many results can I get? Up to 10,000 alerts and 10,000 jams per area. Waze itself only knows what drivers and partner feeds report right now, so a quiet area has few rows; the run ends with a message saying how many it found.
Why is a field empty? Waze leaves many fields blank: subtypes, descriptions and streets are often missing on driver reports, and blockAlert* is only set when Waze links a jam to a cause. Country is added for every row; city is added to alerts from nearby jams or a reverse lookup (turn off Add city to alerts for the fastest runs).
How fast is it? A typical area takes about 20 to 30 seconds, most of it opening the Waze live map once. Extra areas and tiles in the same run add a few seconds each.
Can I schedule it or use the API? Yes. Schedule it every few minutes to monitor an area, or call it from the API, webhooks and integrations like any other actor.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
operationenumOptionalWhat to scrape
Pick one operation per run. - **Alerts & jams**: every live accident, hazard, police report, road closure and traffic jam inside one or more map areas. One row per alert or jam. - **Driving directions**: Waze's candidate routes between two places, with travel time, distance, tolls and the alerts and jams on each route. One row per route. - **Places**: search Waze places (gas stations, parking, restaurants...) inside a map area. One row per place. If left empty, the actor picks the operation from the fields you filled in.
bottomLeftstringOptionalMap area: bottom-left corner
South-west corner of the map area as `latitude,longitude`, for example `40.66615,-74.13732` (New York City). Used by Alerts & jams and Places.
topRightstringOptionalMap area: top-right corner
North-east corner of the map area as `latitude,longitude`, for example `40.77278,-73.76818`.
areasarrayOptionalMore map areas
Optional. Scrape several map areas in one run. One area per line as four numbers: `south latitude, west longitude, north latitude, east longitude`, for example `51.45,-0.25,51.56,0.02` (central London). Overlapping areas are de-duplicated.
maxAlertsintegerOptionaldefault 20Max alerts per area
How many alerts (accidents, hazards, police, closures) to save per map area. Large areas are split into smaller tiles automatically to go past Waze's 200-per-view limit. Set 0 to skip alerts.
maxJamsintegerOptionaldefault 20Max jams per area
How many traffic jams to save per map area. Set 0 to skip jams.
Narrow down alerts and jams. Filters are applied before the limits, so you still get up to the max count of matching items.
alertTypesarrayOptionalAlert types
Only save alerts of these types. Leave empty for all types.
alertSubtypesarrayOptionalAlert subtypes
Only save alerts with these Waze subtypes, for example `HAZARD_ON_ROAD_CONSTRUCTION`, `POLICE_HIDING`, `ROAD_CLOSED_EVENT`, `ACCIDENT_MAJOR`. Leave empty for all.
minJamLevelintegerOptionaldefault 0Minimum jam level
Only save jams at or above this Waze level: 1 light, 2 moderate, 3 heavy, 4 standstill, 5 blocked road. 0 keeps all.
maxAgeMinutesintegerOptionaldefault 0Only alerts from the last N minutes
Skip alerts reported earlier than this many minutes ago. 0 keeps all.
includeJamLinebooleanOptionaldefault trueInclude jam polylines
Add each jam's road geometry (`lineCoordinates`, a list of lat/lng points). Turn off for smaller rows.
addCitybooleanOptionaldefault trueAdd city to alerts
Waze alerts often come without a city. When on, the city (and a missing street) is looked up from the alert's position, once per ~1 km area. Turn off for the fastest runs.
Used when What to scrape is Driving directions.
sourceCoordinatesstringOptionalFrom
Start of the route as `latitude,longitude` (for example `32.0853,34.781767`) or a place name or address that Waze can find.
destinationCoordinatesstringOptionalTo
End of the route as `latitude,longitude` (for example `32.794046,34.989571`) or a place name or address.
routesarrayOptionalMore routes
Optional. Several trips in one run, one per line as `from -> to`, each side `latitude,longitude` or a place name, for example `40.7128,-74.0060 -> 40.7831,-73.9712`.
maxRoutesintegerOptionaldefault 3Max routes per trip
How many alternative routes to ask Waze for (1 to 5). Waze may return fewer.
departureTimestampintegerOptionalDeparture time
Optional. Plan for a future departure, as a Unix timestamp in seconds. Leave empty to leave now.
arrivalTimestampintegerOptionalArrival time
Optional. Plan to arrive at this time, as a Unix timestamp in seconds. Wins over the departure time.
returnRouteCoordinatesbooleanOptionaldefault falseInclude route polylines
Add the full route geometry (`routeCoordinates`) to each route. Off by default to keep rows small.
Used when What to scrape is Places search.
searchQueriesarrayOptionalPlace search terms
What to look for on the Waze map, for example `gas station`, `parking` or `starbucks`. Searched inside the map area above. Waze returns about 10 places per search, so use specific terms or smaller areas for more.
onlyInsideAreabooleanOptionaldefault trueOnly places inside the map area
Drop places Waze suggests outside the map area.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy for the data requests. Datacenter works well for Waze.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| recordType | string | null | Record type: alert, jam, route or place |
| alertId | string | null | Waze alert id |
| alertType | string | null | Alert type (ACCIDENT, HAZARD, POLICE, ROAD_CLOSED, JAM...) |
| alertSubtype | string | null | Alert subtype, e.g. HAZARD_ON_ROAD_CONSTRUCTION |
| alertDescription | string | null | Description shown on the map |
| street | string | null | Street |
| city | string | null | City |
| country | string | null | Country code |
| latitude | number | null | Latitude |
| longitude | number | null | Longitude |
| publishedAt | string | null | When the alert was reported (UTC) |
| reportedBy | string | null | Reporter or partner feed |
| numThumbsUp | number | null | Thumbs up from drivers |
| jamId | string | null | Waze jam id |
| jamLevel | number | null | Jam level 0-5 |
| speedKmh | number | null | Current speed in km/h |
| lengthMeters | number | null | Jam or route length in meters |
| startLocation | string | null | Jam start |
| endLocation | string | null | Where the jam ends |
| updatedAt | string | null | Last update (UTC) |
| lineCoordinates | array | null | Jam polyline |
| routeIndex | number | null | Route number |
| routeName | string | null | Route name |
| durationMinutes | number | null | Travel time in minutes |
| distanceKm | number | null | Distance in km |
| isFastest | boolean | null | Fastest route |
| isToll | boolean | null | Toll route |
| tollPrice | number | null | Toll price |
| tollPriceCurrency | string | null | Toll currency |
| trafficLabel | string | null | Traffic compared with usual |
| routeAlerts | array | null | Alerts on the route |
| routeJams | array | null | Jams on the route |
| source | string | null | Route start (input) |
| destination | string | null | Route end (input) |
| placeId | string | null | Waze place id |
| placeName | string | null | Place name |
| address | string | null | Address |
| searchQuery | string | null | Search term |
| wazeUrl | string | null | Open in Waze |
| area | string | null | Map area (south,west,north,east) |
| scrapedAt | string | null | Scraped at (UTC) |
| drivingTimeSeconds | number | null | Time to drive through the jam in seconds |
| tollPassName | string | null | Toll pass that lowers the price |
| tollPriceWithPass | number | null | Toll price with that pass |
| region | string | null | Waze region: na, row or il |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Place search | Charged once per search term and map area that returns places (up to about 10 places). | $0.012 |
| Driving route | Charged per driving route saved, including its on-route alerts and jams. | $0.01 |
| Map area query | Charged once per batch of up to 200 alerts and jams saved from one map area. Areas with nothing to report are free. | $0.015 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('cornerledger/waze-scraper').call({
"operation": "alertsAndJams",
"bottomLeft": "40.66615,-74.13732",
"topRight": "40.77278,-73.76818",
"areas": [
"51.45,-0.25,51.56,0.02"
],
"maxAlerts": 20,
"maxJams": 20,
"alertSubtypes": [
"ACCIDENT_MAJOR"
],
"sourceCoordinates": "32.0853,34.781767",
"destinationCoordinates": "32.794046,34.989571",
"routes": [
"40.7128,-74.0060 -> 40.7831,-73.9712"
],
"searchQueries": [
"gas station"
],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run cornerledger/waze-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=cornerledger/waze-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Two map areas in one run, jams at level 2 or worse
Routes from coordinates and from place names, 2 per trip
Alert type filter, alerts only
Waze places search inside a map area
A large area split into tiles past Waze's 200-per-view limit
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.