Urbicana Academy · Permits · The specimen sheet

The permit
signal catalog —
twenty-one, defined.

The companion primer reads a single filing six ways. This is the other half: every signal laid out as a specimen — its exact predicate, its anchor, its scope, the privacy gate that binds it, and whether it fires today or waits on a helper. Each one is a rule computed from a structured public field. Not a scrape. Not an inference.

Source NYC DOB NOW filings (70 columns) Type Reference Drafted 10 June 2026 Status Proposal — pending review
21
new signals proposed
16
fire deterministically today
5
pending a small SQL helper
2647
catalog size, before & after

The 70-column dob_now_filings table exposes structural transformation, workflow state, cost detail, expediter identity, and spatial fields. None of these signals requires new ingestion — every field already sits in the deployed table. Sixteen of the twenty-one fire deterministically against existing columns; the other five wait on a borough cost threshold or a median-helper. Casting the existing and proposed fields from text to integer is the only computation the structural signals need.

The catalog organizes signals by what they are anchored to — the property where the filing lands, the applicant or filing representative who moves it, the spatial cluster it joins, or the workflow clock it runs against. Each specimen below carries its definition in plain language, its predicate in the engine’s own terms, and a single representative reading. Every signal in the full proposal carries Consumer/tenant, Homeowner/neighbor, Investor/developer, Professional, Journalist/researcher, and Civic/societal lenses; only the sharpest is reproduced here.

Live — fires today Pending — needs a helper commercial commercial actors only universal no privacy gate licensed licensed filing reps

Read this sheet plainly

A building permit is the moment a project becomes public — before a sale comes through, before a wall comes down. NYC publishes these filings daily, and almost nobody reads them. Each filing carries dozens of structured fields. A signal is just one rule run against one of those fields: when the rule is true, the filing means something. This sheet is the full list of rules.

What is it
A named, repeatable test against the dob_now_filings feed. Same field, same logic, every property in NYC — not a scrape, not a guess.
Why it reads
The dot tells you if it fires today (green) or waits on a small SQL helper (amber). The tags tell you what it attaches to — a property, a filing rep, a block — and who is allowed to see it.
How to use it
One signal is a fact. Two or three on the same property are a thesis. The three combinations near the foot of the sheet are where the edge lives.
Fig. i Anatomy of a filing · the fields a signal reads
DOB NOW · FILING BBL 1·00921·0034 JOB TYPE Alteration DECLARED COST $1,840,000 DWELLING UNITS 6 3 STORIES 4 6 APPLICANT OF RECORD licensed architect FILING REPRESENTATIVE expediter, reg. no. OWNER BUSINESS NAME an LLC, commercial YES / NO FLAGS excavation · legaliz… WORKFLOW DATES filed · approved · permit · signoff scale how big, how costly the transformation what it becomes the actors who signed, who moved it the deltas existing vs. proposed the flags each a discrete signal the clock freshness & distress

One filing, the fields a signal reads from. The deltasexisting against proposed units, stories, height — are the sharpest fields in the dataset, and the ones most platforms never touch. The four families below are organized by which of these fields a signal is anchored to.

01

Property-anchored

Fires on the filing event itself · 13 signals

These fire on the permit itself — not gated on a prior deed, the way the catalog’s older permit_after_acquisition was. The moment intent, scale, and timing become public, the signal evaluates.

Fig. ii Reading what the building becomes · six transitions
new_building_filed empty lot → built demolition_filed built → cleared unit_densification units gained — +ve unit_destruction units lost — displacement vertical_addition stories added +20% height_increase ≥ 20% taller ? legalization_request unpermitted → legal

Each transition is deterministic — it reads the unit count, story count, height, or a yes/no flag, with no cost-tier judgment required. The arrow is the delta between existing and proposed. Green grows, oxblood subtracts; unit_destruction is the sharpest displacement warning in the public record.

Fig. iii Reading cost the right way · calibrated to the local median
DECLARED COST, GRADED AGAINST THE BOROUGH × JOB-TYPE MEDIAN Routine bottom half maintenance, unless it clusters Substantial top half track when it concentrates Major project top quarter gut reno, addition, ground-up Capital outlier top 5% — ≥ 5× the median investigate individually cost_outlier_high alteration_major a low-cost filing anomalous capital concentration

The common mistake is a national dollar threshold: a $75K alteration in Manhattan is noise; the same filing in the Bronx is a substantial project. The ladder is set against the trailing-12-month median for that borough and that job type, so it moves with the market. The top two bands — alteration_major and cost_outlier_high — are the two signals on this sheet still waiting on the median helper.

new_building_filed
property commercial only live
A New Building job type — someone has decided this parcel is buildable now.
dob_now_filings.job_type = 'New Building'
Investor / developervisible competitive intelligence; read with recently acquired it reveals the acquisition thesis, with long held the moment a long-term holder decided to act.
demolition_filed
property commercial only live
A Demolition job type — the existing structure is worth less than the cleared lot.
dob_now_filings.job_type = 'Demolition'
Consumer / tenantif the demo is for your building and not a partial, the displacement timeline starts here — weeks or months before the work begins.
permanent_removal
property commercial only live
The work includes the permanent elimination of part of the building — units, structures, or systems.
dob_now_filings.includes_permanent_removal = 'Yes'
Consumer / tenantthe most direct version of “the work happening here changes what this building is.”
unit_densification
property commercial only live
Proposed dwelling units rise above existing — density added through alteration rather than new construction.
(proposed_dwelling_units::int - existing_dwelling_units::int) >= 1
Civic / societaloften the cheapest path to net new units in already-dense neighborhoods; aggregated, a counter to “we built nothing.”
unit_destruction
property commercial only live
Proposed dwelling units fall below existing — the sharpest tenant-protective signal in the catalog. The filing declares units being eliminated as part of the work.
(proposed_dwelling_units::int - existing_dwelling_units::int) <= -1
Consumer / tenantdirect displacement risk for occupants of those units; lead time means weeks to months to engage counsel, organize, or plan instead of finding out at the door.
vertical_addition
property commercial only live
Proposed stories exceed existing — the building is growing taller, the parcel’s unused vertical capacity being used.
(proposed_no_of_stories::int - existing_stories::int) >= 1
Investor / developercombined with underbuilt FAR, often the developmental thesis revealed at the filing stage.
height_increase
property commercial only live
Proposed height is at least 20% taller than existing.
proposed_height::numeric > existing_height::numeric * 1.2
Homeowner / neighboradjacent buildings growing taller affects views, light, and shadow months before work is visible — the filing is the first moment to engage at community board.
legalization_request
property commercial only live
An owner surfacing previously unpermitted construction — illegal units, additions, or use changes — for legalization.
dob_now_filings.request_legalization = 'Yes'
Journalist / researchera spike in a neighborhood often correlates with enforcement pressure or impending rezoning.
assembly_use_filed
property universal live
A place-of-assembly use — bar, club, event space, place of worship, or large-gathering venue.
place_of_assembly = 'Yes' OR temporary_place_of_assembly = 'Yes'
Homeowner / neighborfoot traffic, noise, and late-night activity may follow; lead time for community-board engagement on liquor or special-use applications.
support_of_excavation_filed
property commercial only live
Major foundation work — significant structural or subterranean change, often the moment an expansion goes from concept to construction.
dob_now_filings.support_of_excavation = 'Yes'
Homeowner / neighborexcavation is the noisiest, longest, most disruptive phase — the lead-time signal months before the heavy equipment arrives.
multi_scope_filing
property commercial only live
Four or more of the work-type flag columns evaluate truthy on a single filing — a gut renovation, not a single-trade fix.
count(work_type flags = truthy) >= 4 over { general_construction, plumbing, sprinkler, boiler_equipment, mechanical_systems, structural, earth_work, foundation, sidewalk_shed, standpipe, fence, scaffold, sign, antenna, curb_cut, shed }
Investor / developercombined work types approximate the scope of investment more reliably than the owner-declared cost field, which is frequently understated.
little_e_filed
property universal live
An environmental restriction declared — site contamination, remediation context, or environmental-control commitments.
dob_now_filings.little_e = 'Yes'
Civic / societalthe aggregate map is the closest the city comes to publishing a real-time brownfield index.
progress_inspection_required
property commercial only live
DOB requires ongoing inspection — the work has an elevated risk profile.
dob_now_filings.progress_inspection_requirement = 'Yes'
Investor / developeruseful for evaluating construction risk on acquisitions during the work-in-progress phase.
alteration_major
property commercial only pending
An Alteration whose cost clears a borough-calibrated threshold — a major project, not a minor fix.
job_type = 'Alteration' AND initial_cost::numeric >= {borough_threshold}
Investor / developerweighted on the cost dimension; same audience map as multi_scope_filing.
Pending — borough thresholds need calibration. Sqitch change alteration-cost-thresholds (a borough × job_type → threshold lookup, refreshed quarterly). Est. half a day.
cost_outlier_high
property commercial only pending
Declared cost at least five times the median for its borough and job type over the trailing twelve months — anomalous capital concentration.
initial_cost::numeric >= 5 × median(initial_cost) FOR (borough, job_type) over trailing 12 months
Journalist / researcheroutlier filings are story candidates, particularly when the owner entity is in the news or on a watch list.
Pending — median-helper not built. Sqitch change permit-median-helpers, function permit_cost_median(borough, job_type, window_days). Est. one day.
02

Applicant · Filing-rep-anchored

A dimension parallel to the existing applicant signals · 3 signals

The filing rep is its own intelligence layer. Reps carry a DOB Registration Number, so the licensed gate applies — and the rep is often more identifiable than the owner behind an opaque LLC.

expediter_concentrated
filing-rep licensed only live
The same filing rep appears on thirty or more filings in the trailing twelve months — who is moving work through DOB quickly.
count(filing_rep_business_name) >= 30 over trailing 12 months
Investor / professionaluseful for hiring decisions and as competitive intelligence — whose filings are stacking up reveals where capital is being deployed.
expediter_specialty_dominant
filing-rep licensed only live
Seventy percent or more of a rep’s trailing-12-month filings are a single job type — a specialist.
max(share by job_type) >= 0.70 over a rep's trailing-12-month filings
Investor / professionalthe same reading as specialty_dominant for applicants — concentration signals deep expertise in one work class.
filing_rep_owner_paired
filing-rep × owner commercial only live
The same rep-and-owner pair appears on five or more filings in the trailing twenty-four months — a repeated business relationship.
count(filing_rep_business_name, owner_business_name) >= 5 over trailing 24 months
Journalist / researcheroften the thread that leads behind an opaque LLC owner — the filing rep is frequently the more identifiable party.
03

Spatial-cluster-anchored

Block, neighborhood & community-district aggregations · 4 signals

Where the unit of analysis is not a single parcel but a cluster — the block, the NTA, the community district. Two of the four wait on the same median-helper as the cost outliers.

permit_velocity_high
block commercial only pending
Filings on a block in the trailing ninety days run at four times the borough median — capital concentrating onto one block.
count(filings on (borough, block)) over 90d >= 4 × borough_median
Investor / developerconfirmation if you’re already invested; a contrarian flag if you’re considering entry late.
Pending — median-helper not built. Sqitch change permit-median-helpers, function permit_count_per_block_median(borough, window_days).
permit_velocity_zero
neighborhood universal live
No filings at all in a neighborhood over the trailing twelve months — a disinvestment indicator.
count(filings in neighborhood) over 12m = 0
Civic / societalmay warrant intervention — targeted infrastructure investment, or community-land-trust acquisition while prices are low.
nta_construction_pulse
neighborhood (NTA) universal live
Filings within an NTA over the trailing ninety days, surfaced as an ordinal rank — the busiest and quietest neighborhoods.
rank NTAs by count(filings) over trailing 90 days
Investor / developera mid-resolution market-activity index — coarser than block-level, finer than borough-level.
cd_inspection_concentration
community district universal live
Ten or more progress-inspection-required filings in a single community district over ninety days — where DOB is paying close attention.
count(progress_inspection_requirement = 'Yes' per community_board) over 90d >= 10
Civic / societaluseful for evaluating whether elevated inspection correlates with elevated violation rates or just elevated project complexity.
04

Temporal · Workflow

Property-anchored, read against the workflow clock · 3 signals

A filing carries a chain of dates — filed, approved, first permit, signoff, current status. The deltas between them are signals of their own: freshness at one end, distress at the other.

filing_to_permit_lag_long
property commercial only live
More than 180 days between filing and first permit — complex work, or bureaucratic friction.
first_permit_date - filing_date > interval '180 days'
Civic / societalaggregated, a measure of permitting bottleneck — DOB throughput by job type, neighborhood, or filing characteristic.
recent_signoff
property commercial only live
Work signed off within the last ninety days — the building is newly stabilized and ready for re-marketing.
signoff_date >= now() - interval '90 days'
Consumer / tenantin a residential context, recent signoff often precedes re-marketing at higher rents — a lead-time signal for lease-renewal posture.
pending_signoff_stalled
property commercial only live
Approved but not signed off, with no status change in over a year — the closest workflow-distress signal in the permit system.
approved_date IS NOT NULL AND signoff_date IS NULL AND current_status_date < now() - interval '365 days'
Investor / developercombined with open_violations or tax_lien, often signals owner financial difficulty mid-project.
05

Combination

Multi-source · a self-join across the feed · 1 signal

The single highest-value combination signal. It formalizes a pattern operators look for informally — a demolition with no follow-through — as a deterministic predicate no public platform surfaces.

cleared_lot_stalled
property commercial only live
A demolition filed more than 180 days ago on a BBL, with no New Building filing on the same BBL since — a stuck project.
demolition_filed on BBL >= 180 days ago AND NOT EXISTS (new_building_filed on same BBL since the demolition)
Read three waysopportunistic acquisition target to the developer; vacant-lot eyesore and possible upzoning catalyst to the civic reader; a property-value and public-safety concern to the neighbor next door.

On sourcing. Every signal here is computed from a field that already sits in the deployed dob_now_filings table — verified against the schema, not guessed. No new ingestion. The single highest-value signal is unit_destruction: the sharpest tenant-protective permit signal available, sourced from a field that no other publicly known NYC real-estate platform surfaces. The catalog’s “same records, used differently” framework only delivers on the protective side when signals like that one ship. This page describes a proposal pending review — the sixteen live signals can ship as catalog rows with no data-layer engineering; the five pending wait on the two small SQL helpers named above.

© 2026 Urbicana