Carrier settings as public data

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.

git clone https://github.com/open-carrier-data/open-carrier-data.git
cd open-carrier-data
python3 tools/validate_public_carrier_data.py carriers generated/index.json
python3 tools/validate_device_catalog.py generated/devices

Download one generated file

To take only the stable snapshot, which lists all 7,997 profiles, or one Android file, download it from the main branch.

curl -LO https://raw.githubusercontent.com/open-carrier-data/open-carrier-data/main/generated/index.json
curl -LO https://raw.githubusercontent.com/open-carrier-data/open-carrier-data/main/generated/android/apns-conf.xml

Resolve one SIM on your machine

To see the broad profile for a network code, run the resolver from the clone.

python3 tools/resolve_carrier_profiles.py --mccmnc 26202

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.

  1. Sources. Maintained upstreams such as AOSP, LineageOS, GNOME, Apple, Google, and Samsung. Each source family has one upstream and a recorded check date.
  2. Private import. A private repository turns each source into candidate observations. Raw vendor files stay there.
  3. Sanitizer. One tool merges observations per carrier, drops private fields, quarantines stale or conflicting data, and writes neutral profiles.
  4. 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.
  5. 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.

Read SOURCES.md for the merge rules and generated/evidence-index.json for the revisions behind the current snapshot.

Status on 2026-10-12

These are the numbers at public commit a5869c1.

Carrier profiles
7,997
Android devices
42,512
Apple products
183
Profiles verified on a phone
0

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.

StatusDevicesMeaning
inventory_only39,413Listed by a maintained inventory, nothing else known
source_checked_no_artifact1,275Vendor scope checked in full, no current artifact
exact_source_indexed997An exact vendor artifact is indexed with a digest
exact_source_extracted402Artifact downloaded and integrity-checked
exact_carrier_data_observed355Carrier evidence names this exact model
source_not_queryable70Inventory 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.

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.

FamilyUpstreamTerms
AOSP CarrierConfig and carrier IDsCarrierConfig and TelephonyProvider in AOSPApache-2.0
LineageOS APNsLineageOS/android_vendor_apnApache-2.0
LineageOS device overlaysLineageOS device repositoriesNo assertion, transformed facts only
Mobile Broadband Provider InfoGNOMEPublic domain dedication
Apple carrier bundlesApple's official carrier indexNo assertion, transformed facts only
Google Pixel CarrierSettingsGrapheneOS adevtool snapshots plus Google's live per-device checksMIT tooling, no claim on Google's data
Google Pixel vendor CarrierSettingsTheMuppets vendor snapshotsNo assertion, transformed facts only
Samsung OMCSamsung firmware and GRAS/OMC update checksNo Samsung license asserted, transformed facts only
Samsung IMS capability evidenceVersioned Samsung firmwareNo Samsung license asserted, transformed facts only
Fairphone official sourcesFairphone public Gerrit manifestApache-2.0, transformed facts only
Sony Open Devicessonyxperiadev/local_manifestsApache-2.0, transformed facts only
Android device inventoryGoogle Play supported devices CSVNo assertion, identity fields only

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.

The contribution guide and SECURITY.md describe the forms and the private reporting path.