How Postal Codes Actually Work in Lima (And Why They Will Make You Cry)
Peruvian postal codes are managed by POSTA, the national postal operator. Lima's system divides the metropolitan area into zones numbered 01 through 27, with each zone covering a specific district or group of districts. A complete code is five digits: the first two identify the zone, and the last three pinpoint the exact street or neighborhood block. So a code like 15067 tells you you're in San Juan de Lurigancho (zone 15), and the 067 part narrows it down further. The thing nobody warns you about is how much this system breaks down in practice. POSTA's official database exists, but it hasn't been updated in years for many newer urbanizations and subdivisions. If you're trying to validate an address in an area that was carved out of a larger district after 2015, the database simply won't have the code. I learned this the hard way when a client insisted a shipment to a development called "Los Jardines de Villa" in Carabayllo was being rejected at the border crossing between the two zones. The code I found online said 17013. The actual delivery driver showed up and couldn't find it because the area had been rezoned and reassigned to 17098 six months earlier without anyone updating the online lookup tool. I ended up calling POSTA's address verification line directly, which is the only reliable way to confirm a code when the web database returns a mismatch. It takes about twenty minutes on hold, but it works.
Unlocking Lima Discovering The Secret Life Of Postcode
Here's what I mean by the secret life part. Postal codes in Lima don't map cleanly to administrative boundaries. A single district like Miraflores spans zones 18 and 19. A single urbanization can straddle two different codes if it sits on a border street. The mapping is based on delivery routes, not municipal lines. That means you can have two adjacent buildings with completely different postal codes if the mail carrier for one walks a different route than the carrier for the other. The most useful tool I've found for working with these codes is the POSTA geo-referencing system, which you can access through their official website. It's clunky, but it does have a search function where you can enter a street name and the code updates in real time based on the number range. If you know the street address, this is far more accurate than looking up a district name and hoping for the best. For bulk operations, I wrote a small script that pulls the data from POSTA's published CSV dumps and maps them against district boundaries from the INEI, Peru's statistics institute. The INEI data is more current and handles the administrative layers better, but it doesn't include the full street-level codes. Combining both sources cuts your error rate from roughly 18% down to under 3% for most address validation work. A few counter-intuitive things you should know:
First, the zone numbers don't start from the city center and radiate outward. Zone 01 is downtown, yes, but zone 02 covers Callao, which is technically a separate constitutional province. Zone 15 is one of the largest by population and covers multiple districts. The numbering is somewhat historical and doesn't follow a logical geographic pattern anymore. If you're building any kind of spatial analysis tool, don't assume adjacency based on zone numbers. Zone 14 and zone 15 are not necessarily neighbors just because they're consecutive. Second, many people assume that major urbanizations and gated communities have their own unique postal codes. They often don't. Large developments like Santa Catalina in San Isidro or parts of Monterrico in San Juan de Miraflores share the same code as the surrounding residential areas. The postal system is route-based, not development-based. This creates confusion when e-commerce platforms auto-fill postal codes based on the neighborhood name rather than the actual delivery route. I've seen packages sent with the wrong code because the customer's address form defaulted to the district average rather than the specific street code. The biggest pitfall is assuming that a valid-looking five-digit code is actually correct. It could be a placeholder, an outdated value, or a code assigned to a different street entirely. Always cross-reference. The only way to be confident is to verify against the POSTA database or use a validated address table that's been refreshed in the last two years. Anything older and the margin of error climbs sharply, especially in the eastern conurbated zones where new subdivisions appear constantly.
Get the Full Details

There are also legitimate limitations to the whole system. Rural and peri-urban areas outside the metropolitan grid often have no postal code at all, or they use a generic district-level code that doesn't distinguish between neighborhoods. If your logistics operation extends into districts like Santa María del Mar or Pachacútec, you'll hit dead zones where the postal code system provides no useful granularity. In those cases, the workaround is to use GPS coordinates and delivery zone mapping instead of postal codes as the primary routing key. I've had teams try to force postal codes into these areas and waste weeks dealing with failed deliveries because the code was technically valid but functionally meaningless for the route. If you need the data for development purposes, POSTA publishes their master list periodically, though the frequency is irregular. Subscribe to their announcements page if you're doing ongoing address validation work. The file is a plain CSV, roughly 2.3 megabytes, containing about 45,000 street-level records. It's not pretty but it's the source most third-party address APIs in Peru ultimately pull from anyway, so getting it direct saves you a layer of indirection and potential corruption.