Sign inTry it

Benchmark: searching Deutsche Bahn trains with an AI agent

We asked two setups to find train connections with prices on bahn.de. Wield's recipe, running in an everyday browser, passed 9 of 9 runs with a median of 2.1 seconds and 3 requests per run. Browser Use driving Claude Sonnet 5.5 in a fresh headless browser got a 403 from bahn.de's timetable API. It stopped after 11 minutes and 25 steps with no result.

Updated

Live recipebahn.de/search-connectionsv2

Deutsche Bahn Search train connections between two stations with prices

Read-only, no loginRuns in your browser only

Parameters (8)
adultsintegerNumber of adult travellers without discount card
datestringrequiredTravel date YYYY-MM-DD
fromstringrequiredDeparture station, e.g. 'Berlin Hbf', 'Hamburg'
modestringABFAHRT = depart at or after time, ANKUNFT = arrive by time "ABFAHRT" | "ANKUNFT"
page_refstringnext_page_ref from a previous result, to get later connections with otherwise identical params
timestringHH:mm, Europe/Berlin local time
tostringrequiredArrival station, e.g. 'München Hbf'
travel_classstring2nd or 1st class (changes the price) "KLASSE_2" | "KLASSE_1"
Use it with your agent
Measured on the live site
MetricWield recipeBrowser Use + Claude Sonnet 5.5
Success100%0%
Median time2.1 s676 s
Cost per run$0$0.589

9 runs each, 7 November 2026. How we measure

Wield recipes for Deutsche Bahnbahn.de
Everything for Deutsche Bahn

The task

Each side got the same three queries, all 2nd class for 1 adult without a discount card:

QueryFromToDateAfter
q1Berlin HbfMünchen HbfFri 20 Nov 202608:00
q2Hamburg HbfKöln HbfWed 18 Nov 202610:00
q3Frankfurt (Main) HbfStuttgart HbfWed 25 Nov 202617:00

Pass check: at least one connection on the requested date, with departure, arrival and price.

Results (7 November 2026)

Wield recipeBrowser agent
Runs passing the check9 of 90 of 1
Median time per run2.1 s675.9 s
Model cost per run$0$0.59
Requests per run3, all to www.bahn.de924, of which 37 to the site API and pages
Blocked by the siteNoYes: 403 on POST /web/api/angebote/fahrplan

The browser agent used 26 model calls and about 199,000 input tokens before it gave up. It reported the block itself. The benchmark is paced at about 30 site requests per hour, so after a block it doesn't retry the site for more runs.

Why the results differ

bahn.de protects its timetable API with Akamai. That protection rejects requests that don't come from a real, ordinary browser session. A fresh headless Chromium with an empty profile is what cloud browser agents run, and it looks automated, so the protection stopped it.

Wield sends the same three requests that bahn.de's own page makes: two station lookups and one timetable query. It sends them from a bahn.de tab in the user's normal browser, at human pace. No model sits in the loop, so the run costs nothing in tokens and takes as long as the site takes to answer.

None of this gets around anything. If bahn.de shows a check to a Wield user, Wield stops with site_challenge and the user solves it in their own tab.

Caveats

  • One browser-agent run. After the first run was blocked, the pacing rules kept the agent off bahn.de, so its side has n = 1.
  • Preliminary numbers. The benchmark was still running on 7 November 2026, and the live numbers on this page come from bench/results.json.
  • Terms. bahn.de's terms don't allow automated bulk queries of timetable or fare data. The recipe runs one search that a user started, never in bulk, and it never books.

FAQ

Can I rerun this benchmark?

The method, the task file and the raw logs (destinations, timing, tokens and checks; no page contents) are described on the benchmark page.