Postal Codes Dataset for Bulgaria, BG

285
Updated:
Files:1
Size:774 kB
Rows:5,303
Formats:csv
License:CC-BY-4.0

Postal Codes Dataset for Bulgaria, BG including name of the city, town, or place, various administrative divisions and alternative city names.

Part of a Data Solution

  • Postal Codes Solution

    Every worldwide postal-code dataset in one bundle — the ultimate global reference for precise postal codes.

    Explore →

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
20% off
$49.90$39.92
one-time payment

API Access

Access dataset files directly from scripts, code, or AI agents.

Browse dataset files
Dataset Files

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.

/logistics/postal-codes-bg/
https://datahub.io/logistics/postal-codes-bg/_r/-/.licensing-notes.md
https://datahub.io/logistics/postal-codes-bg/_r/-/.migration-notes.md
https://datahub.io/logistics/postal-codes-bg/_r/-/ATTRIBUTION.txt
https://datahub.io/logistics/postal-codes-bg/_r/-/README.md
https://datahub.io/logistics/postal-codes-bg/_r/-/datapackage.yaml
Key Files

Start with these files — they give you everything you need to understand and access the dataset.

datapackage.yaml— metadata & schema
https://datahub.io/logistics/postal-codes-bg/_r/-/datapackage.yaml
README.md— documentation
https://datahub.io/logistics/postal-codes-bg/_r/-/README.md
Typical Usage
  1. 1. Fetch datapackage.yaml to inspect schema and resources
  2. 2. Download data resources listed in datapackage.yaml
  3. 3. Read README.md for full context

Data Files

postal-codes-bg-sample

About

Last updated
2 October 2026
Total rows
100
Format
CSV
File size
13.5 kB

About this dataset

Bulgaria (BG): 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.7 (closed 2026-10-02)
  • Commit: 4a59582 (worktree commit 3f0591f, same content), landed in batch 1
  • Parity verdict: explained (row_order only); signed off by the user
  • Producer: custom, refresh disabled

Sources

InputURLNotes
GeoNames postal exporthttps://download.geonames.org/export/zip/BG.zipThe only input, as in the old builder

Parity against the live zip (2026-10-02)

Rows: 5,303 live and 5,303 fresh, none only on one side. 0 changed cells. The only class is row_order ×1: places reordered within postal codes, consistent with GeoNames reordering its export. No example of the moved rows was recorded.

Decisions

DecisionByBasis
Accept the row_order differenceUser (session 2479b1c9-…, 2026-10-02: "I sign off on the row order")Batch 1 sign-off, recorded in docs/parity/p5.md
Keep dropping the corrupted 6045 "Смолян / Smoljan" / "Девин / Devin" row, but accept zero or one match (more than one raises)AgentThe old builder asserted exactly one match. With this change the build won't fail once GeoNames fixes the row
Remove the row counts and the "2993/5303 rows (56%)" fraction from README and descriptor; "20 pairs repeat" → "some pairs repeat"Orchestrator instruction (the README counts rule, user 2026-10-02)Counts change whenever the data does
Leave the row counts in ATTRIBUTION.txt for nowUser (session 2479b1c9-…, 2026-10-02: attribution files shouldn't carry row counts, "file a bead to fix it later")Filed as pc-3d2, folded into pc-hfz
Drop the README's licence_status.decision sentence and use the standard GeoNames accuracy wordingOrchestrator (batch 1 doc fixes b7fb93b, then 5311ad3), after the user said "Fix the small doc problems you've noticed"The descriptor has no licence_status field

Transforms carried over

Folded from build_postal_codes_product.py:

  • admin_code1 → ISO 3166-2:BG. GeoNames' 3-letter oblast codes (BLG, BGS, VAR, …) are crosswalked to BG-01..BG-28 (verified against Wikipedia 2026-08-30). An unknown code is a ProducerError.
  • The corrupted 6045 duplicate is dropped (see Decisions). It has the wrong oblast and county and no accuracy; every other Devin row is coded SML.
  • alternative_city_name is empty. Bilingual names ("Айтос / Ajtos") are kept as GeoNames gives them.
  • The old asserts are now ProducerErrors: primary key (postal_code, place_name, admin_code2, admin_code3) unique, all 28 oblasts present, no literal nan, no float accuracy ("4.0"). The exact row-count assert is gone.

Open questions

  • Whether upstream still contains the corrupted 6045 row on today's file wasn't recorded. The output matches live row for row, so the drop presumably still applies.
  • ATTRIBUTION.txt still says "5,303 rows" and "2993/5303 rows (56%)", and .licensing-notes.md has historical counts. Both are for pc-3d2 / pc-hfz.

Provenance

Reconstructed 2026-10-05 from the agent transcript 2479b1c9-c4dd-47e5-be82-34ccf8d49a80/subagents/agent-ab16439725d736d53.jsonl, the orchestrator session 2479b1c9-…, the commit messages (4a59582, b7fb93b, 5311ad3), the bd close reason and docs/parity/p5.md.