Benchmark report

PyPI thumbnail

Is the PyPI API slow?

Response times from 6 cities

Fast globally

PyPI responds quickly from all 6 test locations. Tokyo was fastest at 11 ms; San Francisco took 68 ms.

Fastest
11 ms
Tokyo
Slowest
68 ms
San Francisco
Successful requests
100%
6 locations

Response time around the world

Amsterdam 12ms typicalSan Francisco 68ms typicalMontreal 13ms typicalSingapore 14ms typicalTokyo 11ms typicalMumbai 11ms typical
  • JapanTokyo
    11 ms
  • IndiaMumbai
    11 ms
  • NetherlandsAmsterdam
    12 ms
  • CanadaMontreal
    13 ms
  • SingaporeSingapore
    14 ms
  • United StatesSan Francisco
    68 ms

Why is San Francisco slower?

In the controlled run of 4 October five cities finished in 12 to 17 ms with every phase in single digits: 2 ms to connect, 3 to 5 ms for the TLS handshake, 2 to 4 ms waiting for the first byte and 3 to 6 ms downloading the 230 KB. San Francisco took 60 ms and every phase grew with it: 12 ms to connect, 14 ms for TLS, 11 ms waiting and 23 ms downloading. When all four stages stretch together, the likely cause is a longer path to the cache that answered rather than a slower server. The Fastly homepage, served by the same CDN, shows the same San Francisco pattern.

Click the location to see each stage.

ConnectTLSServer waitDownload
United StatesSan Francisco
60 ms
Finding the server
13 ms
Reaching the server
12 ms
Setting up security
14 ms
Waiting for the server
11 ms
Receiving the response: most of the time
23 ms
Total
60 ms

Finding the server is measured once per location, so it sits outside these bars. Open a city to see it.

Bars show the typical request, so the parts add up to its total. Why

Compare all locations

Click a city to see its stage-by-stage breakdown.

ConnectTLSServer waitDownload
NetherlandsAmsterdam
14 ms
Finding the server
1 ms
Reaching the server
2 ms
Setting up security
4 ms
Waiting for the server
3 ms
Receiving the response: most of the time
5 ms
Total
14 ms
United StatesSan Francisco
60 ms
Finding the server
13 ms
Reaching the server
12 ms
Setting up security
14 ms
Waiting for the server
11 ms
Receiving the response: most of the time
23 ms
Total
60 ms
CanadaMontreal
14 ms
Finding the server
2 ms
Reaching the server
2 ms
Setting up security: most of the time
5 ms
Waiting for the server
3 ms
Receiving the response
4 ms
Total
14 ms
SingaporeSingapore
17 ms
Finding the server
2 ms
Reaching the server
2 ms
Setting up security
5 ms
Waiting for the server
4 ms
Receiving the response: most of the time
6 ms
Total
17 ms
JapanTokyo
12 ms
Finding the server
1 ms
Reaching the server
2 ms
Setting up security
3 ms
Waiting for the server
2 ms
Receiving the response: most of the time
5 ms
Total
12 ms
IndiaMumbai
13 ms
Finding the server
9 ms
Reaching the server
2 ms
Setting up security: most of the time
5 ms
Waiting for the server
3 ms
Receiving the response
3 ms
Total
13 ms

The phases come from the controlled run of 4 October 2026. Typical and slower times pool the daily requests. 6 of 6 test locations included: Amsterdam, San Francisco, Montreal, Singapore, Tokyo, Mumbai.

Finding the server is measured once per location, so it sits outside these bars. Open a city to see it.

Bars show the typical request, so the parts add up to its total. Why

PyPI still feels slow?

Check PyPI’s status page
Registry incidents are posted there. A slow install during one is not your network.
This is not a pip install benchmark
Wheel and source downloads come from files.pythonhosted.org, a separate host, and the simple index pip reads by default is a different document. Uploads and the website are not measured either.
A shield cache in front of the edges
Four Fastly addresses across our six cities, and the cache header named the same Washington-area cache everywhere, which suggests a shield cache in front of the edges. A slow result from the US West Coast matches what we see; elsewhere it would be unusual.

Response time over the last 29 days

Daily median of 5 requests per location, 11 September 2026 to 10 October 2026.
0250500 ms11 Sept10 OctMontreal, 11 September 2026: 116 ms, well above its usual level.Montreal, 14 September 2026: 153 ms, well above its usual level.Montreal, 15 September 2026: 189 ms, well above its usual level.Montreal, 18 September 2026: 359 ms, well above its usual level.Montreal, 19 September 2026: 81 ms, well above its usual level.Montreal, 21 September 2026: 82 ms, well above its usual level.Montreal, 28 September 2026: 81 ms, well above its usual level.Montreal, 2 October 2026: 83 ms, well above its usual level.Montreal, 3 October 2026: 57 ms, well above its usual level.Montreal, 4 October 2026: 57 ms, well above its usual level.Montreal, 5 October 2026: 68 ms, well above its usual level.Montreal, 10 October 2026: 122 ms, well above its usual level.

A dot marks a day well above that location’s usual level.

Show the numbers
DayAmsterdamSan FranciscoMontrealSingaporeTokyoMumbai
11 September 202611 ms67 ms116 ms ▲13 ms13 ms11 ms
12 September 202611 ms69 ms12 ms15 ms12 ms12 ms
13 September 202612 ms59 ms12 ms13 ms13 ms12 ms
14 September 202611 ms58 ms153 ms ▲10 ms12 ms12 ms
15 September 202611 ms59 ms189 ms ▲16 ms11 ms11 ms
16 September 202611 ms57 ms12 ms31 ms11 ms11 ms
17 September 202611 ms61 ms12 ms17 ms10 ms12 ms
18 September 202611 ms55 ms359 ms ▲13 ms12 ms12 ms
19 September 202611 ms57 ms81 ms ▲12 ms10 ms12 ms
20 September 202611 ms54 ms17 ms19 ms13 ms12 ms
21 September 202610 ms58 ms82 ms ▲13 ms13 ms11 ms
22 September 202612 ms56 ms14 ms14 ms12 ms12 ms
23 September 202611 ms60 ms11 ms19 ms12 ms11 ms
24 September 202611 ms66 ms14 ms13 ms12 ms11 ms
25 September 202610 ms54 ms13 ms14 ms11 ms10 ms
26 September 202611 ms57 ms11 ms14 ms12 ms12 ms
27 September 202611 ms56 ms11 ms14 ms11 ms11 ms
28 September 202612 ms68 ms81 ms ▲13 ms13 ms11 ms
29 September 202613 ms59 ms13 ms14 ms12 ms11 ms
30 September 202613 ms62 ms12 ms13 ms11 ms12 ms
1 October 202612 ms63 ms10 ms13 ms10 ms11 ms
2 October 202616 ms66 ms83 ms ▲15 ms12 ms12 ms
3 October 202612 ms81 ms57 ms ▲15 ms11 ms12 ms
4 October 202613 ms60 ms57 ms ▲14 ms11 ms11 ms
5 October 202610 ms67 ms68 ms ▲12 ms10 ms11 ms
6 October 202612 ms71 ms12 ms12 ms11 ms12 ms
7 October 202612 ms73 ms12 ms13 ms10 ms12 ms
9 October 202610 ms70 ms12 ms14 ms12 ms11 ms
10 October 202611 ms65 ms122 ms ▲15 ms12 ms11 ms

About this measurement

GET pypi.org/pypi/pip/json · 64 to 65 requests per location over 13 daily runs · 27 September 2026 to 10 October 2026

What we tested · Package registry. GET pypi.org/pypi/pip/json: the pip project's metadata, about 230 KB of JSON, cached at Fastly's edge for 15 minutes.

How LatencyRadar measures response time →

Technical details

Doesn’t measure: pip install: the simple index and wheel downloads from files.pythonhosted.org, or the website.

One PyPI surface: the JSON metadata document for the pip project, about 230 KB that pypi.org serves through Fastly's cache with a 15-minute lifetime. Tools such as pip, Poetry and dependency scanners read this kind of document to learn which versions exist; it is the lookup step of a Python install. It does not stand for the download step: wheels and source archives come from files.pythonhosted.org, a separate host we measure as its own surface, and the simple index that pip reads by default is a different document again. From outside we cannot see whether the cache answered or the request went through to PyPI's origin; with a 15-minute cache lifetime, a slow request may simply be the first one after expiry.

Between 27 September and 10 October 2026 Tokyo, Mumbai, Amsterdam, Montreal and Singapore had a typical time of 11 to 14 ms, and San Francisco 68 ms. San Francisco's daily median stayed between 56 and 81 ms on all 13 runs, so the gap is steady rather than one bad day. Montreal's typical hides a split: 10 to 13 ms on seven days and 57 to 122 ms on the other six (28 September and 2, 3, 4, 5 and 10 October), which the pooled typical absorbs and the history chart shows. Those days give Montreal a slower time of 122 ms, against 13 to 20 ms in Amsterdam, Singapore, Tokyo and Mumbai and 94 ms in San Francisco. Mumbai was the steadiest city, at 11 or 12 ms on every run. Compare npm, whose registry root is a two-byte cached document, and crates.io, whose metadata is not cached at all.

Test locationTypical response timeSlower response timeRequests
Amsterdam12 ms16 ms65
San Francisco68 ms94 ms65
Montreal13 ms122 ms65
Singapore14 ms20 ms64
Tokyo11 ms17 ms65
Mumbai11 ms13 ms65

Typical: half of the requests finished within this time (technical: p50). Slower: 95% of requests finished within this time (technical: p95). Statistics

Request
GET pypi.org/pypi/pip/json
Measured from
Amsterdam · San Francisco · Montreal · Singapore · Tokyo · Mumbai
Requests
Daily measurements from 27 September 2026 to 10 October 2026. 6 of 6 test locations included: Amsterdam, San Francisco, Montreal, Singapore, Tokyo, Mumbai. · 27 September 2026 to 10 October 2026
Timings taken
DNS, connect, TLS, waiting for the server, download
Report coverage
6 of 6 test locations included: Amsterdam, San Francisco, Montreal, Singapore, Tokyo, Mumbai.
Coverage changes
Mumbai (measured since 7 September 2026) joined this report on 21 September 2026. Earlier daily bands keep their previous location set.
Daily requests in each location
Amsterdam: 65 · San Francisco: 65 · Montreal: 65 · Singapore: 64 · Tokyo: 65 · Mumbai: 65
Typical response time
Median of the eligible daily requests in each included location.
Slower response time
The 95th percentile of the same eligible daily requests in each included location.

PyPI API

https://pypi.org/pypi/pip/json

Independent measurement by LatencyRadar. Not affiliated with PyPI. · How we measure (v1.3)

How fast is your API around the world?

Run a free speed test from multiple cities and find out where your users are waiting. No setup, no account required.

Test my API

No account required · Takes about 30 seconds.

More benchmarks

All benchmarks →