---
name: adsb-lol-ingestion
description: "How to get adsb.lol Open Flight Data data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Load live adsb.lol military aircraft into pandas and Parquet

Source entry: https://signal-lab-jet.vercel.app/datasets/adsb-lol
Provider: https://www.adsb.lol/docs/open-data/api
Checked against the provider's documentation: 2026-11-04

## Access
- No account or key for the public v2 API.
- Daily historical traces are separate GitHub releases.

## Request
```bash
curl 'https://api.adsb.lol/v2/mil'
```

## Format
JSON with an ac aircraft array and message metadata; fields can include identity, altitude, speed, track, position, quality and observation age.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""Live adsb.lol military aircraft -> pandas -> Parquet. No key."""
import json
import requests
import pandas as pd

URL = "https://api.adsb.lol/v2/mil"
r = requests.get(URL, timeout=60)
r.raise_for_status()
payload = r.json()
df = pd.json_normalize(payload.get("ac", []), sep=".")
for col in df.select_dtypes(include="object"):
    df[col] = df[col].map(lambda x: json.dumps(x, sort_keys=True) if isinstance(x, (list, dict)) else str(x) if x is not None else None)
df.to_parquet("adsb_lol_military_live.parquet", index=False)
with_pos = int((df["lat"].notna() & df["lon"].notna()).sum()) if len(df) and "lat" in df and "lon" in df else 0
print(len(df), "military aircraft;", with_pos, "with positions; message", payload.get("msg"))
```
Run by us on 2026-11-04 (python 3.13.5 | pandas 3.1.0 | pyarrow 26.0.0 | requests 2.34.2). Result: 443 military aircraft; 328 with positions; message No error

## Limits
- Public API rate limit: Not stated.
- Keys may be required in the future; production users are asked to make contact.

## Quirks
- The snapshot changes on every request.
- Coverage and identity fields can be incomplete.
- Use seen and seen_pos to reject stale observations.

## Terms and attribution
- The API and public data are ODbL 1.0.
- Attribution and share-alike obligations can apply.
- Terms page: https://opendatacommons.org/licenses/odbl/1.0/

## Sources
- https://api.adsb.lol/docs: "The license for the API as well as all data ADSB.lol makes public is ODbL."
- https://www.adsb.lol/docs/open-data/historical: "one release = one day of the whole sky, as gzip-compressed JSON written by readsb."

## 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.
