Benchmark report

PyPI thumbnail

Is the PyPI API slow?

Response times from 5 cities

Fast globally

PyPI responds quickly from all 5 test locations. Amsterdam was fastest at 12 ms; San Francisco took 59 ms.

Fastest
12 ms
Amsterdam
Slowest
59 ms
San Francisco
Successful requests
100%
5 of 6 locations

Response time around the world

Amsterdam 12ms typicalSan Francisco 59ms typicalMontreal 12ms typicalSingapore 14ms typicalTokyo 13ms typicalMumbai —
  • NetherlandsAmsterdam
    12 ms
  • CanadaMontreal
    12 ms
  • JapanTokyo
    13 ms
  • SingaporeSingapore
    14 ms
  • United StatesSan Francisco
    59 ms
  • IndiaMumbai
    Collecting since 7 Sept 2026

Why is San Francisco slower?

In the controlled run of 7 September four cities finished in 12 to 15 ms with every phase in single digits: 2 to 3 ms to connect, 3 to 5 ms for the TLS handshake, 2 to 4 ms waiting for the first byte and 3 to 4 ms downloading the 230 KB. San Francisco took 57 ms and every phase grew with it: 11 ms to connect, 13 ms for TLS, 11 ms waiting and 22 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
57 ms
Finding the server
10 ms
Reaching the server
11 ms
Setting up security
13 ms
Waiting for the server
11 ms
Receiving the response: most of the time
22 ms
Total
57 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
12 ms
Finding the server
2 ms
Reaching the server
2 ms
Setting up security: most of the time
4 ms
Waiting for the server
2 ms
Receiving the response
4 ms
Total
12 ms
United StatesSan Francisco
57 ms
Finding the server
10 ms
Reaching the server
11 ms
Setting up security
13 ms
Waiting for the server
11 ms
Receiving the response: most of the time
22 ms
Total
57 ms
CanadaMontreal
15 ms
Finding the server
2 ms
Reaching the server
3 ms
Setting up security: most of the time
5 ms
Waiting for the server
4 ms
Receiving the response
3 ms
Total
15 ms
SingaporeSingapore
12 ms
Finding the server
3 ms
Reaching the server
2 ms
Setting up security: most of the time
4 ms
Waiting for the server
3 ms
Receiving the response
3 ms
Total
12 ms
JapanTokyo
13 ms
Finding the server
2 ms
Reaching the server
3 ms
Setting up security
3 ms
Waiting for the server
3 ms
Receiving the response: most of the time
4 ms
Total
13 ms

The phases come from the controlled run of 7 September 2026. Typical times pool daily requests; slower times use controlled full runs. 5 of 6 test locations included: Amsterdam, San Francisco, Montreal, Singapore, Tokyo.

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 five 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 30 days

Daily median of 5 requests per location, 13 August 2026 to 12 September 2026.
0100200 ms13 Aug12 Sept5 locations joinedMumbai joinedMontreal, 29 August 2026: 57 ms, well above its usual level.Montreal, 2 September 2026: 119 ms, well above its usual level.Montreal, 11 September 2026: 116 ms, well above its usual level.Singapore, 27 August 2026: 108 ms, well above its usual level.Singapore, 29 August 2026: 55 ms, well above its usual level.Singapore, 31 August 2026: 57 ms, well above its usual level.

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

Show the numbers
DayAmsterdamSan FranciscoMontrealSingaporeTokyoMumbai
27 August 202613 ms69 ms13 ms108 ms ▲13 ms
28 August 202611 ms69 ms13 ms18 ms13 ms
29 August 202610 ms61 ms57 ms ▲16 ms13 ms
30 August 202612 ms59 ms13 ms14 ms13 ms
31 August 202611 ms54 ms11 ms57 ms ▲12 ms
1 September 202611 ms59 ms11 ms12 ms14 ms
2 September 202611 ms57 ms119 ms ▲14 ms13 ms
3 September 202612 ms56 ms11 ms14 ms14 ms
4 September 202612 ms64 ms13 ms18 ms13 ms
5 September 202612 ms56 ms12 ms15 ms16 ms
6 September 202613 ms57 ms12 ms16 ms14 ms
7 September 202612 ms61 ms13 ms14 ms12 ms12 ms
8 September 202612 ms59 ms11 ms12 ms16 ms11 ms
9 September 202612 ms56 ms11 ms17 ms14 ms11 ms
10 September 202611 ms55 ms13 ms13 ms14 ms12 ms
11 September 202611 ms67 ms116 ms ▲13 ms13 ms11 ms
12 September 202611 ms69 ms12 ms15 ms12 ms12 ms

About this measurement

GET pypi.org/pypi/pip/json · 70 requests per location over 14 daily runs · 30 August 2026 to 12 September 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.

Not measured: wheel downloads, the simple index, uploads, the pypi.org website or search. 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 30 August and 12 September 2026 Amsterdam, Montreal, Singapore and Tokyo had a typical time of 12 to 14 ms and San Francisco 59 ms. San Francisco's daily median stayed between 54 and 69 ms on all 14 runs, so the gap is steady rather than one bad day. Montreal's typical is 12 ms, but its daily median jumped to 119 ms on 2 September and 116 ms on 11 September before returning; Singapore had a 57 ms day on 31 August. Singapore's slower time of 43.5 ms is the median of two controlled runs that disagreed: 73 ms on 30 August and 14 ms on 7 September. 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 ms18 ms20
San Francisco59 ms65 ms20
Montreal12 ms22 ms20
Singapore14 ms44 ms20
Tokyo13 ms16 ms20
MumbaiCollecting since 7 Sept 2026

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
Requests
Daily measurements from 30 August 2026 to 12 September 2026. 5 of 6 test locations included: Amsterdam, San Francisco, Montreal, Singapore, Tokyo. · 30 August 2026 to 12 September 2026
Timings taken
DNS, connect, TLS, waiting for the server, download
Report coverage
5 of 6 test locations included: Amsterdam, San Francisco, Montreal, Singapore, Tokyo.
Daily requests in each location
Amsterdam: 70 · San Francisco: 70 · Montreal: 70 · Singapore: 70 · Tokyo: 70
Typical response time
Median of the eligible daily requests in each included location.
Slower response time
Median of recent controlled full-run p95 values in each included location.

PyPI API

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

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

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 →