I created a small sqlite database for US zip code lookup and verification, for embedding in mobile apps etc.
https://github.com/alex-hofsteede/zipcode_db
The rate of change is very low, maybe a dozen changes per month at most. It wouldn't be unreasonable, depending on the app, to keep it reasonably up to date.