PermitPipeline

Methodology

How the Preconstruction Activity Index is built, what it does and does not measure, and where every figure comes from.

Edition: September 2026 · covering June–August 2026 · data extracted September 28, 2026

Methodology v1.3 — September 28, 2026. After an outside review of the September 2026 edition. San Francisco is now reported split by permit category, and "over-the-counter" in the text never includes signs and awnings. From the October 2026 edition the legacy-system fire filter also catches common misspellings and keeps alterations that mention fire work only to say it is filed separately; on the September 2026 data it would have read 112.9 rather than 113.1. The duplicate check is now a fixed audit, run with every edition, whose flagged records are published; the figure it replaces could not be reproduced and is withdrawn. The September 2026 edition carries a dated clarification; its readings are unchanged. Amended September 29, 2026, after a second review: the split is described as permit categories, which are not a measure of project size (over-the-counter permits include large commercial interiors); over-the-counter permits are described as reviewed at the permit counter rather than issued without review; and the duplicate audit's removal result is described as a sensitivity scenario rather than a floor.

Methodology v1.2 — September 28, 2026. First applied to the September 2026 edition. San Francisco's universe now counts both of the city's permit systems, the legacy DBI system and PermitSF, because the city has been moving routine permit types into PermitSF since February 2026 and the legacy data alone read those moves as a decline; the August 2026 edition's San Francisco reading is restated in the September edition. Over-the-counter fire-alarm and fire-sprinkler work is excluded from both years. San Francisco contractor concentration is suspended. The firm-concentration section now describes the license-keyed method the Index has used since its first edition. New York cohort maturity is measured against the source's last refresh as well as the extraction date. Figures on this page that belonged to one edition are now dated or computed for the current edition.

Methodology v1.1 — 2026-08-27. First applied to the August 2026 edition. Changes from v1.0, none of which alter a published reading: the geographic CSVs now carry every area, including areas below the mover volume screen and the NYC unmapped Unknown row (v1.0 promised this but filtered them out); the six-month direction check is described as a non-overlapping persistence check rather than an independent test; the declared-value cost field is named; SF permit type 9 is identified; the day-120 percentage-point changes are computed from exact fractions rather than from rounded percentages, which corrected Alteration CO from -16.2 to -16.1, Alteration from -1.6 to -1.7 and Full Demolition from +0.6 to +0.5; and publication-lag and multiple-comparison notes were added.

Index definition

The Index is a year-over-year momentum measure centered on 100:

Index = 100 × (applications in the latest three complete months) ÷ (applications in the same three months one year earlier)
100 means unchanged. 90 means activity is down 10%. 110 means it is up 10%.

Each city is computed and reported on its own; the two are never combined into a single national score, because their permit systems measure different things. A permit application is an early public indication of intended work, not proof that construction will proceed. PermitPipeline treats it as an early signal.

The current edition compares June–August 2026 with June–August 2025.

City universes

New York City

Counted from w9ak-ipjd. The unit is a distinct job_filing_number. An initial filing is one whose filing number ends -I1; it opens a new DOB job. Subsequent (-S*), post-approval amendment (-P*) and administrative (-A*, -B*, -C*) filings attach to a job that already exists and are excluded from the index, because the project they belong to was already counted. Filing month comes from filing_date. The dataset excludes electrical, elevator and limited-alteration jobs, which DOB tracks separately.

San Francisco

San Francisco's building-permit applications come from two systems. The Department of Building Inspection's legacy system is counted from f2jc-ivnc, the city's own deduplicated view, one row per permit: the unit is a distinct permit_number and the date is filed_date. Since February 2026 the city has been moving routine permit types into PermitSF, a new online system published as tyz3-vt28; its building permits (record numbers BLDG-) are counted by distinct record number and dated by submitted_date.

Moved to PermitSFPermit types
February 10, 2026In-kind door, window and siding replacements; fire alarms; fire sprinklers
June 22, 2026Reroofing; signs and awnings
July 14, 2026Electrical; plumbing and mechanical
September 14, 2026Kitchen and bath remodeling

Counted from the legacy system alone, those moves read as a collapse in activity, so from the September 2026 edition the index counts both systems, and the August 2026 reading is restated on the same basis. Fire-alarm and fire-sprinkler work is excluded from both years: PermitSF issues it as a fire permit (record numbers FIRE-) rather than a building permit, and once it moved its count rose far faster than the building work beside it. The data cannot show how much of that rise is more fire-protection work and how much is a new system recording work the old one did not, so it is left out of both years to keep like with like, and each edition reports the reading with it counted. Electrical and plumbing permits have never been part of the building-permit index.

The legacy-system fire filter is a keyword rule, and it errs both ways. Through the September 2026 edition it excluded over-the-counter (type 8) permits whose description names sprinkler, fire-alarm or fire-suppression work. Read application by application, that rule also excludes alterations that mention fire work only to say it is filed separately ("mep, life safety and fire sprinkler under separate permit", "no change to fire alarm"), and it misses fire permits whose description is misspelled ("fire alar", "sprinker"). From the October 2026 edition the rule also matches those misspellings and the abbreviation "fa system", and keeps a description that also says the fire work is separate, deferred, design-build, by others or unchanged, or that the building is fully sprinklered. On June–August 2025 and 2026 the two rules disagree on 81 applications, every one of which is listed in the fire-filter audit; the refined rule reads 112.9 against 113.1 for the original on the same data. Both are heuristics: a description that says a fire alarm will be replaced and that other work is under a separate permit is kept, not excluded, by the refined rule.

Permit categories. The San Francisco reading pools the city's permit categories, so each edition reports it split into five: over-the-counter permits (legacy type 8 after the fire exclusion, plus PermitSF doors, siding and windows, reroofing, and kitchen and bath), which are reviewed and approved at the permit counter; type 3 additions, alterations and repairs, the category routed through full plan review; signs and awnings (types 4 and 7, plus PermitSF signs and awnings); type 9, whose descriptions are solar and energy-storage work; and types 1, 2, 5 and 6 (new construction, demolition, grading). An unfamiliar permit type fails the build until it is placed in a category. In June–August 2026, over-the-counter permits were 92.8% of San Francisco's applications. The categories are not a measure of project size. Over-the-counter permits include large commercial interiors, and the index never describes them as small jobs or type 3 as the larger projects. Where an edition says anything about project size, it uses applicants' declared values (the revised cost where populated, otherwise the estimated cost; $1 or less is a placeholder), legacy applications only, with the share that carry a value. In June–August 2026, 81 legacy over-the-counter applications declared $1 million or more (63 a year earlier), against 23 type 3 applications (22 a year earlier); a declared value was present on 78% of legacy over-the-counter applications (88% a year earlier).

Duplicate audit. Each edition runs a fixed check for PermitSF building permits that may be a job already counted, and publishes every record it flags in the duplicate audit. A permit is flagged if (a) the index also counts a legacy application on the same parcel (legacy block and lot equal to the PermitSF parcel number), filed within 14 days either side, whose description names the same scope (roof; window, door, siding or slider; sign or awning; kitchen or bath), or (b) an earlier PermitSF permit of the same type on the same parcel was submitted within the previous 14 days. Two reference rates show what is normal: test (a) with every PermitSF date moved back 364 days, which measures matches that turn up by coincidence, and the share of the legacy system's own over-the-counter applications of the same four scopes, a year earlier, that followed a same-scope application on the same parcel within 14 days. Run on September 28, 2026 for June–August 2026: 40 of 1,621 PermitSF building permits (2.5%) were flagged by (a), against 10 (0.6%) by coincidence; 52 (3.2%) by (b), against 3.4% for the legacy system a year earlier. Removing every flagged permit from 2026 alone would put the reading at 111.5 rather than 113.1. That is a sensitivity scenario under these matching rules, not a bound on the true reading: the rules can miss duplicates or flag separate jobs, and the year-earlier repeats stay in. An earlier version of this page reported a different duplicate figure (52 of 2,332 PermitSF records) from a one-off check whose code was not kept; it could not be reproduced and is withdrawn.

Other checks on the combined universe, run on June–August 2026 when the change was made. PermitSF records marked Stopped are cancelled, withdrawn or not-approved applications and are kept, as the all-statuses rule below requires; but they are more common in PermitSF than withdrawals are in the legacy system, and some are refiled within days, so each edition reports, as a sensitivity rather than a correction, the index without Stopped applications that were refiled on the same parcel within 14 days, and without solar and energy-storage applications, a category that grew several-fold when the city gave it its own permit type (permit_type 9) in 2025. PermitSF parcels are mapped to Analysis Neighborhoods through acdm-wktn; that mapping agrees with the legacy system's own neighborhood field on 48,326 of 48,328 legacy permits. A PermitSF record type the build does not recognise stops the build until it is classified, and a legacy over-the-counter category that falls below half its trailing six-month level fails the build unless it is already accounted for.

All applications are counted regardless of their later status. Filtering out cancelled and withdrawn permits would be maturity-biased, because an older cohort has had far longer to acquire a cancellation than a recent one: measured on the August 2026 edition's windows, 1.36% of the 2025 cohort was cancelled or withdrawn against 0.71% of the 2026 cohort, so the filter itself would have flattered the current period. Legacy permit types are classified by permit_type code, never by its description label; a code that appears without a published definition is reported with a note saying so.

Every build asserts that the legacy deduplicated view reconciles exactly with a distinct count from the raw i98e-djp9, and that it is not stale relative to it.

Geographic rules

New York uses Neighborhood Tabulation Areas (nta); San Francisco uses Analysis Neighborhoods. Mapping coverage is published rather than assumed: NTA present on 99.64% of prior-year and 99.59% of current initial filings (72 and 74 filings unmapped, reported as Unknown and included in every city and borough total); SF neighborhood present on 100.0% and 100.0% of legacy-system applications, and PermitSF records mapped from their parcel number (2,457 of 2,457 in the current edition).

Mover thresholds. A neighborhood is only described as a mover if it clears all of:

The edition displays up to the six largest qualified moves in each direction, ranked by index; the city pages list every qualified mover, and the CSVs contain every area, including areas below the volume screen and the NYC Unknown row. An area below the volume screen is reported but can never be called a mover, so a count of movers is always a count within the screened set, never a count of the whole city.

Multiple comparisons. Every neighborhood, borough and work type is compared separately, and the mover rule is a persistence screen, not a significance test. Work-type segment changes are labelled exploratory in every edition, whatever their size. Neighborhood moves carry no significance claim, and small-count areas should be read as counts, not percentages.

Processing measures

Approval and issuance timing is computed from dated events, never from a status column. New York: approved_date minus filing_date. San Francisco: issued_date minus filed_date. Because filing_status holds only a filing's current value, a day-120 status cannot be reconstructed for a past cohort, and no such breakdown is published.

Cohorts are always compared at identical maturity — the month three months before the latest month (May in the current edition), measured at 120 days for both years — and segmented by review path, because professionally self-certified filings and standard plan examination follow different review processes. Work-type segments are published where a type has at least 100 filings in both cohorts; changes of at least 10 percentage points are highlighted as exploratory findings. These thresholds will be applied unchanged in future editions. Maturity is measured against the source's last refresh as well as the extraction date: filings whose 120th day falls on or after the day the city last refreshed its file cannot yet be fully observed, and each edition states how many there were and the most they could move the current share. Percentage-point changes are computed from unrounded rates, so displayed percentages may not subtract exactly.

San Francisco issuance is reported separately for over-the-counter and type 3 permits, since over-the-counter permits are reviewed and approved at the permit counter while type 3 permits go through full plan review, and a blended median would mislead. Times are elapsed calendar days from filing to issuance among permits issued in the month: they include the applicant's own time and leave out applications still waiting, so they describe the permits that were issued, not the agency's speed on every application. Over-the-counter permits are measured across both permit systems, from submission to issue for PermitSF permits, with sign and awning permits excluded (the September 2026 edition included them; a dated note corrects it). Declared-value statistics cover plan-reviewed work only (permit_type='3'), all statuses, one row per permit, valued from revised_cost where that field is populated and from estimated_cost otherwise, counting only positive values: n=84 in August 2025 and n=86 in August 2026 in the current edition. A value of $1 is a placeholder, often used for deferred submittals or changes to existing permits; it is kept, and a median excluding $1 is shown beside it as a sensitivity check. Values are applicant-declared and unaudited. NYC declared-cost statistics are withheld from this edition: the median moved to a flat $30,000 from April 2026 and that shift is not yet explained.

Revisions

Every figure in an edition is generated from a single frozen extraction, so the page, the charts and the CSVs cannot disagree. Both cities back-date records, so a closed month's count keeps changing quietly for weeks after it closes.

Publication lag. Both cities post some records after a month closes, and the current window is always younger than the year-earlier window it is compared against, so a large lag would bias every reading down. For the August 2026 edition the current window would have needed roughly 1,093 additional NYC filings (6.1%) to move the NYC reading to 95, or 526 additional SF applications (10.3%) to move SF to 90. Re-querying both sources three days after the frozen extraction moved the NYC window by 2 filings and the SF window by 0, in the opposite direction. That is evidence against a large lag, not a measurement of one. A daily snapshot series is being collected so a lag curve can be published in a later edition.

Published editions are immutable. Each new edition re-extracts the full history and republishes it; a prior reading is never edited in place. A dated revision note is added when a published reading moves by at least 0.5 index points, crosses 100, changes a neighborhood's direction or qualification, or changes any published conclusion.

Sources and licensing

The published Index CSVs are licensed under CC BY 4.0. PermitPipeline's proprietary data, firm graph, software and other site content are excluded. Suggested attribution: “PermitPipeline Preconstruction Activity Index,” edition date and source URL.

Downloads: monthly filings · NYC boroughs · NYC neighborhoods · NYC approval by work type · SF neighborhoods · firm concentration

Firm concentration

New York: the share of general-contractor permit records in rbx6-tga4 (permittee license type GC) held by the 50 busiest applicant license numbers, on matched 12-month windows ending with the latest month. Each permit record is attributed to its applicant's license, and the top 50 are re-ranked in each period. Keying on the license rather than a firm name means a firm that files under two spellings is still counted once.

San Francisco: the equivalent measure from cw8k-gwb7 (distinct permits per contractor license, so a permit with several licensed contractors counts once per license) is suspended from the September 2026 edition. Those contractor records cover only the legacy DBI system, and the work that moved to PermitSF, reroofing and window replacement above all, is among the highest-volume trade work, so the San Francisco share would move for a system reason rather than a market one. New York's counts are published in firm_concentration.csv.

What this is not

Not a construction forecast: no back-test has been published against later issuance or starts. Not seasonally adjusted. Not a national measure. Not comparable between cities. Not a measure of construction spending. And not derived from PermitPipeline's proprietary firm graph — everything in the Index reproduces from public data.

The PermitPipeline Preconstruction Activity Index is published by Josh Steinman, founder of PermitPipeline. Underlying data: NYC DOB NOW Job Application Filings and San Francisco building permits (deduplicated) and PermitSF permits. See the methodology, the Firm Directory, and why we publish this research.