Part of a Data Solution
- Explore →
Postal Codes Solution
Every worldwide postal-code dataset in one bundle — the ultimate global reference for precise postal codes.
Premium
You're viewing a free sample
Get the complete dataset — all rows and files — delivered instantly after checkout, with lifetime access to the latest version.
- Secure checkout via Stripe
- Instant download after payment
- Lifetime access to the latest version
- Creative Commons Attribution 4.0 International license
API Access
Access dataset files directly from scripts, code, or AI agents.
Browse dataset files
API Access
Access dataset files directly from scripts, code, or AI agents.
Each file has a stable URL (r-link) that you can use directly in scripts, apps, or AI agents. These URLs are permanent and safe to hardcode.
Start with these files — they give you everything you need to understand and access the dataset.
- 1. Fetch datapackage.yaml to inspect schema and resources
- 2. Download data resources listed in datapackage.yaml
- 3. Read README.md for full context
Data Files
postal-codes-ma-sample
| Field | Type | Description | Constraints | Title |
|---|---|---|---|---|
| country_code | string | ISO 3166-1 alpha-2 -- always MA | Country Code | |
| postal_code | string | Moroccan postal code (5 digits) | { "pattern": "^\\d{5}$" } | Postal Code |
| place_name | string | Locality name | Place Name | |
| admin_name1 | string | Region -- 12/12 covered | Administrative Name 1 | |
| admin_code1 | string | ISO 3166-2:MA region code (MA-01 .. MA-12) | Administrative Code 1 | |
| admin_name2 | string | Province/prefecture name (59 distinct) -- as supplied by GeoNames; Morocco has no official numeric code at this tier | Administrative Name 2 | |
| admin_code2 | string | GeoNames-internal identifier, NOT an official Moroccan province code -- Morocco's ISO 3166-2:MA register defines codes only at region (admin_code1) level | Administrative Code 2 | |
| admin_name3 | string | Not populated -- no locality/community tier in this source | Administrative Name 3 | |
| admin_code3 | string | Not populated | Administrative Code 3 | |
| latitude | number | GeoNames latitude (WGS84) | Latitude | |
| longitude | number | GeoNames longitude (WGS84) | Longitude | |
| accuracy | string | GeoNames accuracy of latitude/longitude. GeoNames documents 1=estimated, 4=geonameid, 6=centroid of addresses or shape; other values (e.g. 3) occur upstream without documentation. Empty where GeoNames gives none. | Accuracy | |
| alternative_city_name | string | Not populated in this release | Alternative City Name |
Download
Download sample CSVAbout
- Last updated
- 2 October 2026
- Total rows
- 100
- Format
- CSV
- File size
- 9.2 kB
About this dataset
Morocco (MA): migration notes
Internal record of the P5 migration from the old scripts to the producer: the discrepancies found, their causes, and who decided what. This is a dated record, so the numbers are as of the migration and not kept current. It is not shipped in the zip.
- Issue: pc-28e.7.33 (closed 2026-10-02)
- Commit:
fa6bf5e(worktree commit2aa1d3a, identical diff), landed in batch 2; accuracy wording later changed in5311ad3 - Parity verdict:
format-only(gate pass) - Producer:
custom, refresh disabled
Sources
| Input | URL | Notes |
|---|---|---|
| GeoNames postal export | https://download.geonames.org/export/zip/MA.zip | The only input the old builder used |
The Barid Al-Maghrib 2018 reference on data.gov.ma is ODbL and is not used (per .licensing-notes.md).
Parity against the live zip (2026-10-02)
Rows: 1,325 live and 1,325 fresh, none only on one side, 0 changed cells. No content classes, so no row_order. The only difference is line endings: live is 105,845 bytes and fresh 104,519, exactly 1,326 bytes less, one per line (CRLF→LF). The informational sample check was also format-only.
Decisions
| Decision | By | Basis |
|---|---|---|
| Land with CRLF→LF as the only difference | Gate (format-only passes without sign-off) | Recorded under batch 2 in docs/parity/p5.md |
Keep admin_code2 unprefixed | Agent: a faithful port | It is a GeoNames-internal id; ISO 3166-2:MA stops at regions |
| Carry Western Sahara rows through unchanged | Agent: a faithful port | As the old builder did; disclosed in ATTRIBUTION.txt |
Remove row, distinct-code and collision counts from README and descriptor; replace the stale licence_status.decision sentence; standard accuracy description | Orchestrator instruction (P5 brief) | Kept "12/12 regions" and "59 distinct provinces/prefectures" (still matches the fresh data) |
| Accuracy description says GeoNames documents 1/4/6 and other values (e.g. 3) occur upstream | Orchestrator (5311ad3, all batch-2 descriptors) | Reported to the user with batch 2; the user replied "agree to all" (session 2479b1c9) |
Transforms carried over
From build_postal_codes_product.py (2026-09-17 audit):
- Cells read verbatim with
csv, never pandas:admin_name3/admin_code3stay empty instead of the literal "nan", andadmin_code1/admin_code2keep their leading zeros. admin_code1→ ISO 3166-2:MA by addingMA-(GeoNames' 01–12 already are the ISO codes).alternative_city_nameempty.- The old asserts are
ProducerErrors: 5-digit postal codes, known region code, 3-digitadmin_code2, admin3 blank upstream, all 12 regions present, unique (postal_code, place_name). No row-count assert. build_postal_codes_product.pyandpublish_r2.pyremoved.
Open questions
ATTRIBUTION.txt("1,325 rows") and.licensing-notes.mdstill carry counts; left for the end-of-epic sweep (pc-hfz, which subsumes pc-3d2).
Provenance
Reconstructed 2026-10-05 from the agent transcript 2479b1c9-c4dd-47e5-be82-34ccf8d49a80/subagents/agent-a894ea92a472789b8.jsonl, the orchestrator session 2479b1c9-…, the commit messages (fa6bf5e, 5311ad3), the bd close reason and docs/parity/p5.md.