Why This Is Harder Than It Should Be
Most postal services don't publish accurate, unified schedules anywhere. What they do have is a maze of location-specific pages, some updated monthly, some updated quarterly, and most completely ignored after 2019. If you've spent any meaningful amount of time tracking down reliable post office hours across different municipalities, you know exactly what I'm talking about. There's no single dataset. There's just a bunch of PDFs, a handful of dynamic pages, and whatever people happened to comment on a local subreddit three weeks ago. Here's what I actually do when I need this information and can't afford to waste a morning standing in line at a closed location. I stop looking for the official schedule page entirely. Instead, I use a combination of three sources and cross-reference them. The primary source is always the postal service's own API or bulk data dump if one exists — in my country, the national postal operator publishes a CSV file every quarter with location codes, addresses, and scheduled opening windows. It's buried in the footer under something like "Open Data" or "Geographic Information." That file is the closest thing to a ground truth we have. From there, I pull current data from Google Business Profiles using a simple scraper or even just bulk search. Google tends to reflect actual hours within a two-week lag, sometimes less. Then I layer in recent check-ins or community posts from local forums and Facebook neighborhood groups. Those catch last-minute closures and holiday schedule changes that the official CSV hasn't caught up with yet.
I maintain a personal spreadsheet with columns for location ID, address, the three hour sources I pull from, and a confidence rating from zero to ten. Zero means no data. Ten means all three sources agree and at least one is a direct government dataset. Anything below five I flag as unreliable. Most locations in my area sit somewhere between four and six unless it's a downtown main branch, which usually hits an eight. The part nobody talks about is weekend hours. Postal regulations in most regions technically allow Saturday service at main branches, but the actual implementation is wildly inconsistent. One year my local main branch posted Saturday hours for three months, then silently dropped them and never updated the page. The CSV data had Saturday listed because the template has a boolean flag for "open Saturdays" that gets set at the district level and forgotten. I learned to treat any Saturday designation as provisional until confirmed by a more recent source. Here's a specific edge case that took me way too long to figure out. There's a sub-branch about twelve kilometers from my house that the official data lists as Monday through Friday 9 to 5. For over a year it was actually 8:30 to 4:30. The discrepancy came from a district-level staffing adjustment that was never pushed to the central schedule database. The fix wasn't to find better data. It was to call the regional dispatch number and ask specifically about the sub-branch code. They kept an internal operations log that was more current than anything published anywhere. I wrote that code down and now I keep it in a notes file I reference whenever I'm checking that location again.
If you're doing this for a small number of locations, the spreadsheet approach works fine. I track maybe forty-five post offices across three counties and it takes me about twenty minutes each month to run the refresh cycle. If you're doing this for an organization that needs real-time accuracy across a hundred or more sites, the spreadsheet becomes unmaintainable. In that case I'd recommend building a lightweight webhook system that polls the CSV endpoint weekly and the Google Business data daily, then flags any divergence above a certain threshold. I built one for a logistics company a few years back and it cut their incorrect route planning incidents from roughly eighteen per month down to about three. There are some things this approach does not solve. Holiday schedules are the main one. Even when the official data is current, holidays rotate in ways that depend on regional calendar decisions, not the national template. My workaround is to manually input known holidays for each county into a separate lookup table and cross-check against the location data before scheduling anything important. It adds about ten minutes of work but prevents the kind of wasted trip that ruins your whole week. Another limitation is that this only helps with physical post offices. Parcel lockers, counter-free branches, and mail access points often operate on completely different schedules and aren't represented in the same datasets. I've seen too many people treat a parcel locker as a substitute for a post office and show up at the wrong location with the wrong expectations. The CSV and Google data rarely differentiate between the two, so I always check the facility type field and filter out anything marked as drop-only before including it in my results.
Get the Full Details

If you want to start this yourself, the minimum viable setup is a Google Sheet, a copy of your country's postal open data CSV, and a browser extension that pulls business profile metadata in bulk. Export the CSV to Sheets, use IMPORTRANGE or importxml to pull Google data where possible, add the confidence column and the holiday lookup table, and you have something functional within an afternoon. More sophisticated setups exist, but they're usually overkill unless you're managing this at scale. The honest takeaway is that there is no perfect dataset. Postal hours change, regional overrides happen, and the people who update the systems are doing it part-time while handling actual operational work. What works is treating the official data as a baseline, not a source of truth, and building verification layers on top of it. The process is tedious. It's also the only way I've found that doesn't end with me standing outside a locked door at 4:45 on a Tuesday.