BlaBlaCar Scraper — French Carpool & Bus Trip Search
Pricing
from $2.00 / 1,000 result scrapeds
BlaBlaCar Scraper — French Carpool & Bus Trip Search
Scrape carpool and bus trip search results from blablacar.fr — departure/arrival times, prices, driver ratings, and vehicle type for any French route and date.
Pricing
from $2.00 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
BlaBlaCar Scraper
Scrape carpool and bus trip search results from blablacar.fr for any French route and date — departure/arrival times, prices, driver ratings, and vehicle type, straight from the site's own search page.
Why use this actor?
BlaBlaCar doesn't publish an open API, and its search page (and even
robots.txt) sits behind a DataDome anti-bot wall that blocks plain requests
and datacenter proxies. This actor gets past that and returns the trips the
site itself renders for a given departure city, arrival city, and date —
useful for price monitoring on popular French intercity routes, comparing
carpool vs. bus vs. train pricing, or feeding a fare-tracking dashboard.
Prices, schedules, and driver info are pulled directly from BlaBlaCar's own
search results, not estimated or scraped from a third party.
How to scrape BlaBlaCar data
- Set
fromCityandtoCityto French city names (e.g."Paris"and"Lyon"). Plain city names work — no need to look up internal place IDs. - Optionally set
dateinYYYY-MM-DDformat. Leave it blank and the actor picks a near-future weekday automatically (see below). - Run the actor. It fetches
https://www.blablacar.fr/search?fn={fromCity}&tn={toCity}&db={date}through Bright Data's Web Unlocker (the only way to get past DataDome reliably), then reads the trip data straight out of the page's own embedded hydration cache — the same JSON the site's frontend uses to render the results you see in a browser. - Results land in the dataset: one row per trip, with times, price, duration, vehicle type, and driver info when available.
Because the data comes from the live search page, this is a snapshot at the time of the run. Re-run on a schedule if you need price trends over time for a route.
Input
| Field | Type | Required | Description |
|---|---|---|---|
fromCity | String | No | Departure city name (default: "Paris") |
toCity | String | No | Arrival city name (default: "Lyon") |
date | String | No | Travel date, YYYY-MM-DD. If omitted, a near-future weekday is computed automatically |
maxResults | Integer | No | Ceiling on trips returned (default: 100). See Limitations — a single search page renders roughly 10-12 trips, so this ceiling is rarely reached |
proxyConfiguration | Object | No | Included for schema completeness only. Requests go through Bright Data's Web Unlocker, not Apify Proxy, so this setting has no effect |
brightDataApiKey | String (secret) | Yes* | Bright Data API key with Web Unlocker access. *Falls back to the BRIGHT_DATA_API_KEY environment variable if left empty |
Default date logic
When date is not supplied, the actor computes a near-future weekday: today
plus three days, nudged forward to the next Monday if that lands on a
Saturday or Sunday. If the runtime's system clock looks broken (an invalid
date, or a year before 2020), it falls back to a hardcoded known-good date
(2026-08-03, a Monday) instead of trusting a clock that might be wrong.
Update that fallback date periodically as the actor ages so it stays
reasonably "near future" even in the fallback path.
Output
Each result is one trip from the search results for the requested route and date.
| Field | Type | Example |
|---|---|---|
fromCity | String | "Paris" |
toCity | String | "Lyon" |
departureTime | String (nullable) | "2026-08-03T07:30:00" |
arrivalTime | String (nullable) | "2026-08-03T13:40:00" |
durationMinutes | Number (nullable) | 370 |
price | Number (nullable) | 19.99 |
currency | String | "EUR" |
driverName | String (nullable) | "Malika" — carpool trips only |
driverRating | Number (nullable) | 4.8 — carpool trips only |
vehicleType | String | "carpool", "bus", or "train" |
seatsAvailable | Number (nullable) | not currently exposed by the site — always null today, kept for forward compatibility |
url | String | Search results URL this trip was found on |
scrapedAt | String | "2026-07-13T00:57:43.208Z" |
Example output
{"fromCity": "Paris","toCity": "Lyon","departureTime": "2026-08-03T07:30:00","arrivalTime": "2026-08-03T13:40:00","durationMinutes": 370,"price": 19.99,"currency": "EUR","driverName": null,"driverRating": null,"vehicleType": "bus","seatsAvailable": null,"url": "https://www.blablacar.fr/search?fn=Paris&tn=Lyon&db=2026-08-03","scrapedAt": "2026-07-13T00:57:43.208Z"}
{"fromCity": "Paris","toCity": "Lyon","departureTime": "2026-08-03T02:30:00","arrivalTime": "2026-08-03T07:00:00","durationMinutes": 270,"price": 46.49,"currency": "EUR","driverName": "Malika","driverRating": 4.8,"vehicleType": "carpool","seatsAvailable": null,"url": "https://www.blablacar.fr/search?fn=Paris&tn=Lyon&db=2026-08-03","scrapedAt": "2026-07-13T00:57:43.208Z"}
Cost estimate
Each run makes exactly one page fetch through Bright Data's Web Unlocker per route+date combination (roughly 10-12 results). At standard Apify pricing on the PAY_PER_EVENT model, that works out to well under $0.05 per run for a single route+date query — the actual Bright Data cost is a small fraction of a cent per request, and compute time is a few seconds.
Limitations — read this before relying on comprehensive coverage
This is a top rides per route and date actor, not a comprehensive schedule scraper:
- No pagination. BlaBlaCar's search page renders roughly 10-12 trips in the initial HTML. The rest of the route's trips load via an authenticated XHR call from the logged-in frontend session, which DataDome blocks from outside a real browser session. This actor only reads what the first page render includes.
maxResultsis a ceiling, not a target. The default/prefill values (100/20) will not be filled — expect ~10-12 items per run regardless of how high you setmaxResults. That is expected, not a bug.- BlaBlaCar's own results mix in train partner listings. The search
page's default view returns a blended carpool/bus/train result set (not
carpool+bus only, despite the endpoint being named
trip/search). This actor keeps train rows in the output (vehicleType: "train") rather than silently dropping roughly half the results to match a narrower carpool/bus definition — filter onvehicleTypein the dataset if you only want carpool or bus rows. - No per-trip deep link exists in the search results payload — BlaBlaCar
opens ride details client-side without a stable URL per trip. The
urlfield is the search results page URL, the same for every row in a run. seatsAvailableand driver details are best-effort. Driver name and rating are only present for carpool trips (buses and trains have no individual driver in the data). Remaining seat counts are not exposed anywhere in the search payload at all — the field is kept in the output schema for forward compatibility but is alwaysnulltoday.- Want more coverage of a route? Run this actor once per date you care about (e.g. daily for the next two weeks) rather than expecting one run to return a full schedule.
Related Scrapers
Other travel actors in the Studio AMBA catalog:
- tiqets-scraper — attraction and tour tickets
- getyourguide-scraper — tours, activities, and experiences
- trainline-scraper — train fares and schedules across Europe
- flixbus-scraper — long-haul bus fares and schedules
Need this data on a schedule, or a custom version?
We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.
See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.