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.
Deutsche Bahn Search train connections between two stations with prices
Read-only, no loginRuns in your browser only
Parameters (8)
| Metric | Wield recipe | Browser Use + Claude Sonnet 5.5 |
|---|---|---|
| Success | 100% | 0% |
| Median time | 2.1 s | 676 s |
| Cost per run | $0 | $0.589 |
9 runs each, 7 November 2026. How we measure
The task
Each side got the same three queries, all 2nd class for 1 adult without a discount card:
| Query | From | To | Date | After |
|---|---|---|---|---|
| q1 | Berlin Hbf | München Hbf | Fri 20 Nov 2026 | 08:00 |
| q2 | Hamburg Hbf | Köln Hbf | Wed 18 Nov 2026 | 10:00 |
| q3 | Frankfurt (Main) Hbf | Stuttgart Hbf | Wed 25 Nov 2026 | 17:00 |
Pass check: at least one connection on the requested date, with departure, arrival and price.
Results (7 November 2026)
| Wield recipe | Browser agent | |
|---|---|---|
| Runs passing the check | 9 of 9 | 0 of 1 |
| Median time per run | 2.1 s | 675.9 s |
| Model cost per run | $0 | $0.59 |
| Requests per run | 3, all to www.bahn.de | 924, of which 37 to the site API and pages |
| Blocked by the site | No | Yes: 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.