monthlydumpsparquet1 monthhourly agg.by stationCitybikesscraping the world forbike sharing dataso you don't have toIntro - 2009ackCityBikes: the new stuffpublishermetricsschedulerzmq socketsubscribersubscribersubscriberthread poolpybikestaskhyperThe android app that never wasa normal pipelineworkerspybikespybikespybikespybikespybikes...multiagent systempublisherpybikespybikespybikespybikespybikes...REST APIreal time subscribersqlite~ 50 MbREST APIstats subscriber(4 weeks)sqlite~ 40 Gbpeople fromthe internethot stats subscriber(1 day)sqlite~ 1.8 Gbstoragecold db(DuckDB)monthlydumpsparquetmultiagent systempublisherpybikespybikespybikespybikespybikes...30% gbfs (230)3% licensed (21)17% sourced (132)gbfs-ish (147) 32%other (147) 18%CityBikesAPIGBFS LayerHistorical bike share dataGBFSworstGBFS+pybikesackIntro - 2009Intro - 2009pybikes networks over timepybikes networks over timetimevalleyof despairexcitementpybikes networks over timetimeexcitementGeneral Bikeshare Feed SpecificationGBFSGBFS LayerGBFS v2GBFS v1GBFS brokenGBFSmanifestGBFS LayerGBFS v2GBFS v1GBFS brokenGBFSmanifestREST APIfree floating bikesfree floating bikesfree floating bikescoming soon™https://app.citybik.escoming soon™availability datahttps://citibikenyc.com/system-datatrip data{ "id": "00028670e3d01438515caba403ffd680", "name": " PL JOANIC - C / BRUNIQUER, 59", "latitude": 41.4055198, "longitude": 2.1622548, "timestamp": "2026-01-28T18:55:53.259151+00:00Z", "free_bikes": 0, "empty_slots": 19, "extra": { "uid": 106, "online": true, "normal_bikes": 0, "has_ebikes": true, "ebikes": 0 }}time series availability data{ "ride_id": "ACCC919B5A3CD9AD", "rideable_type": "electric_bike", "started_at": "2025-01-01 14:52:26.542", "ended_at": "2025-01-01 14:59:53.427", "start_station_name": "W 20 St & 7 Ave", "start_station_id": "6182.02", "end_station_name": "E 10 St & 2 Ave", "end_station_id": "5746.02", "start_lat": 40.74238787, "start_lng": -73.99726235, "end_lat": 40.72970805644994, "end_lng": -73.9865979552269, "member_casual": "casual",}┌──────────────────────────────────┬─────────────────────┬───────┬───────┐│ id │ timestamp │ bikes │ free ││ varchar │ timestamp │ int32 │ int32 │├──────────────────────────────────┼─────────────────────┼───────┼───────┤│ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:02:18 │ 0 │ 16 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:05:18 │ 1 │ 15 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:17:19 │ 0 │ 16 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:20:18 │ 1 │ 15 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:23:18 │ 0 │ 16 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:29:18 │ 1 │ 15 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:35:18 │ 2 │ 14 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:38:18 │ 1 │ 15 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:44:18 │ 0 │ 16 ││ 00028670e3d01438515caba403ffd680 │ 2025-11-01 00:47:18 │ 1 │ 15 │├──────────────────────────────────┴─────────────────────┴───────┴───────┤https://data.citybik.eshttps://api.citybik.es
1