CityBikes Bike-Share Network & Station Scraper
CityBikes Bike-Share Network & Station Scraper
Scrapes the CityBikes API to deliver unified snapshots of 700+ global bike-share networks and their real-time station availability. Returns network metadata and per-station free-bike counts across Citi Bike, Divvy, and hundreds of other systems worldwide — no API key required.
What does this actor do?
The CityBikes API is the de-facto open aggregator for global bike-share data. This actor wraps it into a scheduled, structured data pipeline with two operating modes:
- Station mode (default) — Returns one record per station with both network metadata and real-time availability (free bikes, empty slots, timestamp). Covers cities from NYC and Chicago to London, Berlin, and Tokyo.
- Networks-only mode — Returns a fast directory summary of all 700+ networks (name, operator, city, country, coordinates) without per-station detail.
Both modes support filtering by country or specific network IDs so you can scope a run to exactly the market you care about.
Use cases
- Urban mobility research — Snapshot bike availability patterns across multiple cities in a single run
- Competitive intelligence — Track operator footprint and network coverage across regions
- Transportation planning — Feed station-level availability data into routing or demand models
- Scheduled monitoring — Use Apify's scheduler to capture hourly or daily snapshots of a network
Input configuration
| Field | Type | Default | Description |
|---|---|---|---|
maxItems |
integer | 0 (unlimited) | Maximum station records to return. Set to 0 for unlimited. |
networksOnly |
boolean | false | If true, returns one record per network (no station fetch). |
country |
string | "" | ISO 3166-1 alpha-2 country code to filter networks (e.g. "US", "GB", "DE"). |
networkIds |
array | [] | Specific CityBikes network slugs to fetch (e.g. ["citi-bike-nyc", "divvy"]). |
Example: All US bike-share stations (capped at 500)
{
"country": "US",
"maxItems": 500
}
Example: Specific networks directory
{
"networksOnly": true,
"country": "DE"
}
Example: Single network — Citi Bike NYC
{
"networkIds": ["citi-bike-nyc"],
"maxItems": 1000
}
Output schema
Each output record contains up to 21 fields. In station mode (default), all fields are populated. In networks-only mode, only the network-level fields are included.
Network-level fields (always present)
| Field | Type | Description |
|---|---|---|
network_id |
string | Unique CityBikes network slug (e.g. "citi-bike-nyc") |
network_name |
string | Human-readable network name (e.g. "Citi Bike") |
company |
string | Operator name(s), comma-separated if multiple |
city |
string | City where the network operates |
country |
string | ISO 3166-1 alpha-2 country code |
latitude |
number | Network center latitude |
longitude |
number | Network center longitude |
source_url |
string | Operator homepage URL, if available |
href |
string | CityBikes API path for this network |
gbfs_url |
string | GBFS feed URL, if the operator publishes one |
ebikes |
boolean | Whether the network includes electric bikes |
scooters |
boolean | Whether the network includes electric scooters |
Station-level fields (station mode only)
| Field | Type | Description |
|---|---|---|
station_id |
string | Unique station identifier within the network |
station_name |
string | Human-readable station name |
station_lat |
number | Station latitude |
station_lng |
number | Station longitude |
free_bikes |
number | Available bikes at this station right now |
empty_slots |
number | Empty docking slots at this station |
timestamp |
string | ISO 8601 timestamp of this availability snapshot |
extra_payment_terminal |
boolean | Whether the station has a payment terminal |
extra_ebikes |
number | Number of electric bikes available |
extra_uid |
string | Station UID from the operator's feed, if available |
Sample output
{
"network_id": "citi-bike-nyc",
"network_name": "Citi Bike",
"company": "NYC Bike Share, LLC, Motivate International, Inc., PBSC Urban Solutions",
"city": "New York, NY",
"country": "US",
"latitude": 40.7143528,
"longitude": -74.00597309999999,
"source_url": null,
"href": "/v2/networks/citi-bike-nyc",
"gbfs_url": null,
"ebikes": false,
"scooters": false,
"station_id": "72",
"station_name": "W 52 St & 11 Ave",
"station_lat": 40.76727216,
"station_lng": -74.00552427,
"free_bikes": 10,
"empty_slots": 28,
"timestamp": "2026-05-30T13:41:09.185000Z",
"extra_payment_terminal": null,
"extra_ebikes": null,
"extra_uid": "72"
}
Notes
- No API key required. The CityBikes API is free and open.
- Real-time data. Station availability reflects live conditions at the time of the run.
- Rate limiting. The actor applies a courtesy 150ms delay between station requests and limits concurrent fetches to 8 — well within the API's tolerance.
- Full coverage. With no filters and
maxItems: 0, the actor will fetch all700 networks and their stations (150,000 total records). A full run takes several minutes.
About CityBikes
CityBikes normalizes data from 700+ bike-share systems worldwide into a single consistent JSON API. It is the primary open-data source for global bike-share research. This actor surfaces that data through Apify's scheduling and export infrastructure so teams can run snapshots without standing up their own polling infrastructure.