If you need a precise border of the city of Porto in coordinates, then extract a city boundary. Check these pages Getting city boundaries from openstreetmap and Getting polygon boundaries of City in JSON from Google Maps API?
If only a rectangular, it is a boundig box, and you can get it here Getting bounding-box of city.
ZCTAs are created every 10 years for the Decennial Census. They are not representative of current zip code boundaries. Zip codes are created for mail carriers to deliver the mail, not for data analysis.
here is some really good information about ZCTAs from the Census Bureau:
This video also has some good information in it
You can use Overpass API to get data in GeoJSON format.
You can query using WikidataID parameter (Q12501)
Example on https://geoattractions.com/details/55971
If i may, can i add one more platform called CSV2GEO that does batch geocoding , reverse geocoding and plenty other geolocation services. It has hybrid price model of free and paid options. The system can process from single line to millions of records.
Disclaimer: I founded CSV2GEO.