FlixBus Fare Scraper (Bus Ticket Prices by Route) avatar

FlixBus Fare Scraper (Bus Ticket Prices by Route)

Pricing

from $2.00 / 1,000 route fare delivereds

Go to Apify Store
FlixBus Fare Scraper (Bus Ticket Prices by Route)

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

Steadfetch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Security

Limited permissions

Share

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 + ISO currency), date, sourceUrl and scrapedAt.
  • 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's BreadcrumbList JSON-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 routeUrl across runs: the second run on the same input returns 0 routes. Clear the seen-routes key in the flixbus-fare-quotes-state key-value store to force a fresh backfill.
  • Rejects /track/, /flux/ and format query 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

FieldTypeDefaultMeaning
routeUrlsarray of URIs, 1-500https://www.flixbus.com/bus/hanover-airportPublic FlixBus /bus/<city> pages to read. HTTPS only; /track/, /flux/ and format query parameters are rejected.
localeen, de, fr or esenAccept-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 test
, npm run publish:check and apify-cli validate-schema run in CI on every push.