NYC FDNY Contractor Leads & Hearing Radar
Pricing
$5.00 / 1,000 leads
NYC FDNY Contractor Leads & Hearing Radar
Fresh NYC FDNY/OATH fire-code summonses, filterable by borough and remediation trade, routed with hearing-date urgency for fire-protection contractors and compliance buyers. Buildings and businesses only.
Pricing
$5.00 / 1,000 leads
Rating
0.0
(0)
Developer
Luke Hunter
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
For fire-protection contractors, expediters and compliance firms who need fresh NYC leads. One run returns a queue of recent NYC FDNY fire-code summonses (OATH Hearings Division), routed by likely remediation trade and hearing-date urgency — not another generic multi-agency violation dump. Pay-per-result: $0.005 per lead — 100 leads = $0.50. Try it free with Apify's monthly platform credit.
NYC publishes every FDNY OATH summons in one open dataset shared with a dozen other agencies (Sanitation, DOB, Police...), with no trade filter and no urgency signal of its own. This Actor isolates just the Fire Department rows, classifies each one's violation description into a routing trade, computes days-since-issue and days-until-hearing, and excludes cases already resolved — so what you get back is a queue you can prospect from directly, on a schedule.
Quick start (2 minutes)
- Open the Input tab (no account setup or API key needed — the source is public).
- Use this prefill, adjusted to your target borough and trade:
{"borough": "BROOKLYN", "remediationTrade": "fire_alarm", "issuedWithinDays": 7, "includeResolved": false, "maxItems": 100}
- Click Start. In under a minute you'll have a dataset you can export to CSV/JSON or pull via the API into your CRM.
Example output
Real output, mapped from a live row captured 2026-09-24:
| Field | Value |
|---|---|
ticketId | 014274530L |
buildingAddress | 250 MADISON AVENUE |
borough | MANHATTAN |
violationDescription | FIRE PROTECTION SYSTEMS |
issueDate | 2026-09-19T00:00:00.000 |
hearingDate | 2026-11-18T00:00:00.000 |
caseStatus | NEW ISSUANCE |
daysSinceIssue | 5 |
daysUntilHearing | 55 |
derivedRemediationTrade | fire_protection_system |
derivedWorkflowSignal | new_within_7_days |
derivedPrioritySignal | recent |
Full raw JSON for this row (all fields, including provenance):
{"ticketId": "014274530L","buildingAddress": "250 MADISON AVENUE","borough": "MANHATTAN","violationDescription": "FIRE PROTECTION SYSTEMS","issueDate": "2026-09-19T00:00:00.000","hearingDate": "2026-11-18T00:00:00.000","caseStatus": "NEW ISSUANCE","hearingResult": null,"daysSinceIssue": 5,"daysUntilHearing": 55,"derivedRemediationTrade": "fire_protection_system","derivedWorkflowSignal": "new_within_7_days","derivedPrioritySignal": "recent","sourceUrl": "https://data.cityofnewyork.us/resource/jz4z-kudi.json","sourceDatasetTotal": 22064435,"fetchedAt": "2026-09-24T12:00:00.000Z"}
Use cases
- Fire-protection contractors prospecting building owners who just got hit with a sprinkler/standpipe/alarm summons and need remediation before their hearing.
- Fire alarm and inspection companies filtering to
fire_alarmto find buildings with active nuisance-alarm or detector violations. - Violation expediters and compliance consultants working
hearing_within_14_dayscases first, where the client has the least time to act. - Insurance and risk teams tracking fire-code exposure by borough for underwriting or portfolio review.
Run it weekly
This is built for recurring use, not a one-off pull:
- Open the Actor, set your filters, then click Schedule (top right of the run page) instead of Start — or create one under Schedules in the Apify Console.
- Set it to run weekly (or daily for a fast-moving borough), keeping a short
issuedWithinDayswindow (e.g. 7) so each run mostly returns new cases. - Keep
ticketIdas your dedupe key downstream (CRM, spreadsheet, webhook) so re-running the same window never double-counts a lead you already have. - Prioritize
hearing_within_14_daysandnew_within_7_daysrows for the outreach queue each run produces.
Input
| Field | Default | Meaning |
|---|---|---|
borough | all | Optional NYC borough filter: MANHATTAN, BRONX, BROOKLYN, QUEENS, STATEN ISLAND. |
remediationTrade | all | Optional derived trade filter: fire_alarm, fire_protection_system, extinguisher, egress, fire_safety_documentation, other — see classification below. |
issuedWithinDays | 30 | Only summonses issued within this many days (1–365). |
includeResolved | false | Include cases whose latest source status is resolved (paid, written off, dismissed, etc.). |
maxItems | 100 | Hard cap on delivered and billed leads (1–5000). |
Output fields
| Field | Meaning |
|---|---|
ticketId | The OATH ticket number — stable, unique, safe to dedupe on across scheduled runs. |
buildingAddress, borough | Source property location. borough is null on a small minority of rows the city itself leaves blank. |
violationDescription | The city's own charge description(s), joined from every charge on the ticket. This is the real text — read it before treating derivedRemediationTrade as final. |
issueDate, hearingDate, caseStatus, hearingResult | Source facts: when the summons was issued, its scheduled OATH hearing date (often not yet a real courtroom date this far out), its current status, and its hearing outcome once decided. hearingResult is populated on a small minority of rows (mostly ones already heard) — do not build logic that assumes it is there. |
daysSinceIssue, daysUntilHearing | Derived. Age in days since the violation date; calendar days until the hearing date (null when the source has no hearing date yet). |
derivedRemediationTrade | Derived. A routing guess from violationDescription — see below. Not an FDNY designation. |
derivedWorkflowSignal | Derived. One of hearing_within_14_days, new_within_7_days, aging_over_60_days, active — a queue-sorting bucket, not an official urgency rating. |
derivedPrioritySignal | Derived. A coarser age bucket (recent, active, aging), kept for simple sorting. |
sourceUrl, sourceDatasetTotal, fetchedAt | Provenance: the NYC Open Data endpoint, the parent dataset's total row count at fetch time, and when this row was fetched. |
How trade routing actually works (read this before filtering)
NYC's own OATH charge codes are a small, fixed set of ~30 broad regulatory categories (e.g. BF12 FIRE PROTECTION SYSTEMS, BF20 INSPECTION AND TESTING) — confirmed against a real, live 1,000-row FDNY batch. They are not free text, and NYC does not record which specific equipment (sprinkler, standpipe, fire pump, alarm panel) a "fire protection systems" summons is actually about. Because of that, this Actor does not offer a sprinkler or commercial-kitchen-suppression filter — an earlier version did, and it silently returned zero rows every time, which is worse than not offering it. What it does offer, based on what the source can actually distinguish:
fire_alarm— the source explicitly calls out alarms (e.g. "FAIL TO PREVENT UNNECESSARY UNWARRANTED ALARMS") or the description otherwise mentions an alarm/detector/central-station term.fire_protection_system— a generic fire-protection-system violation (sprinkler, standpipe, suppression or unspecified) that the source does not further break down.extinguisher,egress,fire_safety_documentation(recordkeeping, certificates, permits, affidavits, signage) — each keyed off the source's own charge language.other— general maintenance, electrical, storage/materials and everything else that doesn't fit the above.
Classification is deterministic and reproducible from violationDescription alone (see classifyRemediationTrade in the source) — it is a routing aid, not a compliance or job-scope determination.
Privacy: buildings and businesses only, fail-closed
The source dataset's respondent fields can name a business ("AM 260 MADISON LLC", "PRIME BNV INC") or, in principle, a private individual (a homeowner, a sole proprietor). This Actor:
- Never outputs a respondent name field at all — it isn't in the schema above, by design.
- Excludes the entire lead when the source record's respondent has a first name populated (the source only splits first/last name for a natural person — a business occupies the last-name field alone in every real row observed).
- Excludes the lead if the respondent's name has no recognizable business/entity marker (a legal suffix like LLC/Inc/Corp, an institutional word like Congregation/Church/School, or a numbered street-style business name) — fail-closed: if it can't be confirmed as a business, it's dropped rather than guessed at. This costs some real businesses without a clear suffix; that trade-off is deliberate.
Pricing and cost control
Pay-per-event: $0.005 per delivered lead, benchmarked against comparable Apify Store Actors that deliver US government permit/violation/property records per row (building-permit and property-deed-record scrapers cluster at $0.002–$0.01/result; this sits at the median).
maxItemsis a hard cap on delivered and billed rows.- Delivered rows always equal charged rows: if your run's own spending limit runs out mid-run, the Actor stops, finishes
SUCCEEDED, and its status message says exactly how many leads were delivered and billed — never a silent under-charge, never a free row that should have been billed. - If a platform migration restarts the run mid-delivery, rows already delivered and charged are never delivered or charged again.
- If the Actor is not monetized (e.g. running it yourself), every matching row is delivered free.
Limitations — read before you build automation on this
- Coarse trade routing. See above —
fire_protection_systemcovers sprinkler, standpipe and unspecified suppression-system violations together; the source cannot distinguish them. - Not every case has a
boroughorhearingResult. Both arenullon a small minority of real rows; do not assume either is always populated. - OATH is an adjudication feed, not an inspection census. It reflects summonses referred to hearings, not every FDNY inspection or condition, and status/hearing data can lag or change after this Actor fetches it.
- This does not determine severity, liability, remediation scope, job value, or whether work is still available — it is a discovery and routing tool, not a compliance or estimating determination.
- Some real businesses without a recognizable name suffix are excluded by the privacy filter (see above) — a deliberate false-negative trade-off, not a bug.
- 10,000-row pagination ceiling per run, well above any single
maxItems, but a reason a very old backfill query could come up short.
FAQ
Do I need an NYC Open Data API key? No. data.cityofnewyork.us is public and keyless.
Why did a violation I know about not show up? Either it's outside issuedWithinDays, its case is already resolved and includeResolved is false, it didn't match your borough/remediationTrade filter, or its respondent didn't pass the buildings/businesses privacy filter above.
Can I get a specific trade like sprinklers only? Not on its own — see "How trade routing actually works." Use fire_protection_system and read violationDescription to confirm equipment type.
How fresh is the data? NYC updates the underlying OATH dataset roughly daily; a 7-day issuedWithinDays window typically returns fresh, still-open cases.
Can I schedule this? Yes — that's the intended use. Schedule a borough/trade-specific 7-day lookback, keep ticketId in your CRM to dedupe across runs, and prioritize hearing_within_14_days records for near-term outreach.
SEO / discovery terms
NYC FDNY violations, FDNY contractor leads, fire alarm leads NYC, OATH summonses, fire code remediation leads, FDNY hearing dates, NYC fire violation data, fire protection sales leads, NYC compliance API, fire code compliance leads.
Related Actors
Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.
- Federal Register Rule Effective-Date Radar: final federal rules about to take effect, with citations, dockets and urgency.
- Chicago Contract Recompete & Extension Radar: expiring City of Chicago contracts with extension history, for recompete prospecting.
- Bank Branch Closings & Merger Radar (FDIC): new US bank branch closings, openings and mergers from the FDIC.
- Chicago New Business License Radar: newly licensed Chicago businesses as opening leads, grouped by category.
- RCRA Enforcement Response Leads: new EPA hazardous-waste (RCRA) enforcement actions and penalties, by state.
- Emerging Federal Contractor Radar: companies that just won their first federal contracts, from USAspending.gov.
- Hospital Price Transparency Enforcement Leads: hospitals with recent CMS price transparency warning notices, CAP requests and CMP notices.
- Hospital Ownership Change Radar: hospitals that just changed owner, with buyer, seller and effective date from CMS filings.
- New Healthcare Organization NPI Radar: newly registered healthcare organizations from CMS's weekly NPI file, by provider type.
- County Multifamily Building Permits Surge Radar: U.S. counties where 5+ unit apartment permits are surging year over year.
- Zillow ZIP Code Property Search Scraper: for-sale listings by ZIP code with prices, price cuts and days on Zillow.
- Walmart Category Scraper: product names, prices, was-prices and ratings from Walmart category pages.