# Methodology

**TaxiTools UK Taxi and Private Hire Licence Fees, v1.0.0**

How the figures were collected, what was verified by a person, and where the
limits are.

---

## 1. What counts as a source

Only the licensing authority's own material:

- its own website
- its own PDF fee schedule
- its own committee papers

Nothing else was used. In particular, three source types were tested during
collection and rejected:

**Search engine result summaries.** Barnsley showed £180 in a snippet against
£198 on the live page. Flintshire showed £610 against £730.73.

**Trade press.** Figures quoted in the trade press were checked against the
authority and did not match.

**Automated summarisation of a PDF.** A summarising tool reading a fee PDF
produced a validity period that was not in the document and denied an exemption
that was printed in bold on the page.

Each of those failures happened during this work. They are why the collection
method is what it is.

## 2. How each authority was read

1. The authority's licensing pages were fetched directly, with a normal browser
   user agent, from a domestic connection. Many authorities reject automated
   requests from data-centre addresses, so this cannot be done from a server.
2. A person read the fee schedule and wrote a concise factual summary.
3. The source domain, the exact source URL and the date of reading were
   recorded with it.
4. Where the authority published a figure in more than one place, the
   disagreement was recorded rather than resolved.

The 315 published records were read between **31 July and 8 August 2026**, with
individual records re-checked since. Every record carries its own date.

## 3. Why the fee fields are prose

Authorities structure charges in genuinely different ways: one, two, three and
five year durations; separate hackney, private hire and dual rates; instalment
options; application packages that bundle a test or a DBS; fees that differ by
vehicle age, fuel type or emissions.

Flattening that into numeric columns would require choosing which charge is
"the" fee, and that choice is not present in the source. The summaries keep the
structure the authority actually publishes, and the record says what each figure
covers.

A buyer who needs numeric columns for a specific comparison can derive them, and
should decide for themselves which components belong in the calculation.

## 4. How ambiguity is handled

Where a source is unclear, the record says so and `ambiguity_flag` is set to
`flagged`, with `ambiguity_types` naming the kind of doubt.

**Every one of the 315 published records was read in full and judged
individually.** This is a manual review, not a keyword scan, and the judgements
are held in a separate file so each can be inspected and disputed.

**122 of 315 published records carry a flag (39%).** The kinds:

| | | |
|---|---|---|
| `duration_unclear` | 57 | Licence period not stated or not confirmed |
| `schedule_lapsed` | 28 | Named schedule year has ended, no newer one found |
| `figure_absent` | 20 | A fee that would normally exist is not published |
| `sources_disagree` | 17 | The authority's own documents state different figures |
| `source_quality` | 13 | No fees page, scanned image, archive, or figures from forms |
| `not_adopted` | 11 | Proposal or draft not confirmed as ratified |
| `figure_uncertain` | 2 | The record itself says the reading warrants checking |

**What the review establishes, and what it does not.** It establishes that every
record was read and judged, and that the judgement is recorded. It does not find
doubt that was never written down: if an authority's page was unclear and the
researcher did not note it, no reading of the record reveals that.

**The review was itself wrong first time and was corrected.** A first pass was
made against a truncated view of each record and missed 13 cases where phrases
such as "duration not stated" sat at the end of a long fee string. The
superseded automatic scan caught all 13. Every record was then re-read in full.
The build still reports where the old scan and the review differ, because that
comparison is what exposed the error.

## 5. What was deliberately not done

- **No figure was estimated, inferred from a similar authority, or filled in to
  make a table look tidy.** Where a fee could not be found, the record is marked
  `not_published`, meaning no readable schedule was found during this research —
  not that none exists anywhere.
- **No fee was invented for an abolished authority.** Eden District Council was
  abolished in 2023 and its successor has not merged the legacy schedules. The
  record stays, unpopulated, explaining that.
- **The summaries are written by TaxiTools rather than copied.** An automated
  check rejects the release if any exported field contains a quoted span of
  forty characters or more.

  **That check detects quotation marks. It cannot detect unquoted copying or
  close paraphrase**, so it demonstrates the absence of long quoted spans and
  not the originality of the wording. Proving the latter would need each
  summary compared against its source or reviewed by hand, and neither has been
  done across the whole set.

## 6. Limits a buyer should plan around

**Fees change without notice.** Authorities revise schedules at committee,
usually but not reliably in line with the financial year. **Each record states
what TaxiTools found published when the source was checked on its
`checked_date`** — not that the figure was correct then, and not that it remains
so now. There is no mechanism in this version that detects a change between
checks.

**Source URLs decay.** Authorities reorganise their websites and withdraw
committee papers. Some links in this set will stop working.

**Some authorities block automated access.** Around one in twenty-five rejected
automated requests during collection and had to be read manually. This affects
how quickly the set can be refreshed.

**Coverage is England, Wales and Scotland.** Northern Ireland licenses taxis
through the Driver and Vehicle Agency under separate legislation rather than
through district councils, so it is not comparable and is not included.

**Refresh cadence is not yet committed.** The full set was collected in five
working days by one person. That establishes it is repeatable, but no refresh
interval is promised in v1.0 and none should be assumed.

## 7. Verification available to a buyer

Every published record carries the source domain, the exact URL and the date it
was read. Any figure can be checked at its source. That is the intended way to
evaluate this data, and a sample of ten authorities is supplied for exactly that
purpose.

## 8. How the release checks are themselves checked

Every automated check in this package carries a deliberately failing example
proving it can detect the fault it claims to detect. Nine such self-tests run
before any result is trusted, and if one fails the report states plainly that
every result below it is untrustworthy.

This exists because two checks in this package shipped containing a regular
expression that could never match anything. Both reported success on every run,
precisely because they were broken. A check that has never been observed to
fail establishes nothing.
