FlixBus Fare Scraper (Bus Ticket Prices by Route)
Pricing
from $2.00 / 1,000 route fare delivereds
FlixBus Fare Scraper (Bus Ticket Prices by Route)
Extract published Flixbus bus fare quotes by route URL: the 'from' price, currency and route name. Server-side HTML only, no browser, no login, schema-validated results, pay per event.
Pricing
from $2.00 / 1,000 route fare delivereds
Rating
0.0
(0)
Developer
Steadfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Security
Limited permissionsShare
Flixbus Bus Fare Quotes by Route
Extract the published "from" fare of public FlixBus route pages
(https://www.flixbus.com/bus/<city>): the route name, the amount, the currency
exactly as FlixBus publishes it, and the source URL. No login, no browser, no
fare estimation.
What it does
- Reads one public FlixBus route page per URL with a plain HTTP request (no browser, no proxy, no IP rotation).
- Returns one dataset item per route that publishes a "from" fare:
routeUrl,routeName,fareFrom(amount+ ISOcurrency),date,sourceUrlandscrapedAt. - Parses the server-rendered "cheapest trip" card (
From $13.98,Ab 13,98 EUR,A partir de 8,48 EUR...) and the route name from the page'sBreadcrumbListJSON-LD. - Never invents a fare: a route without a published amount, a page that does not exist and a route already delivered by a previous run are not pushed, so they are never charged.
- Deduplicates by canonical
routeUrlacross runs: the second run on the same input returns 0 routes. Clear theseen-routeskey in theflixbus-fare-quotes-statekey-value store to force a fresh backfill. - Rejects
/track/,/flux/andformatquery parameters on every URL and on every redirect; stops on 401/403/429/451 instead of evading a block. - Emits no personal data: the schema is closed (
additionalProperties: false) and only route-level public fields are read.
Data source: FlixBus public route pages (https://www.flixbus.com/bus/).
Every item carries sourceUrl for attribution.
Example output
{"url": "https://www.flixbus.com/bus/hanover-airport","title": "Hanover Airport","routeUrl": "https://www.flixbus.com/bus/hanover-airport","routeName": "Hanover Airport","fareFrom": { "amount": 13.98, "currency": "USD" },"date": null,"sourceUrl": "https://www.flixbus.com/bus/hanover-airport","scrapedAt": "2026-10-21T16:50:00.000Z"}
Input
| Field | Type | Default | Meaning |
|---|---|---|---|
routeUrls | array of URIs, 1-500 | https://www.flixbus.com/bus/hanover-airport | Public FlixBus /bus/<city> pages to read. HTTPS only; /track/, /flux/ and format query parameters are rejected. |
locale | en, de, fr or es | en | Accept-Language hint. The currency reported is always the one the page publishes. |
Pricing
Pay per event:
apify-actor-start: 0.00005 USD per run (Apify-recommended default).apify-default-dataset-item: 0.002 USD per route delivered, i.e. 2.00 USD per 1,000 routes.
There is no custom per-item event: the synthetic dataset event already charges per result, so a route is never billed twice. Routes without a published fare, 404 pages and routes already delivered by a previous run are not pushed and are not charged.
Cost per 1,000 routes: measured locally at 256 MB on a real 87 KB page, a warm fetch + extraction takes 11.4-18.3 ms (cold request 209.7 ms); extraction alone is 16.9 ms per page. With the built-in 250 ms politeness delay between requests, a route costs about 0.27 s of compute, i.e. < 0.01 USD per 1,000 routes at 0.20 USD/CU (upper bound 0.014 USD/1k if every request took 1 s). Margin over the 2.00 USD/1k price is above 99 %; Apify retains its usual platform commission.
FAQ
Does it need a login, an API key or a proxy?
No. The fares are on public route pages. The Actor sends an honest
User-Agent and stops on 401/403/429/451 instead of trying to evade a block.
Why is date null?
FlixBus route pages publish a route-level "from" fare, not a date-specific
quote. A query string with a date returns the same page, so v1 does not
pretend to know a travel date; it reports null rather than inventing one.
Why does the second run return zero routes?
Deduplication is by canonical routeUrl and persists in a named key-value
store, so a route is never delivered or charged twice. Clear the seen-routes
key in the flixbus-fare-quotes-state store to backfill again.
What happens to a route without a published fare?
It is skipped: no dataset item, no charge, and the run log says so. The schema
allows fareFrom: null for API stability, but the Actor never pushes an item
without a published amount.
Are prices converted to another currency?
No. fareFrom.currency is the ISO code of the symbol the page publishes
(USD, EUR or GBP). Amounts are never converted or estimated.
Where does the data come from?
Public FlixBus route pages. Every item carries sourceUrl, and the Store
listing cites FlixBus as the data source.
Maintenance
Tested daily: a scheduled run validates the public page and the dataset schema every day. Failures become issues in the Steadfetch Actors repository.
npm testnpm run publish:check and apify-cli validate-schema run in CI on
every push.