Discover/Phila API
live

Phila APIwater-lien.phila.gov

Search Philadelphia property water lien records by address or account number. Retrieve lien counts, debt balances, owner info, and detailed lien history via 4 endpoints.

Endpoint health
verified 6d ago
search_by_account_number
search_by_address
get_property_accounts
get_account_lien_details
4/4 passing latest checkself-healing
Endpoints
4
Updated
21d ago

What is the Phila API?

The water-lien.phila.gov API provides 4 endpoints for querying Philadelphia Water Department (PWD) lien records tied to specific properties. Starting with search_by_address, you can resolve a partial street address into normalized address strings, then chain into get_property_accounts to retrieve associated accounts with fields like debtBalAmt, lienCount, currentOwnerName, and acctStatus — the core data points needed for property due diligence on water debt.

Try it
Partial or full street address including a street number (e.g., '1234 Market St', '1500 Spring Garden'). A numeric street number prefix is required for matches.
api.parse.bot/scraper/5740fa62-ec81-4883-8333-0a524d354a28/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/5740fa62-ec81-4883-8333-0a524d354a28/search_by_address?query=1234+Market+St' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace water-lien-phila-gov-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: Philadelphia Water Lien Search — find properties, check accounts, inspect liens."""
from parse_apis.philadelphia_water_lien_search_api import PhillyWaterLien, AddressNotFound

client = PhillyWaterLien()

# Search for addresses matching a street query (limit caps total items fetched)
for addr in client.addresses.search(query="123 Main St", limit=5):
    print(addr.address)

# Drill into one address's water accounts
addr = client.addresses.search(query="123 Main St", limit=1).first()
if addr:
    for account in addr.accounts.list(limit=5):
        print(account.display_account_number, account.current_owner_name, account.lien_count)

# Search accounts directly by number
account = client.accounts.search_by_number(account_number="4205356001234002", limit=1).first()
if account:
    print(account.display_account_number, account.acct_status, account.debt_bal_amt)

# Construct an address directly and list liens on one of its accounts
target = client.address(address="123 MAIN ST 62704")
for acct in target.accounts.list(limit=3):
    if acct.lien_count > 0:
        try:
            for lien in acct.liens.list(limit=3):
                print(lien.lien_number, lien.lien_status, lien.debt_tot_amnt, lien.solicitor)
        except AddressNotFound as exc:
            print(f"not found: {exc}")
        break

print("exercised: addresses.search / addr.accounts.list / accounts.search_by_number / acct.liens.list")
All endpoints · 4 totalmissing one? ·

Search for matching property addresses by a partial address string. Returns a list of normalized addresses with ZIP codes. The query must include a street number to produce results; bare street names without a numeric prefix return empty.

Input
ParamTypeDescription
queryrequiredstringPartial or full street address including a street number (e.g., '1234 Market St', '1500 Spring Garden'). A numeric street number prefix is required for matches.
Response
{
  "type": "object",
  "fields": {
    "addresses": "array of objects each containing an 'address' field with the normalized address string"
  },
  "sample": {
    "data": {
      "addresses": [
        {
          "address": "1234 MARKET ST 19107"
        },
        {
          "address": "1234 MARKET ST 19107-3721"
        }
      ]
    },
    "status": "success"
  }
}

About the Phila API

Address and Account Lookup

search_by_address accepts a partial or full street address string and returns an array of normalized address objects, each with an address field formatted for downstream use. The query must include a street number — bare street names return empty results. The returned addresses use the format 1234 MARKET ST 19107 and can be passed directly to get_property_accounts in either ZIP-5 or ZIP+4 format.

Property Account Data

get_property_accounts returns all water accounts linked to a normalized address. Each account object includes displayAccountNumber, currentOwnerName, acctStatus, debtBalAmt, lienCount, custId, instId, and supplyType. If any account has lienCount > 0, those IDs can be passed to get_account_lien_details to retrieve the full lien history.

Account Number Search

search_by_account_number accepts a PWD account number with hyphens removed (e.g., 4205356001234002). It returns the same account-level fields as get_property_accounts. Note that accounts with a 420- prefix resolve reliably, while 011- prefix accounts may return empty results from this endpoint.

Lien Detail Records

get_account_lien_details takes custId, instId, and supplyType from an account record where lienCount is greater than zero, and returns per-lien objects containing lienNumber, lienStatus, liendates, debtBalAmnt, debtTotAmnt, displayAccountNumber, and supplyType. This endpoint only returns data when a lien record actually exists; calling it on a zero-lien account returns an empty data array.

Reliability & maintenanceVerified

The Phila API is a managed, monitored endpoint for water-lien.phila.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when water-lien.phila.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official water-lien.phila.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
6d ago
Latest check
4/4 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Pre-purchase property due diligence: check debtBalAmt and lienCount before closing on a Philadelphia property
  • Title search automation: flag properties with active water liens by checking lienStatus in lien detail records
  • Portfolio screening: batch-query multiple addresses to surface outstanding debtBalAmt values across a property set
  • Lien monitoring: track lienStatus and liendates changes on specific PWD accounts over time
  • Refinancing checks: confirm no outstanding water debt attached to a property before underwriting
  • Owner research: retrieve currentOwnerName and acctStatus for a given address to verify current account holder
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does water-lien.phila.gov have an official developer API?+
The City of Philadelphia offers open data through its OpenDataPhilly platform at https://opendataphilly.org, but water-lien.phila.gov does not publish a documented public developer API for lien record lookups. This Parse API covers that gap.
What does `get_account_lien_details` actually return, and when does it return data?+
It returns an array of lien objects with fields including lienNumber, lienStatus, liendates, debtBalAmnt, debtTotAmnt, displayAccountNumber, and supplyType. The endpoint only returns populated data when the account has at least one lien — meaning lienCount > 0 in the get_property_accounts response. Passing a custId/instId/supplyType combination from a zero-lien account returns an empty data array.
Are there any limitations when searching by account number?+
Yes. search_by_account_number requires the account number with all hyphens removed. Additionally, accounts with a 420- prefix resolve successfully, while accounts with an 011- prefix may return empty results. If an account number search returns nothing, try resolving the property via search_by_address and get_property_accounts instead.
Does the API cover water lien records for properties outside Philadelphia?+
No — coverage is limited to properties with Philadelphia Water Department accounts. The API returns records from water-lien.phila.gov, which is scoped to the City of Philadelphia. You can fork this API on Parse and revise it to add endpoints targeting comparable municipal water lien portals in other jurisdictions.
Does the API return payment history or installment plan details for a water account?+
Not currently. The endpoints return current debt balances (debtBalAmt, debtTotAmnt), lien status, and lien dates, but do not expose individual payment transactions or active payment plan breakdowns. You can fork this API on Parse and revise it to add an endpoint for that data if it becomes accessible.
Page content last updated . Spec covers 4 endpoints from water-lien.phila.gov.
Related APIs in Government PublicSee all →
losangeles.gov API
Search for building permits, inspection records, and property details for Los Angeles addresses to access permit histories, parcel information, code enforcement records, and occupancy certificates. Track retrofit programs and get comprehensive permit summaries to research property compliance and construction activity in LA.
qPublic Property Records API
Search for properties on qPublic and access comprehensive details including owner information, valuations, building and land characteristics, sales history, tax exemptions, and fees. Retrieve complete property records to research real estate, verify ownership, or analyze property values.
sc-charleston.publicaccessnow.com API
Look up property assessment data from Charleston County, SC by PIN to find owner information, assessed values, property characteristics, and sales history. Perfect for researching real estate details, verifying property information, or tracking Charleston County property records.
inberlinwohnen.de API
Search and browse affordable apartment listings from Berlin's state-owned housing companies, view detailed property information, and access company profiles and tenant guides. Find your next home in Berlin with comprehensive data on available rentals and housing provider information in one place.
api.developer.attomdata.com API
Look up comprehensive property details including ownership information, neighborhood data, and historical transaction trends for any address. Search for points of interest and analyze sales trends to make informed real estate decisions.
dotproperty.com.ph API
Search for residential properties for rent or sale on Dot Property Philippines and retrieve detailed information like pricing, specifications, and agent details from individual listings. Access comprehensive property data to compare options and make informed real estate decisions.
lennar-marketplace.locatealpha.com API
Access Lennar Investor Marketplace property listings along with detailed financials, demographics, rental comparables, and property management resources. Search and filter properties by market, retrieve per-property underwriting data, and explore area insights including schools, crime, income, and population trends.
offshoreleaks.icij.org API
Search for entities, individuals, and their financial connections across major offshore leak investigations including the Panama Papers and Pandora Papers. Explore detailed relationship graphs, browse officer records, and analyze bulk datasets to uncover offshore financial activities and networks.