How do I check my internet speed on a Mac?
Measure your Mac's real internet speed from Terminal with Apple's built-in networkQuality tool, then use ping and curl to find out whether the slowdown is your Wi-Fi, your Mac, or your provider.
What this covers
When everything feels slow, the numbers matter more than the feeling. macOS includes a command-line speed test, and two more standard tools tell you whether the problem is raw throughput, latency, or simply the site you are visiting. This guide puts them in order so you can name the culprit instead of guessing.
Symptom
Measure download, upload and responsiveness with macOS networkQuality
Throughput is the first number you need, and macOS ships a hidden tool that reports it without any app or browser tab. Run it in Terminal and wait 15–30 seconds: the verbose output lists download capacity, upload capacity, and a responsiveness figure measured in round trips per minute. Compare the download figure with the speed you actually pay your provider for. If download looks fine but responsiveness is low, the link is not slow — it is buffering badly under load.
macOS has a hidden networkQuality tool that measures download, upload, and responsiveness without any app.
$ networkQuality -vCheck latency and packet loss with ping
Bandwidth alone does not explain stutter. A four-packet ping to a public host prints the min/avg/max round-trip times and, more importantly, the packet-loss percentage. Zero loss with a steady average under about 50 ms is healthy; loss above 1–2%, or wildly varying times, usually points at the Wi-Fi link rather than the provider. Run it once on Wi-Fi and once on Ethernet or a phone hotspot — if only the Wi-Fi run looks bad, your Mac is not the common factor.
Send a fixed number of ICMP echo requests and read the RTT min/avg/max summary and packet loss.
$ ping -c 4 example.comRule out a single dead website with curl
Before blaming your connection, check whether the site you care about is the one that is broken. A HEAD request with a short timeout returns the HTTP status line: 200 means the site answered fine, so the slowness is on your side; a timeout or a 5xx means the remote server is the problem and your Mac and router are innocent. Skip this step if everything is slow, not just one site.
Send a quick HTTP request from the terminal to check whether a site responds and what status it returns.
$ curl -I -L --max-time 10 https://example.comConfirm sustained real-world download speed with curl
A speed test measures a burst; a real transfer measures sustained throughput. This curl call pulls a 10 MB test file, throws the data away, and prints only the average download speed in bytes per second. Divide that number by roughly 125,000 to get Mbps (so 12,500,000 bytes/sec is about 100 Mbps). If this figure is far below what networkQuality reported, the bottleneck is local: weak Wi-Fi signal, a VPN, or another program competing for the link.
See how fast a specific server actually transfers data, in bytes per second, using plain curl.
$ curl -o /dev/null -w "Download speed: %{speed_download} bytes/sec\n" "https://proof.ovh.net/files/10Mb.dat"How to confirm it worked
Your networkQuality download figure is close to your plan's advertised speed, ping shows 0% packet loss, and the curl download speed lands in the same ballpark as the networkQuality result.
Sources
- What is the Network Quality test on MacEvidence: Apple documents the built-in network quality test and how Responsiveness (RPM) reflects capacity under load.
- networkQuality — macOS network quality testEvidence: Documents the networkQuality command-line tool and its -v verbose option that prints download/upload responsiveness.
- ping - Send ICMP ECHO_REQUEST packets to network hostsEvidence: Documents `-c count` to stop after N packets and `-i wait` for the interval, with usage examples like `ping -i 5 example.com` and round-trip time statistics.
- ping(8) man pageEvidence: Man page for ping: `-c count` stops after sending count ECHO_REQUEST packets and prints a summary of round-trip times, packet loss and `-i wait` interval control.
- curl — transfer data from or to a server (macOS man page)Evidence: Documents curl -I for a HEAD request, -L to follow redirects and --max-time to cap the total request time.
Last verified: 2026-09-22
Related guides
Diagnose and fix repeated Wi-Fi dropouts on macOS using built-in terminal tools: check your connection, read signal stats, reset the interface, and verify the link holds.
Find out why Spotlight returns no results — disabled indexing or a corrupted index — and rebuild it from the terminal.
Step-by-step Terminal guide to fix AirDrop on macOS: check awdl0, restart sharingd, bounce the wireless interface, and verify Bluetooth is healthy.