← Use cases

Use case

Open code violations in Philadelphia with property owners

Every open Philadelphia code violation from the last 30 days, with the property owner's name, mailing address and an absentee-owner flag.

Say you run a small property-services business in North Philadelphia: lot clearing, cleanouts, a bit of exterior repair. A property the city has cited for weeds or rubbish is a job waiting for someone, and an owner who lives in another town is the one least likely to have a person nearby to do it. You want a list for this month’s postcard run: every open violation in the city, the address, what was cited, and where the owner gets mail.

The manual way, and what it costs

The public search form on City open data (PHL, Detroit, Chicago, Mesa, NYC)
City open data (PHL, Detroit, Chicago, Mesa, NYC) — the official search. One record at a time.

Philadelphia is generous here. OpenDataPhilly publishes the Department of Licenses and Inspections violations as free CSV downloads, split into year ranges, and each row carries the owner’s name. The owner’s mailing address is not in that file; it is in a second free download, the Office of Property Assessment roll, which had 583,717 properties on 2026-11-01. Download both, keep the open rows from the last 30 days, and match them on the OPA account number. If you are comfortable with a lookup formula and you only need this once, that route costs nothing and works.

It gets tiresome when you do it every month. The “2019 to present” violations file has to be downloaded whole and filtered by hand each time, the status column needs reading (“SVN ISSUED” still counts as open), and the absentee check is a second comparison you write yourself.

The faster way

Code Violation Leads: Property Owners, Fines & Violation Types does the same search once and hands back every row at once.

{
  "cities": [
    "philadelphia"
  ],
  "lastDays": 30,
  "status": "open",
  "maxResults": 1000
}

This input asks for every open Philadelphia violation from the last 30 days, capped at 1,000 rows ($4.00). Uncapped, the same request returned 8,571 violations on 2026-11-01, in 14 seconds, which would be $34.28. For the postcard run you would narrow it: add "categories": ["lawn_weeds", "trash_junk"] (1,577 and 879 of those 8,571 rows) and "absenteeOnly": true, or add your ZIP codes.

What comes back

{
  "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"
  }
}
FieldExample valueMeaning
cityPhiladelphiaThe city whose feed the row came from
violation_idVI-2026-091859The city’s own ID for the violation or ticket
case_numberCF-2026-147729The city’s case, inspection or ticket number
violation_date2026-10-30When the violation was cited
statusopenopen, closed or no_violation
status_detailOPEN / IN VIOLATIONThe city’s own status words

The address and violation_description tell you what the job is; owner_mailing_address and its city, state and ZIP columns are where the postcard goes. absentee is the filter that matters for this business: of the 8,571 rows, 1,202 owners mail from another state, 1,292 from another city, and 2,666 live at the property.

What you’d do with it

Export the dataset as CSV and load it into your mail-merge tool, one row per address. Switch to one row per property ("groupBy": "property") if a building with three open violations should get one postcard, not three, at $0.006 per property row. Save the input as a task with lastDays set to 30 and run it on the first of each month.

Worth knowing

There are no phone numbers or emails; the public records carry the owner of record and a mailing address, and that name can lag a recent sale. Some of the biggest owners are public bodies. Grouped by owner, 385 owners had five or more open violations in those 30 days, and the top three were the Philadelphia Land Bank (104 violations on 66 properties), the Philadelphia Housing Authority and the City itself. Set "ownerTypes": ["individual", "company", "trust"] to leave them out. About 1% of rows (104 of 8,571) came back with no owner at all.


Run it yourself: How to run Code Violation Leads: Property Owners, Fines & Violation Types walks the whole thing step by step.

Want every absentee-owned property in Philadelphia County, cited or not, with assessed values and sale history? US County Property Records Export reads the same OPA roll this list joins against. Already have the addresses and need the property’s listing details? US Property Lookup & Listing Scraper by APN/Parcel takes the parcel_id column as input.

Last updated 2026-11-01