
Virgin Media O2 offers the fastest widely available broadband in the UK with gigabit across almost all of its network. This review weighs those speeds against post-contract price jumps, upload limits and cancellation friction.

Compare at your address
Drop in your postcode for the live shortlist, speeds, prices, and which providers actually reach your line.
A speed number on its own is meaningless. The Health Check takes a measurement, compares it to the fastest line your address supports, and lands you on one of five outcomes. Here's what's inside the box.
The Health Check runs Cloudflare's open-source measurement engine (@cloudflare/speedtest) directly in your browser. It opens TCP connections to Cloudflare's nearest UK edge point of presence and pushes / pulls data in both directions while sampling latency between the bursts.
The four numbers we surface:
We don't run our own measurement servers, Cloudflare does. Their UK network includes points of presence in London, Manchester, Edinburgh, Cardiff, and a handful of smaller metros. Your browser is automatically routed to whichever is closest by network latency, not physical distance.
That's also why your number might differ from your ISP's own speed test. ISP-hosted tests usually run against a server inside their own network, they bypass internet peering entirely. That gives a flattering number but doesn't represent what you experience when you load Netflix or BBC iPlayer. Our measurement uses real-world internet routing, like a streaming service or a Zoom call would.
We join your measurement to Ofcom Connected Nations data. Specifically, the maximum supported download speed for your postcode, the upper bound of what your line could deliver today, accounting for the infrastructure that physically reaches your address.
The Connected Nations dataset is refreshed quarterly and disaggregated to the postcode level (with disclosure suppression on very small postcodes). We import the bulk release into broadband_data and look up max_download_speed by postcode at diagnosis time. No external Ofcom API call happens during your test, the answer comes from our local copy and lands in milliseconds.
Two ratios drive the routing:
The five outcomes:
The thresholds (85 %, 70 %, 2×, 1 % packet loss) are deliberately static in v1. Ofcom's voluntary code of practice uses 50 % of advertised average as the intervention threshold (under which the provider must escalate). We use 85 % as the aspirational threshold, getting only 70 % of what you pay for is technically within Ofcom's range but isn't “fine”. The 70 % bottom band is where we tell you it's actively under-performing. The 1 % packet-loss mark matches the “noticeable degradation” threshold from the same Ofcom code, anything above it is actionable as a fault, regardless of throughput.
The static thresholds above are our v1 hypothesis. They sit in code, named, with comments, see lib/speed-test/diagnosis.ts in our repository.
We commit to re-baselining quarterly against actual data once public.speed_tests has enough rows to compute UK-wide percentiles. If the median UK measurement shifts materially between calibration windows, we update the thresholds and note the change in this section's change log. The four-branch shape stays constant; the ratios that route between them are tuned, not invented.
Every completed Health Check writes one row to public.speed_tests. The row contains:
We do not store your IP address, your name, your email (unless you explicitly opt in to alerts), or any cookie. Country comes from Vercel's edge-injected header, we read it once, write the two-letter code to the row, and never touch the IP itself.
The data feeds two downstream surfaces:
No individual row is ever shared, exported, or published. Aggregate insights (e.g. “X % of Virgin Media tests in postcode district SW1 returned < 50 Mbps in the last month”) might inform an editorial piece, but the underlying rows stay on our server.
Branch B (underused address) is the only branch that recommends a specific deal. The recommendation is the cheapest deal in our catalogue whose speed is at least 1.5× what you measured, biased toward fixed-price deals when prices are within 10 % of each other.
Clicking through doesn't fire an affiliate URL directly. You land on the deal's product page, where the existing address-gate verifies your postcode is in service before handing you off to the provider. We get paid only when the provider attributes a sign-up, not for clicks alone, so the recommendation logic has no incentive to push you toward a deal you can't actually buy.
If a diagnosis looks wrong, the thresholds feel off, or you spot a discrepancy between our number and a same-device test elsewhere, please get in touch. We read every email and the threshold-tuning policy above means the data you flag actually changes the engine.
BT broadband is reliable, available almost everywhere and backed by useful extras like Complete Wi-Fi. It also charges a premium for Openreach lines other providers sell cheaper. Our review covers speeds, prices, complaints and who BT actually suits.