Scope
One-time fees to entitle and build. Entitlement and environmental review, building and trade permits, site and engineering permits, connection and impact fees, and posted assurances.
Not recurring costs: no utility service, property tax, business licence renewals, or annual inspections. And not construction cost — a state DOT access permit is a few hundred dollars, while the turn lanes it requires are not a fee at all.
Every dollar carries a citation
Each line records a source URL, document, section, adoption date, and a confidence level:
- verified read off the named ordinance
- benchmark industry-typical placeholder, not this jurisdiction's figure
- estimated derived or interpolated
- unknown nobody has checked
Confidence is reported in dollars, not line counts. "48 of 60 lines verified" sounds reassuring while hiding that the twelve unverified ones are most of the money.
Three things that are easy to get wrong
A $0 line is not an answer
A plumbing permit priced per fixture, run against a project where nobody filled in the fixture count, returns $0 — and $0 looks like a result. Those are surfaced as explicit warnings, and the command-line runner exits non-zero so it can sit in a pipeline that fails loudly.
A bond is not a fee
A letter of credit is posted as security and released on acceptance, so its face value never enters the fee total. Its premium does — roughly 1–2% per year of face value, which the fee schedule never mentions.
An estimate is not a budget
Fees are paid at permit issuance, not at underwriting, so they are escalated forward to the expected permit date. A contingency is then applied to fees plus bond premium together. Both conventions come from real fee checklists; on the worked example they move the number by about 31%.
Redevelopment credits
The existing meter earns a water and sewer capacity credit; the prior use's traffic offsets the transportation impact fee. Both are routinely left on the table, because claiming them requires knowing the existing meter size and the prior use. A credit is capped at the gross so a fee can never go negative.
Valuation is not one number
Jurisdictions variously take the contractor's declared price, compute it themselves from a $/sf table, or take the greater of the two. Each schedule declares which. The table is the published ICC Building Valuation Data, with an explicit escalation factor rather than adjusted numbers baked in invisibly.
Trip generation
Transportation impact fees are assessed on net new PM peak hour trips. ITE rates here are editable defaults drawn from publicly filed traffic studies, not a licensed reproduction of the Trip Generation Manual. Where an ordinance names a specific ITE edition and land use code, that frozen rate governs and should be set as an override.
Two engines, held together
The estimator exists twice: Python for the CLI and reports, JavaScript so this site computes instantly in the browser. The JS holds logic only — every fee schedule, rate table, and default is exported from Python, and expressions are parsed in Python and shipped as a syntax tree, so the browser never parses anything. The two are held to each other by a line-by-line parity check.
What it cannot do
- Resolve a parcel to a special district boundary. No national dataset exists. See Who Bills for how to find them.
- Know about recapture agreements. They appear in no fee schedule — only on a title commitment or in the city engineer's memory.
- Price a negotiated contribution. Traffic signal money and development agreement terms come out of a negotiation, not a schedule.