Open Carrier Data is a public database of mobile carrier settings for
open-source phone systems, kept as neutral JSON and generated into
Android files.
This page is the front door. The README carries the details. Phones
never load this site at runtime.
What you get today
The public repository holds three things you can use today.
Neutral carrier profiles as JSON
One file per carrier match under
carriers/open/.
Each profile carries match rules, capabilities, APN rows, and
reviewed CarrierConfig values. Sources are merged into one
carrier-centered record.
Generated Android files
generated/android/
holds apns-conf.xml,
carrier-config-list.xml, lookup.json,
and metadata.json.
The APN XML targets database version 8.
A device catalog with honest status counts
generated/devices/
lists 42,512 Android devices and 183 Apple products. Every device
carries one status that says how far carrier-data discovery got.
A listed device is not a supported device.
Get the data
Pick the way that matches how much of the repository you want.
Clone and validate everything
To get the profiles, the generated files, and the tools, run this from any folder.
The resolver also takes --spn, --gid1,
--gid2, --iccid, --imsi, and
--android-carrier-id. With --mccmnc alone it
returns only the broad profile. Profiles keyed by SPN, GID, IMSI, or
ICCID appear only when you pass those values, and the output lists
matches in generic-to-specific order. A more specific profile is an
overlay on the broad one, not a replacement.
How it is built
Data moves through five stages before it reaches the public repository.
Sources. Maintained upstreams such as AOSP,
LineageOS, GNOME, Apple, Google, and Samsung. Each source family
has one upstream and a recorded check date.
Private import. A private repository turns each
source into candidate observations. Raw vendor files stay there.
Sanitizer. One tool merges observations per
carrier, drops private fields, quarantines stale or conflicting
data, and writes neutral profiles.
Public profiles. The result lands in
carriers/open/ with an evidence index that names the
source behind every fact and the exact revision of each public
source snapshot. Samsung observations carry check dates in the
device catalog index instead.
Generated files. Generators build the Android
files and the device catalog. Public CI runs the validators on
every change to main and every pull request, and a
daily job runs them in strict mode.
No profile is verified on a phone yet. The project has no external
users yet. Treat every value as a sourced claim, not as a tested
setting.
What each device status means
Every Android device in the catalog carries exactly one of these statuses.
Status
Devices
Meaning
inventory_only
39,413
Listed by a maintained inventory, nothing else known
source_checked_no_artifact
1,275
Vendor scope checked in full, no current artifact
exact_source_indexed
997
An exact vendor artifact is indexed with a digest
exact_source_extracted
402
Artifact downloaded and integrity-checked
exact_carrier_data_observed
355
Carrier evidence names this exact model
source_not_queryable
70
Inventory lacks the identifier the vendor service needs
To re-check these counts, run this from the clone.
ls carriers/open | wc -l
python3 tools/validate_device_catalog.py generated/devices
python3 -c 'import json; print(json.load(open("generated/devices/index.json"))["platforms"]["android"]["carrier_data_coverage_counts"])'
head -2 generated/android/apns-conf.xml
python3 -c 'import json; e=json.load(open("generated/evidence-index.json")); print(sum(p["verified_observation_count"] for p in e["profiles"]), min(s["checked_at"] for s in e["source_snapshots"]))'
Limits to read before you ship
Read these before you ship the data anywhere.
An MVNO without its own SPN, GID, or IMSI prefix in any source
merges into the host network's profile. No profile names LIDL
Connect, which runs on Vodafone Germany, so a LIDL Connect SIM
resolves the 26202 profiles with Vodafone's settings.
When sources disagree on a CarrierConfig value or an add-on, the
sanitizer leaves the value out instead of picking one. Conflicting
APN rows are all published as variants, current phone makers'
rows first. Conflicting capabilities become
conditional. The evidence index records each conflict.
The four capability values in plain words.
supported: at least one phone maker's settings for
this SIM turn the feature on; it does not tell you that the carrier
still offers it, that your plan includes it, or that your phone is
allowed. conditional: the sources disagree; it often
works. unsupported: the carrier's own settings, or two
independent sources, turn it off. unknown: no
reliable source, not a no.
A carrier can still block a feature its settings turn on: a list
of approved phone models, an option you must book, a service the
operator has ended (MMS in Germany), roaming limits, or the Wi-Fi
network you use. Only a test with your SIM, plan and phone shows
these.
The validators reject a source snapshot whose checked_at
is older than 180 days when run with --freshness fail.
A hosted job re-checks ten source families every week, and since
2026-09-24 the Samsung lane re-extracts up to 50 firmware carrier
packages a day. The window still follows the oldest observation, a
Samsung one from 2026-07-13, until every Samsung scope has been
re-extracted or the quarantine on 2027-01-10 removes what remains.
On that day the daily public job fails the check once and opens an
issue labeled stale-data; the next publish closes it.
Pushes and pull requests keep passing in warn mode.
Listing is not support. A device in the catalog and a carrier in
the profiles say where discovery got to, not that a feature works
on that phone.
Some match rules cannot be expressed in Android XML. Those
profiles stay in JSON and are listed in
generated/android/metadata.json.
Where the data comes from
Every fact names its source family. The public families also carry an exact revision and a check date in the evidence index.
Raw vendor packages, credentials, signed URLs, and private logs are
never published. The full policy is in
SOURCES.md.
How to contribute
You do not need write access. If a carrier is missing or wrong, use
the guided issue forms.
One form is for wrong or missing carrier data, including a fix you
tested yourself, one for a source suggestion, and one for docs or
tooling. There is no automated path from a report into the data yet.
Never post phone numbers, account data, personal passwords, tokens,
or private vendor credentials. Never post full IMSI or ICCID values,
IMEI, serial numbers, raw logs, raw bugreports, raw firmware dumps,
or private vendor responses. Safe details are the carrier name,
country, MCC and MNC, SPN, GID prefix, and Android carrier ID.
Public source links, the feature you tested, the result, and the
test date help too.