The short version
- It runs Cloudflare’s open-source test engine in your browser and measures your connection to the nearest Cloudflare server.
- It reports download, upload, latency, jitter and bufferbloat. It does not measure packet loss.
- A run takes about 20 seconds, never longer than 45 seconds, and uses up to about 186 MB of data.
- Your results stay in your browser. They are not sent back to Cloudflare, or to us.
What happens when you run the test
- Your browser connects to a Cloudflare speed-test server near you. Nothing is installed.
- It sends 26 quick round trips carrying no data, to time how long each reply takes. That gives your idle latency, and how much those times vary is your jitter.
- It downloads files that start small and get bigger, and stops as soon as it has a reliable reading. No single transfer is larger than 25 MB.
- It does the same for upload.
- While the connection is busy with those transfers, it keeps timing round trips. The extra delay compared with idle is your bufferbloat.
- NetCheckPro compares the numbers with targets for each use, such as Zoom, Teams and gaming, and shows a verdict.
A typical run takes about 20 seconds. If your connection is slow or congested it can take longer, and at 45 seconds it stops and reports what it has measured, as long as latency, download and upload were all captured. Data use is up to about 186 MB in the worst case, which only happens on very fast connections where every planned transfer runs.
What each number means
| Result | What it tells you | How NetCheckPro measures it |
|---|---|---|
| Download | How fast data arrives. It matters for streaming, downloads and the video you receive. | Files of increasing size are downloaded. The reading comes from the faster requests, so one slow request does not drag it down. |
| Upload | How fast data leaves your device. It matters for your own video, screen sharing and backups. | The same method, in the other direction. |
| Latency | The delay of a round trip to the server, in milliseconds. Often called ping. | The median of 26 round trips with nothing else running. The server’s own processing time is subtracted using its timing header, so the figure reflects the network, not Cloudflare’s computer. |
| Jitter | How much latency changes from one reply to the next. It matters for calls and games. | The average difference between consecutive idle latency samples. |
| Bufferbloat | Extra delay when your connection is busy. A router queue that fills up makes calls and games lag while someone uploads or streams. | Latency measured during the download and upload steps, compared with idle. We use the worse of the two directions. |
| Packet loss | Data that never arrives. | Not measured. A browser cannot send the raw packets this needs. The packet loss test page shows how to measure it with ping. |
Jitter and bufferbloat are the two numbers a normal speed test leaves out, and they are the usual reason a call sounds robotic or a game lags while the speed test looks fine. The jitter guide explains what good jitter looks like.
Bufferbloat grades
The grade is the extra delay measured while your connection is busy. The bands follow the widely used scale from Waveform’s bufferbloat test. You can try it on the bufferbloat test page.
| Grade | Extra delay when busy | What it feels like |
|---|---|---|
| A+ | under 5 ms | Delay stays flat under load. Nothing to fix. |
| A | 5 to 30 ms | Barely noticeable. Calls and games stay smooth. |
| B | 30 to 60 ms | Occasional lag spikes when the line is busy. Usually fine. |
| C | 60 to 200 ms | Noticeable lag in calls and games while someone uploads or streams. |
| D | 200 to 400 ms | Calls and games struggle whenever the connection is busy. |
| F | 400 ms or more | Severe. Anything real-time breaks when the line is busy. |
If the test cannot load your connection enough to measure this, which can happen on very fast lines, bufferbloat is left out rather than guessed.
How numbers become a verdict
Each use case has its own targets. Starting from 100, points come off for every measurement that misses its target, and more for a poor result than for a borderline one. A score of 80 or more is Good, 55 to 79 is Weak, and below 55 is Poor. The overall verdict is the worst of the five.
| Use case | Download | Upload | Latency good / poor | Jitter good / poor | Bufferbloat good / poor |
|---|---|---|---|---|---|
| Zoom readiness | 5 Mbps | 3 Mbps | 50 / 120 ms | 10 / 20 ms | 30 / 100 ms |
| Teams readiness | 5 Mbps | 3 Mbps | 60 / 130 ms | 15 / 25 ms | 30 / 100 ms |
| Gaming readiness | 15 Mbps | 3 Mbps | 40 / 70 ms | 5 / 15 ms | 15 / 50 ms |
| Streaming readiness | 25 Mbps | 1 Mbps | 100 / 250 ms | 30 / 60 ms | 100 / 300 ms |
| VPN suitability | 20 Mbps | 5 Mbps | 80 / 180 ms | 20 / 40 ms | 50 / 150 ms |
Download and upload are minimums. For latency, jitter and bufferbloat the first figure is the good limit and the second is the poor limit; between them is borderline.
These are our own readiness settings, informed by vendor guidance, not vendor requirements. Where Microsoft, Cisco and others publish figures, we cite them in the Teams guide and the jitter guide.
Why results differ from other tests
- Different servers. A test measures the path to its own server. Ours measures the path to the nearest Cloudflare server.
- Different methods. Tests differ in how many connections they open, how long they run and how they pick the final number.
- Your connection moves. Wi-Fi conditions, other devices and the time of day all change from minute to minute.
- Browser overhead. A page in a browser tab is not a dedicated measuring tool.
Expect the same ballpark, not identical numbers. A big gap usually means something on your side changed between the two tests.
What a browser test cannot do
- Measure packet loss. The results say “not measured” instead of guessing. Use the ping commands on the packet loss test page.
- Measure the whole path. It tests your connection to Cloudflare. A fault inside one app’s own servers will not show.
- Separate Wi-Fi from your provider. Over Wi-Fi, the result includes Wi-Fi. Test again with an Ethernet cable to isolate it.
- Reach full gigabit speeds. To limit data use, no transfer is larger than 25 MB, so on very fast connections the result may read lower than the true speed.
- Catch an intermittent problem. It is one moment in time. Run it when the problem is happening.
How to get a more accurate result
- Use an Ethernet cable, or stand near the router if you are on Wi-Fi.
- Pause downloads, updates, cloud backups and streams on every device.
- Turn off your VPN, unless the VPN is what you want to test.
- Run the test three times and compare the results.
- Test at the time of day the problem happens.
What happens to your results
The test talks to Cloudflare’s speed-test servers only. Your results are calculated in your browser and are not sent back to Cloudflare or to our servers. If you accept analytics, we record only the overall verdict, a score, the bufferbloat grade and the page you were on. The details are in the privacy policy.
The engine is Cloudflare’s: see its project page. The interpretation, meaning the targets and verdicts above, is ours.
Sources
Figures attributed to a vendor come from the pages below. Thresholds marked as NetCheckPro guidelines are our own rules of thumb, not an industry standard.
- Cloudflare speed test engine (@cloudflare/speedtest) – The open-source (MIT) measurement engine this test runs in your browser.
- RFC 3550: RTP, a transport protocol for real-time applications – IETF. The formal definition of jitter for real-time media. Our idle jitter is a simpler measure: the average change between consecutive latency samples.