← Health board

Code Violation Leads: Property Owners, Fines & Violation Types

Code violations from city open data, filtered by violation type, date range, ZIP and status, with the property owner's name and mailing address. Philadelphia, Detroit, Chicago, Mesa and New York City.

0%golden-diff pass
Run it on Apify → verified nightly

Verification

0%golden-diff success
1canary runs
0days since last canary run

Output fields

Authoritative field set from the dataset schema.

FieldType
citystring|null
statestring|null
violation_idstring|null
case_numberstring|null
violation_datestring|null
statusstring|null
status_detailstring|null
categoriesarray|null
violation_codestring|null
violation_descriptionstring|null
inspector_commentsstring|null
severitystring|null
departmentstring|null
fine_amountnumber|null
balance_duenumber|null
hearing_datestring|null
addressstring|null
unitstring|null
boroughstring|null
zipstring|null
parcel_idstring|null
property_typestring|null
owner_namestring|null
owner_name_2string|null
owner_typestring|null
owner_mailing_addressstring|null
owner_mailing_citystring|null
owner_mailing_statestring|null
owner_mailing_zipstring|null
absenteestring|null
absentee_basisstring|null
owner_sourcestring|null
violation_countinteger|null
open_violation_countinteger|null
first_violation_datestring|null
last_violation_datestring|null
total_balance_duenumber|null
property_countinteger|null
property_addressesarray|null
violationsarray|null
lookupstring|null
source_urlstring|null
source_datasetstring|null
source_fieldsobject|null
noticestring|null
notice_typestring|null

Sample row

{
  "city": "Philadelphia",
  "state": "PA",
  "violation_id": "VI-2026-091859",
  "case_number": "CF-2026-147729",
  "violation_date": "2026-10-30",
  "status": "open",
  "status_detail": "OPEN / IN VIOLATION",
  "categories": [
    "lawn_weeds"
  ],
  "violation_code": "PM15-302.4",
  "violation_description": "EXTERIOR AREA WEEDS",
  "severity": "STANDARD",
  "department": "CLIP - VACANT LOT INVESTIGATOR",
  "address": "1531 W FLORA ST",
  "zip": "19121",
  "parcel_id": "471033600",
  "property_type": "vacant_land",
  "owner_name": "DAVIDS CONSTRUCTION LLC",
  "owner_type": "company",
  "owner_mailing_address": "723 MARTENS LANE",
  "owner_mailing_city": "SPRINGFIELD",
  "owner_mailing_state": "PA",
  "owner_mailing_zip": "19064",
  "absentee": "out_of_city",
  "absentee_basis": "mails to SPRINGFIELD",
  "owner_source": "Philadelphia OPA property roll",
  "source_url": "https://phl.carto.com/api/v2/sql?q=SELECT+%2A+FROM+violations+WHERE+violationnumber+%3D+%27VI-2026-091859%27",
  "source_dataset": "https://opendataphilly.org/datasets/licenses-and-inspections-code-violations/",
  "source_fields": {
    "casenumber": "CF-2026-147729",
    "casetype": "NOTICE OF VIOLATION",
    "violationcodetitle": "EXTERIOR AREA WEEDS",
    "violationstatus": "OPEN",
    "opa_account_num": "471033600",
    "opa_owner": "DAVIDS CONSTRUCTION LLC"
  }
}

Inputs

FieldTypeReqDefaultDescription
mode string no "export" Export: every violation in the cities you pick that matches your filters (dates, violation type, ZIP, owner). Lookup: the violation history of the addresses, parcel numbers or owner names you list.
cities array no ["philadelphia"] Which cities to search. Each city is its own open-data feed. One per line: philadelphia (Philadelphia, PA); detroit (Detroit, MI); chicago (Chicago, IL); mesa (Mesa, AZ); new_york (New York City, NY).
city string no — One city, for saved tasks and API calls that send a single value. Use Cities above for several.
lookups array no [] One per line: a street address (1251 N 17th St), a parcel number (Philadelphia OPA account, Detroit parcel ID, Mesa APN, NYC BBL) or an owner's name (Philadelphia and Detroit publish the owner on each violation).
lookup string no — One address, parcel number or owner name, for saved tasks and API calls that send a single value.
lastDays integer no 30 Violations from the last N days. Empty: the last 30 days in export mode, all time in lookup mode. 0 means all time (large cities hold millions of rows: New York City added about 15,000 in one week). Ignored when a 'From' date is set.
dateFrom string no — YYYY-MM-DD, inclusive. Overrides 'Last N days'.
dateTo string no — YYYY-MM-DD, inclusive. Empty means up to today.
categories array no [] Keep only violations of these types (matched on the violation's own wording). Empty means every type. One per line: lawn_weeds (Weeds, grass & overgrowth); trash_junk (Trash, junk & debris); vacant_unsafe (Vacant or unsafe buildings); rental_registration (Rental registration & certificates); elevator (Elevators); fire_safety (Fire safety (sprinklers, alarms, extinguishers)); roof_exterior (Roof & exterior walls); windows_doors (Windows & doors); porch_stairs (Porches, stairs & railings); plumbing (Plumbing & leaks); electrical (Electrical); heating_boiler (Heating, boilers & ventilation); pests (Pests & rodents); lead_mold (Lead paint, mold & asbestos); permits_construction (Permits & construction); vehicles (Vehicles & parking); interior (Interior repairs & paint).
keywords array no [] Keep only violations whose description contains any of these words (e.g. sprinkler, demolition). Combined with Violation types: both must match.
zips array no [] Keep only these 5-digit ZIP codes. Chicago's feed has no ZIP, so there it comes from the matched property record and rows without an owner match are left out.
status string no — Open (still unresolved), closed (complied or dismissed) or any. Empty: open in export mode, any in lookup mode.
includeUnfounded boolean no false Mesa records complaints an inspector found to be no violation, and duplicates; they are left out unless this is on.
unpaidOnly boolean no false Only tickets with a balance due. Detroit is the city that publishes balances; other cities are skipped with a note when this is on.
propertyTypes array no [] Keep only these property types, from the property record (Philadelphia and New York City publish it). Rows with no type known are left out when this is set. One per line: residential (Residential); mixed_use (Mixed use); commercial (Commercial); industrial (Industrial); vacant_land (Vacant land); other (Other).
ownerTypes array no [] Keep only owners of these kinds, read from the owner's name. One per line: individual (Individual); company (Company (LLC, Inc...)); trust (Trust or estate); government (Government).
absenteeOnly boolean no false Only owners whose mailing address is somewhere other than the property (another state, another city, or another address in the same city).
withOwnerOnly boolean no false Leave out violations the actor could not match to an owner.
groupBy string no "violation" Violation: one row per violation. Property: one row per address, with its violation count, types and the list of violations. Owner: one row per owner, with how many properties and violations they have.
minViolations integer no 1 With one row per property or owner: keep only those with at least this many violations in the date range.
maxResults integer no 100 Cap for EACH city (and each lookup). Rows are newest first; with one row per property or owner, the most-cited come first.

Pricing

Pay per result (violation) — no charge for empty runs.
Example: 1000 violations at $0.004/result ≈ $4.00.

FAQ

Which cities are covered?

Philadelphia (Licenses and Inspections code violations), Detroit (blight tickets), Chicago (Department of Buildings violations), Mesa, Arizona (code compliance cases) and New York City (HPD housing maintenance code violations). Each is the city's own open-data feed. Measured on 2026-11-01, the last 7 days held 1,944 violations in Philadelphia, 489 in Detroit, 563 in Chicago, 65 in Mesa and 15,035 in New York City.

Where does the owner come from, and how often is there one?

Detroit's tickets carry the owner's name and mailing address. Philadelphia's violations carry the owner's name, and the mailing address comes from the city's property roll (OPA). Mesa's owners come from the Maricopa County Assessor by parcel number, Chicago's from the Cook County Assessor by street address, and New York City's owner name from MapPLUTO, which publishes no mailing address. In a 7-day export on 2026-11-01 the owner's name was on 99% of Philadelphia rows, 100% of Detroit, 97% of Mesa, 100% of New York City (name only) and 54% of Chicago: Chicago misses are mostly large and condominium buildings, where one address has several parcels and no single owner, so none is given.

Do you return phone numbers or emails?

No. None of these public records carries a phone or email for the owner; the owner's name and mailing address are what is published.

How do the violation types work?

Each city words its violations differently ('EXTERIOR AREA WEEDS' in Philadelphia, 'Excessive weeds or plant growth' in Detroit, 'CUT OR REMOVE HIGH WEEDS' in Chicago). The 17 types match the violation's own wording, so 'Weeds, grass & overgrowth' finds all three. A violation can match several types; one that matches none is 'other'. Keywords search the same wording for anything the types do not cover.

Can I get all violations ever, not just recent ones?

Yes: set 'Last N days' to 0, or give a From date. Large cities hold millions of rows (New York City added about 15,000 in one week), so set 'Maximum rows per city' to what you want to pay for, or split the range into months. Leaving the dates empty means the last 30 days in export mode.

What do 'one row per property' and 'one row per owner' do?

Property rows group the violations in your date range by address (or parcel): the violation count, how many are still open, the types, the first and last date, the unpaid total where published, and the list of violations. Owner rows group by owner: how many cited properties they have and their addresses. Both are sorted most-cited first, and 'Minimum violations' keeps only repeat offenders.

How does lookup mode work?

Give street addresses, parcel numbers or owner names and pick the cities to search. Each one returns its violations (all time unless you set dates; any status unless you set one). Owner-name search works in Philadelphia and Detroit, where the violation record carries the owner; Chicago has no parcel number on its violations, so search Chicago by address.

What does the absentee flag mean?

It compares the owner's mailing address with the property: out_of_state, out_of_city, same_city_diff_address (mailed to another address in the same city) or owner_occupied. With no mailing address (New York City) it is unknown. 'Absentee owners only' keeps the first three.

How am I charged?

$0.004 per violation row, $0.006 per property row or $0.01 per owner row, depending on the row type you choose. Owner names and mailing addresses are included. Free rows (input to fix, no match, a city that did not answer, a stopped run) are never charged. 'Maximum rows per city' caps each city.

Guides & use cases

Related actors