BlaBlaCar Scraper — French Carpool & Bus Trip Search avatar

BlaBlaCar Scraper — French Carpool & Bus Trip Search

Pricing

from $2.00 / 1,000 result scrapeds

Go to Apify Store
BlaBlaCar Scraper — French Carpool & Bus Trip Search

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

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 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

  1. Set fromCity and toCity to French city names (e.g. "Paris" and "Lyon"). Plain city names work — no need to look up internal place IDs.
  2. Optionally set date in YYYY-MM-DD format. Leave it blank and the actor picks a near-future weekday automatically (see below).
  3. 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.
  4. 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

FieldTypeRequiredDescription
fromCityStringNoDeparture city name (default: "Paris")
toCityStringNoArrival city name (default: "Lyon")
dateStringNoTravel date, YYYY-MM-DD. If omitted, a near-future weekday is computed automatically
maxResultsIntegerNoCeiling on trips returned (default: 100). See Limitations — a single search page renders roughly 10-12 trips, so this ceiling is rarely reached
proxyConfigurationObjectNoIncluded for schema completeness only. Requests go through Bright Data's Web Unlocker, not Apify Proxy, so this setting has no effect
brightDataApiKeyString (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.

FieldTypeExample
fromCityString"Paris"
toCityString"Lyon"
departureTimeString (nullable)"2026-08-03T07:30:00"
arrivalTimeString (nullable)"2026-08-03T13:40:00"
durationMinutesNumber (nullable)370
priceNumber (nullable)19.99
currencyString"EUR"
driverNameString (nullable)"Malika" — carpool trips only
driverRatingNumber (nullable)4.8 — carpool trips only
vehicleTypeString"carpool", "bus", or "train"
seatsAvailableNumber (nullable)not currently exposed by the site — always null today, kept for forward compatibility
urlStringSearch results URL this trip was found on
scrapedAtString"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.
  • maxResults is 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 set maxResults. 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 on vehicleType in 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 url field is the search results page URL, the same for every row in a run.
  • seatsAvailable and 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 always null today.
  • 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.

Other travel actors in the Studio AMBA catalog:

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.