OONI Measurement Data and API
OONI Measurement Data and API
OONI publishes volunteer network-interference measurements through a JSON API and as compressed JSONL files in a public S3 bucket. API metadata includes time, country code, network ASN, test name, input, anomaly and failure flags plus a raw-measurement URL; no key is needed for read access.
Required Attribution:
Credit OONI as the data source, link the CC BY-NC-SA 4.0 licence, and indicate changes.
Coverage
Measurements come from volunteer probes worldwide, and the checked API returned archived records beginning 5 December 2012. Accepted measurements are exposed rapidly through OONI Explorer and batched to S3 once an hour; API searches cannot span more than 180 days per request and are not intended for bulk extraction.
Verdict
A network-risk signal for detecting possible censorship, blocking, middleboxes and service reachability changes by country and ASN. Anomaly and failure flags are test outputs, not confirmed interference; compare repeated measurements, controls and OONI's scoring fields before acting. Coverage follows volunteer probe activity and is uneven across places, networks and time. Raw measurements can contain tested URLs and may unintentionally contain identifying material in headers or metadata, so minimize collection and avoid redistributing sensitive fields.
Get the free weekly email
Free weekly email of newly verified free data. Unsubscribe by emailing us.
By entering your email and clicking Subscribe, you agree to receive the Signal Lab weekly email from Quantum Data Technologies Ltd., 3200-650 West Georgia Street, Vancouver, BC V6B 4P7, Canada (signal-lab@qdt.ai). You can unsubscribe at any time: reply "unsubscribe" to any email or write to signal-lab@qdt.ai. See our Privacy Policy.
Use in your agent
Load recent OONI measurement metadata into pandas and Parquet. Checked against the provider's documentation on Nov 1, 2026.
Access
- No key or account is needed for the public measurement search API.
- Use the public S3 JSONL archive instead of paging through the API for bulk extraction.
Request
curl 'https://api.ooni.io/api/v1/measurements?limit=100&order=desc'Format
JSON object with pagination metadata and result records containing measurement ID and time, probe country and ASN, test name, input, anomaly, confirmation and failure flags, scores and raw-measurement URL.
Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
"""Recent OONI measurement metadata -> pandas -> Parquet. No key."""
import requests
import pandas as pd
URL = "https://api.ooni.io/api/v1/measurements"
params = {"limit": 100, "order": "desc"}
r = requests.get(URL, params=params, timeout=60)
r.raise_for_status()
payload = r.json()
df = pd.json_normalize(payload["results"], sep="_")
df["measurement_start_time"] = pd.to_datetime(df["measurement_start_time"], utc=True)
df.to_parquet("ooni_recent_measurements.parquet", index=False)
print(len(df), "measurements", df["probe_cc"].nunique(), "countries", df["measurement_start_time"].min().isoformat(), "to", df["measurement_start_time"].max().isoformat())Run by us on 2026-11-01 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 100 measurements 2 countries 2026-11-01T17:39:06+00:00 to 2026-11-01T18:14:11+00:00
Limits
- Rate limit: Not stated.
- A measurement API query cannot span more than 180 days.
- The API is not designed for tens of thousands of measurements or many gigabytes; use the S3 archive for bulk access.
Quirks
- anomaly means a measurement needs attention; confirmed and failure are separate fields and should not be collapsed into one blocking label.
- Volunteer probe coverage varies sharply by country, ASN, test and date.
- Raw measurements can include tested URLs and can unintentionally include identifying content in headers or metadata.
Terms and attribution
- Published OONI data is CC BY-NC-SA 4.0.
- Attribute OONI, keep reuse non-commercial, indicate changes and apply ShareAlike terms.
Sources
- https://raw.githubusercontent.com/ooni/data/main/Readme.md: “Measurements are stored temporarily and then batched together, compressed and uploaded to the S3 bucket once every hour.”
- https://raw.githubusercontent.com/ooni/data/main/Readme.md: “the OONI API, is not designed for large data transfers”
- https://raw.githubusercontent.com/ooni/license/master/data/LICENSE.md: “Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License”
Information and education only. Not financial, investment, legal or tax advice. Listings can be inaccurate, incomplete or out of date and are provided "as is". Free tiers, limits and licenses belong to each provider and can change, so check the provider's own terms before you rely on them. Terms & Disclaimer