Pennsylvania's 2,573 Tax Jurisdictions

Pennsylvania has more local taxing jurisdictions than any other state. Under Act 32 (enacted in 2008), every municipality and school district in Pennsylvania can levy a Local Earned Income Tax (EIT) on wages. The result: 2,573+ municipalities, each with its own tax rate, feeding into a system of Tax Collection Districts (TCDs).

For developers building payroll systems, Pennsylvania is the volume challenge. While Ohio is complex because of its three collection systems and Kentucky has stacking rules, Pennsylvania simply has more jurisdictions than everything else combined.

How Pennsylvania EIT Works

The Basics

Rate Structure

Most Pennsylvania municipalities follow a standard pattern:

Rate Type Standard Philadelphia Scranton Reading
Resident rate 1.0-2.0% 3.4481% 3.4% 3.6%
Non-resident rate 1.0% 3.4481% 1.0% 1.3%

The vast majority of PA's 2,573 municipalities charge the standard 1.0% non-resident rate. The exceptions are the major cities:

High-rate cities (2024-2026):

PSD Codes — The Critical Identifier

Every Pennsylvania municipality and school district is assigned a Political Subdivision Code (PSD). This 6-digit code uniquely identifies the taxing jurisdiction. PSD codes are essential because:

  1. Municipality names are ambiguous: There are multiple "Washington Township" entries in PA. The PSD code resolves the ambiguity.
  2. Tax Collection Districts use PSD codes for filing and reporting
  3. Employee W-4 forms in PA should include the PSD code

The PSD code format is: XX-YYYY where XX is the county number and YYYY is the municipality/school district number within that county.

Tax Collection Districts (TCDs)

Act 32 created Tax Collection Districts — regional agencies that collect EIT on behalf of multiple municipalities. Rather than each municipality collecting its own tax, TCDs handle collection for their region.

Key implications for payroll developers:

Major TCDs include:

Resident vs. Non-Resident Tax Rules

Pennsylvania's EIT has a specific priority system:

  1. Work location determines the non-resident tax — the municipality where the employee physically works sets the non-resident rate
  2. Residence location determines the resident tax — the municipality where the employee lives sets the resident rate
  3. The higher of the two rates applies — if the resident rate exceeds the non-resident rate, the employee owes the difference to their home municipality
  4. Credits: The non-resident tax paid to the work municipality is credited against the resident municipality's tax

Example: Employee lives in Pittsburgh (resident rate 3.0%) and works in a suburb (non-resident rate 1.0%):

Example: Employee lives in a 1.0% suburb and works in Philadelphia (3.4481%):

Implementation Guide for Developers

Data You Need Per Employee

For each Pennsylvania employee, you need:

  1. Home PSD code (or home address for lookup)
  2. Work PSD code (or work address for lookup)
  3. Home municipality EIT rate (resident rate)
  4. Work municipality EIT rate (non-resident rate)
  5. TCD for home municipality (for filing)
  6. TCD for work municipality (for filing)

API Integration

# Look up PA EIT rate for an employee working in Philadelphia
curl "https://payroll-tax-api-9f4b18020da9.herokuapp.com/v1/rates/lookup\
  ?workState=PA&workCity=Philadelphia\
  &payDate=2026-01-01&filingStatus=single" \
  -H "Authorization: Bearer ptx_free_your_key"

The API returns the local income tax rate for the specified municipality along with state and federal taxes.

Handling the 2,573 Municipalities

The naive approach — hardcoding a lookup table of all 2,573 municipalities — is technically possible but creates a maintenance burden. Rates can change annually, and municipality boundaries occasionally shift.

Better approaches:

  1. Query an API by city name and let the API handle the lookup
  2. Use PSD codes as the primary identifier, falling back to city name search
  3. Cache rates per pay period — rates don't change mid-year for most municipalities

Common Pitfalls

  1. Don't use ZIP codes for PA. ZIP codes cross municipality boundaries extensively in PA. A single ZIP code can contain 3-5 different municipalities with different rates.

  2. Don't assume 1.0% for everyone. While most municipalities charge 1.0% non-resident, the exceptions (Philadelphia, Pittsburgh, Scranton, Reading) are also the municipalities with the most employees.

  3. Don't forget school district taxes. Pennsylvania school districts can levy their own EIT, separate from the municipality EIT. This is a separate tax with a separate rate.

  4. Handle Act 32 correctly. The resident/non-resident credit calculation must follow the Act 32 rules. Simply withholding the higher rate is not correct — both municipalities may expect some portion.

Rate Stability 2024-2026

Pennsylvania EIT rates have been relatively stable across 2024-2026:

The stability is partly because Act 32 standardized the system — changes now require municipal ordinance amendments rather than simple administrative updates.

Coverage in PayrollTax API

PayrollTax API includes all 2,573+ Pennsylvania municipalities sourced from the US Census Bureau's county subdivision data, with EIT rates applied based on Act 32 rules. Major cities have specific rates; standard municipalities use the 1.0% non-resident default.

Get a free API key and query PA EIT rates for any municipality instantly.