Philadelphia Property Assessments - OPA Roll (Values + Sales) avatar

Philadelphia Property Assessments - OPA Roll (Values + Sales)

Pricing

from $0.03 / 1,000 philadelphia property records

Go to Apify Store
Philadelphia Property Assessments - OPA Roll (Values + Sales)

Philadelphia Property Assessments - OPA Roll (Values + Sales)

Philadelphia OPA property roll (public data, 583k+ properties): assessed values, latest recorded sale with price, owner names, bedrooms/baths/area/year built, zoning and tax exemptions. Search by owner, address, zip, ward, category or value, or look up one PIN for its full record.

Pricing

from $0.03 / 1,000 philadelphia property records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

The complete Philadelphia Office of Property Assessment roll: 583,783 properties, refreshed daily from the city's official public data export. Every property carries its assessed market value, latest recorded sale with price, owner names, physical attributes, zoning and tax exemptions.

Low cost

From $0.00005 per record, down to $0.00003 at Gold. Pay only for the records you actually receive - the whole roll stays queryable, you are never billed for the scan behind it.

What is in it

One row per property. The useful depth:

  • Values - assessed marketValue (100% populated), taxableBuilding / taxableLand, exemptBuilding / exemptLand, homesteadExemption.
  • Sales - the latest recorded salePrice and saleDate (99.6%), plus recordingDate.
  • Owners - owner1 (100%) and owner2 (33.9%), plus the tax-bill mailing address.
  • Physical - yearBuilt (92.7%), totalLivableArea (92.7%), numberOfBedrooms (86.1%), baths, stories, garages, central air, condition grades, buildingCodeDescription.
  • Zoning & category - zoning (RSA5, RM1, CMX ) and the 15 named categoryDescription values.

Property mix by category:

categoryproperties
SINGLE FAMILY463,015
MULTI FAMILY41,445
VACANT LAND39,691
MIXED USE14,166
COMMERCIAL12,504
APARTMENTS > 4 UNITS4,094
9 more codes

Search it

  • Owner - owner="CRUZATI" (substring over owner 1 + owner 2).
  • Address - address="OAKLAND ST".
  • Where - zipCode, ward.
  • Category - category="SINGLE FAMILY" (exact).
  • Zoning - zoning="RM1" (substring).
  • Value / sale - minMarketValue, maxMarketValue, minSalePrice, maxSalePrice, soldFrom, soldTo.
  • Year built - minYearBuilt, maxYearBuilt.
  • Exemption - homesteadOnly=true.
  • Exact id - pin, parcelNumber (each unique, 1:1).

Example inputs

Homeowners in one zip - the bread-and-butter lookup.

{ "category": "SINGLE FAMILY", "zipCode": "19124", "maxResults": 25 }

One property, in full - every value, sale, attribute and exemption field.

{ "mode": "profile", "pin": "1001394284" }

Everything assessed over $1M - value filter.

{ "minMarketValue": 1000000, "maxResults": 50 }

Recent sales - a date window on the latest recorded sale.

{ "soldFrom": "2026-01-01", "soldTo": "2026-12-31", "maxResults": 50 }

Counts by category - mode=aggregate.

{ "mode": "aggregate", "groupBy": "category" }

Or roll it up

mode=aggregate returns one count row per group - property category, zip code, ward, zoning or exempt vs taxable. Every group comes back; this mode is not cut off by maxResults.

Example output

One property - mode=profile:

{
"platform": "pa-philly-opa",
"pin": "1001394284",
"parcelNumber": "234229200",
"location": "4636 OAKLAND ST",
"zipCode": "19124",
"owner1": "CRUZATI ROSE MARIE GUAMAN",
"owner2": "REDROVAN MANUEL EFRAIN HERAS",
"marketValue": "192700.00",
"salePrice": "210000.00",
"saleDate": "2026-08-03",
"yearBuilt": "1945",
"totalLivableArea": "1568.000",
"numberOfBedrooms": "3",
"numberOfBathrooms": "1",
"categoryDescription": "SINGLE FAMILY",
"zoning": "RM1",
"geographicWard": "23"
}

Also: the change feed

mode=changes returns the diff between the last two daily snapshots - properties added, removed, or with any field changed (a new assessment, a recorded sale, a re-zoning). Each row carries changeType (added / removed / updated), and for updated rows the changedFields list and the previous oldValues. This is the daily-tracking surface.

Notes on the data, from the source

  • One row = one property. pin and parcelNumber are each unique and 1:1.
  • geoX/geoY are projected, not lat/lon. They are in PA South State Plane feet (EPSG 2272) - the source publishes no geographic coordinates, so these are labelled for what they are.
  • The mailing address is the tax-bill address and is populated on ~10.8% of rows (the rest mail to the property address); it is not an occupancy flag.
  • saleDate reaches back decades, and a few source entries carry typos that are sanitized to blank.