Methodology
How we calculate every fare.
The number you see on a results page is the output of a deterministic pipeline: a typed YAML schedule of regulated rates, a routing call to Google’s Routes API, and a pure-function fare engine that applies the right band for your departure time. Six steps, no fudge factors.
The six-step pipeline
- 01
Source-of-truth YAML
Every regulated rate is stored in a single file, data/tariffs.yaml, validated against a typed schema at build time. The file lists, for each state and zone, the flagfall, distance bands, waiting-time rates, surcharges, the regulator URL and the date we last verified it. Hard-coding a fare anywhere else in the codebase is explicitly disallowed.
- 02
Address resolution
Your typed pickup and destination are resolved to coordinates by the Places Autocomplete UI (client) and the Geocoding API as a fallback (server). The Geocoding result is cached by a normalised hash of the address for 30 days, so the same address never bills twice.
- 03
Route planning
Coordinates flow into the Google Routes v2 API server-side, with the actual departure time so traffic predictions match the rate band that will apply. The response gives us distance, duration, expected tolls and a polyline. The result is cached by a geohash-bucketed key for 24 hours.
- 04
Zone + tariff selection
A point-in-polygon check resolves the origin to a fare zone (e.g. nsw_urban, melbourne_metro, qld_seq). For that zone, the fare engine selects the tariff whose active days and hours match the departure — peak overrides night, night overrides day, public-holiday overrides apply where the regulator schedules them.
- 05
Pure fare engine
A pure TypeScript function computes the fare deterministically: flagfall + banded distance + waiting time + booking/airport/PSL/high-occupancy/card surcharges. It does no I/O. The same inputs always produce the same outputs, which is what lets us cover sixty-plus scenarios per state in the test suite.
- 06
Rendering + caching
The result returns to your browser with a per-line breakdown, the matched tariff name, the regulator source URL, and a “last verified” date. The static map of the route is built from the polyline by Google’s Static Maps API and cached at the CDN edge.
Principles
Regulated maximum, not a quote
The number we show is the legal ceiling that a metered, ranked or hailed taxi can charge under the regulator’s schedule. Booked-app fares can be set by the operator and may differ — usually they are within a few dollars but they are not bound to the meter.
No hidden adjustments
We never apply secret multipliers, “convenience” fees or affiliate uplift. If the page shows A$54.12, that is what the regulator’s formula yields for that route, that band and the surcharges you selected.
Trust is earned per page
Every numerical claim links back to the regulator that publishes it. If you can’t open the source and verify the number yourself, we consider the page broken — and we’d like to know.
Why a real meter might differ
The regulated maximum is a ceiling. A handful of variables in any real ride can push the meter below our estimate, and a small number can push it above.
- Below us: the driver takes a shorter route, traffic moves faster than the routing prediction, or the operator runs a promotional discount.
- Above us: the trip crosses the slow-speed waiting-time threshold for longer than the route prediction expected; you add stops; the driver charges a cleaning fee for spillage or pet hair (state-capped, typically up to A$120).
- Out of scope: child-seat hire, oversized luggage, pets, and cancellation fees vary by operator and aren’t part of the regulated meter — we don’t quote them.
Verification cadence
Every tariff row in our schedule carries a last_verified_at field. We re-verify every state quarterly against the regulator’s primary source. A weekly CI job (scripts/verify-sources.ts) also fetches each source URL, normalises the response and SHA-256 hashes it — when the hash changes, the system opens a tracked tariff-review-needed issue before a human edits a single number in the schedule.
Last full audit: .
Spotted an error?
Email hello@taxi-fare.com.au with the URL of the page, the rate you saw, and a link to the regulator that disagrees with us. We aim to investigate within two business days.