monthly
dumps
parquet
1 month
hourly agg.
by station
Citybikes
scraping the world for
bike sharing data
so you don't have to
Intro - 2009
ack
CityBikes: the new stuff
publisher
metrics
scheduler
zmq socket
subscriber
subscriber
subscriber
thread pool
pybikes
task
hyper
The android app that never was
a normal pipeline
workers
pybikes
pybikes
pybikes
pybikes
pybikes
...
multiagent system
publisher
pybikes
pybikes
pybikes
pybikes
pybikes
...
REST API
real time subscriber
sqlite
~ 50 Mb
REST API
stats subscriber
(4 weeks)
sqlite
~ 40 Gb
people from
the internet
hot stats subscriber
(1 day)
sqlite
~ 1.8 Gb
storage
cold db
(DuckDB)
monthly
dumps
parquet
multiagent system
publisher
pybikes
pybikes
pybikes
pybikes
pybikes
...
30% gbfs (230)
3% licensed (21)
17% sourced (132)
gbfs-ish (147) 32%
other (147) 18%
CityBikes
API
GBFS Layer
Historical bike share data
GBFS
worst
GBFS
+
pybikes
ack
Intro - 2009
Intro - 2009
pybikes networks over time
pybikes networks over time
time
valley
of despair
excitement
pybikes networks over time
time
excitement
General Bikeshare Feed Specification
GBFS
GBFS Layer
GBFS v2
GBFS v1
GBFS
broken
GBFS
manifest
GBFS Layer
GBFS v2
GBFS v1
GBFS
broken
GBFS
manifest
REST API
free floating bikes
free floating bikes
free floating bikes
coming soon™
https://app.citybik.es
coming soon™
availability data
https://citibikenyc.com/system-data
trip 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.es
https://api.citybik.es
1