← Back to map

How to use the GoBike alerts feed

Drop one URL into your mapping tool — points appear on your map, refreshed every 15 minutes.

Pick the URL you want

Each link returns a GeoJSON FeatureCollection. Pick the smallest scope you need; smaller files are faster.

All London

https://alerts.blossomedge.ai/london.geojson
Every alert across the 33 boroughs.

Single borough

https://alerts.blossomedge.ai/london/<borough>.geojson
e.g. /london/camden.geojson, /london/hackney.geojson. The full list is on the map page.

Other cities

https://alerts.blossomedge.ai/<city>.geojson
e.g. /munich.geojson, /amsterdam.geojson, /cambridge.geojson, /san_francisco.geojson, /tokyo.geojson.

Manifest of everything

https://alerts.blossomedge.ai/index.json
Lists every published URL with its current record count and bounding box. Useful for automated tooling.

Ready-made shapefile

https://alerts.blossomedge.ai/shapefiles/<city>_shapefile.zip
For ArcGIS Pro and anything else that wants a shapefile rather than GeoJSON. One archive per city, plus a _verified variant holding only the reviewer-confirmed hazards, which is usually the one you want. e.g. /shapefiles/munich_shapefile.zip, /shapefiles/munich_verified_shapefile.zip. Each contains .shp/.shx/.dbf/.prj/.cpg and a README. Rebuilt daily; the GeoJSON above is the live source.

ArcGIS Pro no code

  1. Easiest: download the ready-made shapefile above, unzip, drag the .shp into your map. The .prj is included, so you are not asked for a coordinate system.
  2. Or convert the live feed yourself: Conversion Tools → JSON To Features, with the GeoJSON URL as input.
  3. Or use GDAL directly:
    ogr2ogr -f "ESRI Shapefile" munich.shp /vsicurl/https://alerts.blossomedge.ai/munich_verified.geojson

Two things to know if you convert it yourself. Shapefile field names cannot exceed 10 characters, so user_confirmed silently becomes user_confi — in our archives it is named confirmed deliberately. And manual and user_confirmed are only present on the features that have them, so a converter that infers its schema from the first few records will drop those columns; download the file before converting rather than streaming it. If shapefile is not a hard requirement, GeoPackage avoids both problems — same command with -f "GPKG", or ask us and we will publish one.

ArcGIS Online no code

  1. Open Map Viewer.
  2. Click AddAdd Layer from Web.
  3. For type, choose A GeoJSON file.
  4. Paste the URL (e.g. https://alerts.blossomedge.ai/london.geojson) and click Add Layer.
  5. Style points by the label field if you want to colour verified vs unverified separately.

QGIS no code

  1. Layer menu → Add LayerAdd Vector Layer…
  2. Source type: Protocol: HTTP(S), cloud, etc.
  3. Type: GeoJSON.
  4. Paste the URL and click Add.
  5. QGIS picks up the geometry automatically. Right-click the layer → Properties → Symbology to colour by label.

kepler.gl no code

  1. Open kepler.gl/demo.
  2. Click Add DataLoad FilesLoad from URL.
  3. Paste the URL and click Fetch.

Mapbox GL JS code

map.addSource('gobike-alerts', {
  type: 'geojson',
  data: 'https://alerts.blossomedge.ai/london.geojson'
});
map.addLayer({
  id: 'gobike-alerts-layer',
  type: 'circle',
  source: 'gobike-alerts',
  paint: {
    'circle-radius': 4,
    'circle-color': [
      'case', ['==', ['get', 'label'], 'p'], '#16a34a', '#94a3b8'
    ],
    'circle-opacity': 0.7
  }
});

Leaflet code

fetch('https://alerts.blossomedge.ai/london.geojson')
  .then(r => r.json())
  .then(data => {
    L.geoJSON(data, {
      pointToLayer: (f, latlng) => L.circleMarker(latlng, {
        radius: 4,
        color: f.properties.label === 'p' ? '#16a34a' : '#94a3b8',
        fillOpacity: 0.7
      })
    }).addTo(map);
  });

Python (geopandas) code

import geopandas as gpd

gdf = gpd.read_file('https://alerts.blossomedge.ai/london.geojson')
verified = gdf[gdf['label'] == 'p']
print(f'{len(verified)} verified out of {len(gdf)}')
gdf.plot(column='label', markersize=2, legend=True)

Google My Maps no code

  1. Create a new map at mymaps.google.com.
  2. On a layer, click Import.
  3. Choose the Upload tab and drop a GeoJSON file you've downloaded from one of the URLs (My Maps doesn't fetch live URLs).
My Maps doesn't auto-refresh. If you want the live feed, use ArcGIS, QGIS, or kepler.gl instead.

Refresh behaviour

The data file is regenerated every 15 minutes server-side. CloudFront caches for 60 seconds, so a polite tool that polls hourly will always be at most ~16 minutes behind real time. Tools that auto-refresh (ArcGIS, QGIS, Mapbox) will pick up new alerts on their own polling schedule.

Schema

{
  "type": "Feature",
  "geometry": { "type": "Point", "coordinates": [lng, lat] },
  "properties": {
    "timestamp": 1745234567000,   // Unix ms, UTC
    "label": "p"                  // "p" = verified TP; anything else = unverified
  }
}

Coordinate system is WGS84 (EPSG:4326). Coordinates are in [longitude, latitude] order — the GeoJSON convention.

Licence and attribution

Free to use with attribution: "GoBike hazard alerts, BlossomEdge". All records are anonymised — no userId, no runId, no rider information of any kind. Please don't attempt to re-identify riders.

Need a custom slice?

If you'd like a per-client URL scoped to specific boroughs or cities (so it's "your" feed and won't change scope without notice), email contact@blossomedge.ai.