---
name: ookla-speedtest-open-data-ingestion
description: "How to get Ookla Speedtest Open Data data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load an Ookla quarterly fixed-network file into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/ookla-speedtest-open-data
Provider: https://github.com/teamookla/ookla-open-data
Checked against the provider's documentation: 2026-11-01

## Access
- No account, key or signed AWS request is needed for the public S3 file.
- The data licence permits non-commercial use and requires attribution and ShareAlike distribution.

## Request
```bash
curl -O 'https://ookla-open-data.s3.amazonaws.com/parquet/performance/type=fixed/year=2019/quarter=1/2019-01-01_performance_fixed_tiles.parquet'
```

## Format
Apache Parquet rows for zoom-16 tiles with WKT geometry, speed and latency averages, test and device counts, quadkey and centroid coordinates where available.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Ookla 2019 Q1 fixed-network performance tiles -> pandas -> Parquet. No key."""
import io
import requests
import pandas as pd

URL = "https://ookla-open-data.s3.amazonaws.com/parquet/performance/type=fixed/year=2019/quarter=1/2019-01-01_performance_fixed_tiles.parquet"
r = requests.get(URL, timeout=120)
r.raise_for_status()
df = pd.read_parquet(io.BytesIO(r.content))
df.to_parquet("ookla_fixed_2019_q1.parquet", index=False)
print(len(df), "tiles", int(df["tests"].sum()), "tests", "median download kbps", int(df["avg_d_kbps"].median()))
```
Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 4877036 tiles 69942821 tests median download kbps 29883

## Limits
- Rate limit: Not stated.
- Files are quarterly aggregates and individual Parquet files can be hundreds of megabytes.
- The licence is non-commercial and ShareAlike.

## Quirks
- The tile field is WKT in EPSG:4326 even though the aggregation grid is based on zoom-16 Web Mercator tiles.
- avg_lat_down_ms and avg_lat_up_ms begin with Q4 2022, are Parquet-only and can be null.
- Historical aggregates can change after reaggregation, and regional availability is subject to change.

## Terms and attribution
- The data is licensed CC BY-NC-SA 4.0 for non-commercial reuse.
- Use the provider's suggested attribution and retain ShareAlike terms on adapted data.
- Terms page: https://github.com/teamookla/ookla-open-data#license

## Sources
- https://raw.githubusercontent.com/teamookla/ookla-open-data/master/README.md: "The tile aggregates start in Q1 2019 and go through the most recently completed quarter **(Q1 2026)**."
- https://raw.githubusercontent.com/teamookla/ookla-open-data/master/README.md: "Data is provided in both Shapefile format as well as Apache Parquet"
- https://raw.githubusercontent.com/teamookla/ookla-open-data/master/README.md: "Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)"

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab-jet.vercel.app/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
