Methodology
A budget site earns trust by showing its work. This page is the work.
What this site is a mirror of
This site reads the BetterGov budget API at budget.bettergov.ph/api/v1 and nothing else. Two datasets feed every page here: the FY2027 National Expenditure Program, which is the proposal the executive branch has asked Congress to enact, and the enacted General Appropriations Acts for FY2020 through FY2026, the laws those years actually ran on.
The site re-sorts nothing: every table renders its rows in the order the source presents them. The amounts themselves are values the API returned — and the site performs exactly two pieces of its own arithmetic on them, both divisions, both documented in the next section. If an amount here is wrong, it is wrong at the source too, and the source is one click away.
Reading costs nothing and requires no account. The API is open, and so is this site, which means the only thing worth asking of this page is that the mirror be honest about what it reflects — so the rest of it is about where the reflection ends.
- API documentation: endpoints, cursors, and the row shapes every table on this site is built from.
- Official budget explorer: the same publisher’s own reader for the same data.
The arithmetic this site does
Three figures on this site are computed here rather than read from the source. Two are divisions. The first is each department’s share of the proposal: its amount divided by the departments’ sum, which upstream invariants confirm equals the national total. The second is the budget per Filipino: the national total divided by a population figure from the Philippine Statistics Authority. The third is a currency conversion, and it appears on one page only. Everything else on the site — deltas, percentage changes, totals — arrives from the API, and averages, growth rates, and other derived series are deliberately left uncomputed, because a computed number presented beside its source reads as sourced, and this site would rather be exact about which is which.
The population figure is a projection, not a count. The 2020 census enumerated 109,035,343 Filipinos, and the PSA’s 2020 Census-Based National Population Projections grow that base forward under three fertility scenarios. This site uses Scenario 2 — the one PSA recommends for policy and programming purposes — whose mid-year 2027 estimate is 115,845,614 people. Divided into the proposal, that is roughly ₱62,000 per Filipino. A projection is a model: it inherits the census’s base and the assumptions’ shape, and both the scenario choice and those assumptions are documented in the PSA’s release and the UP Population Institute’s report, linked below.
The currency conversion is the weakest number on this site, and it is confined to one sentence on one page: the article about the national AI infrastructure masterplan, whose figures are published in dollars and nowhere in pesos. That plan states no exchange rate and no price base year, so a peso comparison cannot be read out of it — it has to be made, by us. The rate this site uses is a commercial mid-market rate on a stated date, not the Bangko Sentral reference rate, which would be the better citation and which does not answer automated requests. The comparison it supports is a wide one, and it holds across any plausible rate; a conversion that only worked at one particular rate would not be worth publishing.
- PSA: Population Projection Statistics: the projection series this site’s per-person figure divides by, with the scenario tables.
- UP Population Institute: the projection’s documentation report: the method, the assumptions, and the working group behind the numbers — PDF.
Proposal versus law
The National Expenditure Program is a request. Congress amends it — heavily, some years — and the General Appropriations Act is the version the President signs. Only the signed act is law, so the FY2027 figures on this site describe what the executive is asking for, not what the government has been authorized to spend.
Every “versus FY2026” figure on this site is measured against the enacted General Appropriations Act for FY2026, Republic Act No. 12314, and not against last year’s proposal. The choice is the point: a request measured against a request tells you what the executive wants; measured against the law, it tells you what changed against what the country actually funded. When Congress finishes with the FY2027 proposal, the clearest way to see what it changed is the same one — the filed bill read against the enacted volumes, which the Take action page links side by side.
Nothing on this site restates the law itself. The figures are the API’s reading of the enacted GAA, which makes the API the proximate source and the signed volumes the authoritative one, published by the Department of Budget and Management. A reader who wants to argue with a number should be able to reach the law in one click, which is what the link below is for.
- DBM’s FY2026 GAA index: the Department of Budget and Management’s own index of the signed law: the volumes, per-agency PDFs, and the one machine-readable spreadsheet.
The buckets that are not agencies
Two lines in the department list are not departments. Automatic Appropriations (AUTO) holds what earlier laws already decided — debt service, the local governments’ share of national taxes, and obligations of that kind, which Congress does not vote on each year because standing law settles them. Special Purpose Funds (SPF) holds money with a purpose but no agency: pensions, a calamity reserve, a contingent fund, and similar money parked centrally until the event or purpose that releases it. Both appear in the list because the source presents them there, in the budget’s own second section.
Neither bucket delivers a service, and neither is run by an office you can visit. They exist because part of the budget is owed by statute and part is shared across the whole government, so it is appropriated in its own section rather than inside any department’s books. A department list that omitted them would flatter every department in it. Their pages, under /departments, carry the full treatment, including the laws and court rulings behind the machinery.
What the budget does not tell you
An appropriation is not a contract. A contract is not a finished structure. And neither the budget line nor the contract tells you whether the spending worked. The budget tells you what was authorized and for what purpose; awarding, building, and verifying happen in other records this site does not hold. None of that is a defect of the budget — it is what a budget is. A site that claimed more would be guessing with confidence.
The enacted law admits the gap itself. It now authorizes satellite-based validation of flood-control projects, after projects turned up that had been paid for in full and never built — verification written into the law because the appropriation alone could not answer the question. What happens after a line is enacted is where the interesting failures have been living.
The way in from here runs through the primary records. The Take action page links the tools that follow money past the appropriation stage, and every department page links the datasets and reporting specific to it. For the flood-control record specifically, start with the three below.
- DPWH infrastructure records (CC0 dataset): the public dataset of infrastructure records, flood control included, with its licence and last-updated date stated.
- PCIJ: flood-control procurement records: the procurement paper trail behind the ghost-project findings, from the Philippine Center for Investigative Journalism.
- Inquirer: scrutiny on the ground and from space: the satellite-verification provision in the enacted law, as reported.
How this site checks itself
The data is checked before it is trusted. Running npm run verify:data puts the upstream’s own invariants to the test: the national total holds, the department amounts sum to it, the GAA dataset covers every year it claims, and cursor-paged lists terminate instead of looping. The checks are deliberately boring — they confirm the shape of the data, not its wisdom. A failed check fails the script, and a failed script means the site should not be trusted until the source is fixed.
One upstream quirk is documented rather than hidden: a department’s programs metadata count can disagree with the length of its own program rollup. This site never prints the metadata count beside the rollup table, because a number next to a list it contradicts is worse than no number at all. Rows render in source order for the same reason — re-sorting is a second opinion this site is not qualified to give.
The prose has checks of its own. Every department page carries an editorial profile: written, reviewed, and committed as code, with the git history as the audit trail for every sentence. The build refuses to ship when a profile is missing, thinner than the word floor, or carrying figures in its prose. A thin department page is what this site was once rejected for, which is why none of those states can arrive quietly.
