PRISM-INSIGHT
These are 13 specialized AI agents that analyze Korean and US stocks in real-time, and this is open source and free to use.
AI translation
BIR zonal values per sqm for 7,000 barangays in Metro Manila, Bulacan, Pampanga, Zambales, Rizal, Cavite, Laguna, Batangas and Quezon. Tap any barangay for its values.
FinancePython · TypeScriptGitHub @AndrewConcejeroOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Barangay-level map of BIR residential zonal values for Metro Manila, Cavite, Laguna, Rizal and Bulacan
Taken from the repository README
Loading the full README.
Read the full README ↗A free, public map of BIR residential zonal values (₱ per square meter of land) for Metro Manila and the provinces around it: Bulacan, Pampanga (with Angeles), Zambales (with Olongapo), Rizal, Cavite, Laguna, Batangas and Quezon (with Lucena). Bicol is next. Values are shown per barangay where the data allows. Every area carries a flag saying how good its number is.
Zonal values are BIR tax floors, not market prices. Read the map as a ranking. Check with the BIR Revenue District Office (RDO) before any transaction.
| What | Source | Where in repo |
|---|---|---|
| Zonal value schedules (primary) | BIR Department Orders, published per RDO at bir.gov.ph | raw/bir/RDO-<code>/*.xls(x) |
| Zonal values (fallback, until raw files exist) | BIR schedules as indexed by REN.PH | data/ncr_barangays.csv, data/pasay_barangays.txt, data/city_medians.csv |
| Barangay and city boundaries | PSA / NAMRIA, PSGC Dec 2023 release, via faeldon/philippines-json-maps | fetched into cache/ (not committed) |
Every map feature has one of these flags:
barangay_data: computed from that barangay's own schedule rowscity_median: no barangay detail, so it shows the city's median residential value (hatched on the map)estimated: no data, so it shows the median of the neighbouring barangays it shares a border with (hatched and muted on the map)no_data: nothing usable (grey)raw/bir/_inbox/ drop new BIR workbooks here; make data files them
raw/bir/RDO-<code>/ BIR workbooks filed by RDO, each holding every revision for that RDO
raw/bir/inventory.csv one row per Department Order found in the workbooks
data/ fallback CSVs (REN.PH-indexed)
pipeline/ Python 3.11+ data pipeline
aliases.csv hand fixes: source barangay name -> PSGC name
review/ generated: unmatched.csv, match report, parse errors
tests/ pytest; fixtures/ holds sample BIR layouts
public/data/ pipeline output served by the site (zonal.geojson, cities.geojson, meta.json)
public/og.png social preview, regenerated by `make data`
src/ Vite + TypeScript + MapLibre frontend
prototype/ v0 d3 prototype, kept for reference only
Needs Node 20+ and Python 3.11+.
make venv # one-time: creates .venv and installs pipeline/requirements.txt
make data # fetches boundaries (cached), parses raw/ + data/, writes public/data/
make test # pytest on the parser and name normalizer
npm install
npm run dev # local site at http://localhost:5173
make data writes review files to pipeline/review/. If a barangay lands in unmatched.csv, add a row to pipeline/aliases.csv and run make data again.
Zoom in on any Metro Manila city, the Cavite and Laguna cities listed in streets.SOUTH, or any town in Batangas, Pampanga, Zambales or Quezon (streets.PROVINCE_SETS) to see BIR's street and subdivision values on the map: villages filled, streets as
lines (dashed where BIR's stretch could not be pinned down, so the whole street is drawn). pipeline/streets.py
matches each residential row of the current schedule to OpenStreetMap shapes in its own barangay; 62% of priced
rows place. One cached OSM request per city (cache/osm/); one GeoJSON per city in public/data/streets/,
loaded only when you zoom in. A city name used in two provinces (Rosario, San Juan) gets the province in its file
name (rosario-batangas). Review files: pipeline/review/streets_<city>.csv. Method and limits:
docs/pilot-muntinlupa-streets.md.
| Layer | Source | Pipeline |
|---|---|---|
| Roads & rail (current, under construction, proposed) | OpenStreetMap | pipeline/transport.py |
| Condominium values per building | BIR RC/CC rows on named OSM buildings (31% of rows place) | pipeline/condos.py, review pipeline/review/condos.csv |
| Flood hazard (share of barangay in medium/high hazard, 100-year rain) | UP NOAH / DREAM via LiPAD WFS (ODbL); NCR, Bulacan and Pampanga fully; Cavite, Laguna, Rizal and Batangas partly (Batangas 779 of 1,075 barangays; none for Mabini and Tingloy) | pipeline/factors.py flood |
| Elevation | Copernicus GLO-30 (surface model) | pipeline/factors.py elevation |
| Surface heat (dry-season afternoon land surface temperature) | Landsat 8/9 C2 L2 via Planetary Computer | pipeline/factors.py heat |
| Distance to rail station / expressway | OpenStreetMap | pipeline/factors.py access |
| Vacancy by submarket | hand-entered from broker reports: fill data/vacancy_submarkets.csv (with source and period); barangays per submarket in data/vacancy_submarket_barangays.csv. The option appears once a row has a number. | pipeline/build.py |
python -m pipeline.factors all refreshes the factors (slow; downloads are cached in cache/factors/). After adding an area, python -m pipeline.factors <factor> --new computes a factor only for barangays that lack it, leaving existing values as they were.
The Satellite button puts imagery under the colours. With no configuration it uses Sentinel-2 cloudless 2016 by EOX (CC BY 4.0, 10 m per pixel: good for context, too coarse to see individual villages). For sharp imagery, add an Esri World Imagery key:
https://ph-zonal-map.vercel.app (and http://localhost:5173 for development).VITE_ESRI_KEY with the key, then redeploy. Locally, put it in .env.local (see .env.example).The key ends up in the browser by design; the referrer restriction is what keeps others from using it.
raw/bir/_inbox/ (subfolders and odd file names are fine).make data. It reads each workbook's NOTICE sheet and Department Order headers, files it under raw/bir/RDO-<code>/ (for example RDO-027, RDO-53A), skips exact duplicates, and rewrites raw/bir/inventory.csv: one row per Department Order with its effectivity date and the cities it covers.raw/bir/inventory_log.txt: anything that needed judgment while reading the workbookspipeline/review/unmatched.csv: BIR barangay names that matched no PSGC barangay. Add a row to pipeline/aliases.csv and run make data again. Columns: city, source_name (as BIR writes it), psgc_name (a; b when one BIR block covers several barangays, (ignore) for sections that are not barangays), psgc_city (only when BIR filed it under another city), valid_before (only apply to schedules effective before this date, e.g. Bacoor's pre-merger names before 2023-07-29), note (evidence).pipeline/review/plausibility.csv: values worth a second lookpipeline/review/parse_errors.csv.gz: every sheet row the parser could not use, with the reason (local only)main.RR) count. Condominium rows (RC) are priced per sqm of floor area, not land, so they are left out.estimated, hatched on the map). Only real values are used, never other estimates. With no such neighbour, it shows the city median (flagged city_median). A city with no values of its own (Pampanga today) is never estimated from a neighbouring city: it stays no_data.pipeline/review/growth_by_rdo.csv; the summary is in docs/staleness-report.md.Code: MIT. Data: BIR schedules are public records; boundary data is under the terms of its upstream repo.