Why You Can't Just Pull the Permits Yourself

See Territory Feed Coverage →

Snapshot

Type Data-quality audit
Territory probed 292 jurisdictions, 150-mi radius
Live sources 11 Upstate permit offices
Method Live query · smoke-tested Jul 2026

91

Jurisdictions with no online portal

448

Raw permit-type strings, one region

12

Permit types, unified from those 448

Pickens County

New Building - Commercial

Three apartment buildings on Aspen Way, filed 2022, $1.46M / $2.80M / $1.47M.
Scope of work reads: “Apartment Building 1”.

City of Spartanburg

New Multi-Family Apartments

48-unit new construction, $9.74M.
Scope of work reads: “New Construction Apartments - 48 Total Units”.

City of Greenville

Residential, New Five Or More Family

New apartment building, $10.61M.
Scope of work reads: “new multi-family apartment building”.

Real permits from public county and city records. Same kind of building, three filing cabinets, three words for it.

The Same Apartment Building, Three Different Filing Cabinets

Start with the problem that breaks every do-it-yourself attempt. Three permit offices in the same region, all recording the construction of an apartment building, none of them using the same word for it. See the exhibit above.

Two of those three put the word commercial on housing. Anderson County does the same: a permit typed Commercial Building Permit whose scope of work says “Residential apartments.” The City of Greenville files entire complexes under Site Application - Commercial.

If you filter on the permit type, which is the obvious thing to do, you miss the buildings. If you filter on the word “commercial” you catch houses. The only thing that actually works is reading the scope-of-work text and reclassifying every record against a single vocabulary.

448 → 12

Across the Upstate, 163,780 permits arrive as 448 distinct type strings. We publish them as 12.

Each Office Invents Its Own Vocabulary

There is no shared standard, so the size of the dialect is whatever each office happened to build. One county maintains 117 permit types. The city next door manages with four.

Evidence SELECT COUNT(DISTINCT permit_type_raw) … GROUP BY source_id
Distinct raw permit-type strings per source, Upstate footprint.
Permit officePermitsType strings
Pickens County22,426117
Spartanburg County56,63894
Greenville County26,18168
Clemson16,21546
City of Greenville3,65130
Oconee County30,59427
Easley1,27126
City of Spartanburg65521
Greer4,24920
Anderson County1,81710
City of Anderson834

One New Single-Family House, Eight Ways to Say It

Every string below describes the same thing: somebody is building a house.

Evidence WHERE permit_class = 'residential_sfr'
OfficeWhat they call itCount
Spartanburg CountyNew Single Family House12,750
Oconee CountyResidential Permit4,517
Greenville CountyRESIDENTIAL NEW CONSTRUCTION3,802
Pickens CountySingle Family/Duplex3,462
ClemsonBuilding (Residential) - New Construction736
City of GreenvilleResidential, New Single Family526
Easleybuilding170
Greenville CountyTINY HOUSE10

Oconee County's entry is the quietly expensive one. Residential Permit is a single bucket that does not distinguish a new house from a water heater replacement. There is no filter you can write against that field. The classification has to be rebuilt from the description text.

The Fields Are Typed by Hand, and It Shows

These are free-text entry boxes with no validation behind them. What a clerk types is what you get.

Easley's Permit-Type Field, Verbatim

Verbatim from production permits_canonical.permit_type_raw · source_id = 'easley'

BUILDING   building   builidng   buiulding   building`   BBUILDING   electrical   RELECTRICAL   plumbing   MECHANICAL   HVAC

Six spellings of the word “building.” The same office's status field contains ISSUED 1,269 times, isued once, and IISUED once. A literal string match drops those two permits on the floor.

Nobody Agrees on What “Finished” Means

Evidence SELECT DISTINCT permit_status GROUP BY source_id
OfficeStatus valuesVocabulary
Greenville County16CLOSED, ISSUED, CO, PERMIT PRINTED, APPROVED…
Spartanburg County15Complete, Expired, Issued, Void, In Review…
Clemson11Complete, Expired, CO Issued, Issued, Denied…
Greer10CLOSED, ISSUED, REJECTED, APPROVED, INPROGRESS…
City of Greenville2Issued, Closed
Oconee County0no status field at all

Greenville County's CO means certificate of occupancy. Clemson writes the same concept as CO Issued. Nobody else records it. Oconee County publishes no status whatsoever, so “is this job still open?” is a question their data cannot answer.

The Dollar Figure Is Missing More Often Than Not

Valuation is the field that tells you whether a job is worth a phone call. Two offices in the region have never published it.

Evidence SUM(CASE WHEN valuation IS NULL …) / COUNT(*)
OfficePermitsNo dollar value
Greer4,249100.0%
City of Anderson83100.0%
Greenville County26,18178.2%
Oconee County30,59471.5%
Pickens County22,42648.0%
Spartanburg County56,63820.6%
Easley1,2710.9%

And the Address Is a Different Shape in Every County

Verbatim from production permits_canonical.address, most recent row per source
OfficeAddress as publishedCity field
Greenville County110 Caitlin CtNULL
City of Greenville3119 N Pleasantburg Dr Ste Greenville SCGreenville
Spartanburg County211 J St Greer SC 29651Greer
Oconee County385 Grandview Farm Dr Seneca SC 29678NULL
Greer105 E Hunt St, Greer, SC 29650Greer

Bare street, street with city and state, full postal with ZIP, comma-delimited, and a stray Ste with no suite number after it. Greenville County publishes no city at all. That's why handing its raw address to a national geocoder returns coordinates in Mississippi. There really is a street called Shoemaker Road in more than one state.

Most Jurisdictions Have Nothing to Connect To

The dialect problem only applies to offices that publish data at all. We probed every county and every incorporated place over 15,000 people within 150 miles of Greenville. This is what came back.

91 · no online portal: paper, in person, or no county codes enforcement
45 · blocked by a login wall or a firewall
33 · portal exists, anonymous access unconfirmed
40 · buildable, but on a platform we don't yet support
66 · built, or ready to build on a supported platform
17 · covered by a county-level feed, or dead

Read the red band first. Ninety-one jurisdictions have no online portal of any kind. Laurens County, South Carolina: “there is no online portal at all.” Carter County, Tennessee: “permits are handled via paper application picked up in person or by phone.” No amount of engineering produces a feed from a filing cabinet.

Another 45 sit behind a login wall or a firewall. For the ones that do publish something, the format is often a document rather than data: planning agendas as RSS plus PDF, county council records as scanned PDFs with code-named files, tax sale lists that have to be run through a text extractor to get an address out.

1 in 4

Fewer than one jurisdiction in four is reachable as structured data. The rest is paper, logins, and PDFs.

And Then It Breaks, Quietly

Acquiring the data once is the easy half. These are other people's systems, changed without notice, and the failures do not announce themselves. Every entry below is from a single recent stretch of operating this pipeline.

  • Aug 2026

    A statewide parcel service went behind a token South Carolina DOT's parcel layer, used to place permits on the map, started requiring authentication. Because the service reports failures with an HTTP 200 status and an error in the body, every lookup came back looking like a legitimate “this parcel does not exist.” The pipeline cached those answers. 311 permits went unmappable while the daily job reported success.

  • Apr 2026

    A city feed froze without a notice The City of Spartanburg's dashboard stopped updating on 10 April. The endpoint still answers. It still returns 953 records. Nothing about the response says the data behind it stopped moving four months ago.

  • Jul 2026

    A results grid silently capped itself One county portal returns at most 1,000 rows per search and sorts them oldest first. Ask for six weeks and it withholds the newest permits (exactly the ones anybody is waiting on) while every page you were offered loads perfectly.

  • Aug 2026

    A county was being cut in half by its own bounding box Spartanburg County extends further east than the coordinate boundary we validated against. Permits in the eastern third of the county were geocoded correctly and then discarded as implausible. Nothing errored.

None of these produced an error message. Each was found by checking output against expectation, which is a thing somebody has to do on purpose, on a schedule, forever.

What You're Actually Buying

Not access to public records. You already have that, and so does everybody else. You're buying the part between the record and the usable answer: every reachable jurisdiction in your territory pulled daily, every dialect translated into one vocabulary, addresses resolved to real coordinates, and somebody watching the whole thing for the failures that don't announce themselves.

The alternative is a search box, a login you don't have, and 91 offices that would like you to come down in person.

For the shorter, less technical version of this same argument (aimed at a contractor deciding whether to build this in-house), see Every Permit in Greenville Is Public.

Every figure on this page is a live query against the Pemberton Data Solutions permit warehouse or the jurisdiction recon conducted 21 July 2026. Permit counts reflect the Upstate footprint of 163,780 records across 11 sources. Jurisdiction universe: all counties and incorporated places over 15,000 population within 150 straight-line miles of downtown Greenville, South Carolina, probed by live smoke test. Permit numbers, valuations, and scope-of-work text are quoted from public records as published by the issuing office.

Want This Coverage for Your Territory?

66 jurisdictions are already built or ready to build. See which ones are live near you, and what a Territory Feed subscription actually includes.

See Plans & Coverage →