Schneidercorp APIqpublic.schneidercorp.com ↗
Search and retrieve Spartanburg County SC property records via API. Get owner info, valuations, buildings, sales history, exemptions, and land data.
What is the Schneidercorp API?
The qPublic Property Records API provides access to Spartanburg County, SC parcel data across 2 endpoints. Use search_properties to find parcels by street address and get back parcel IDs, owner names, and legal descriptions, then call get_property_details to retrieve over 10 structured data categories per parcel including multi-year valuations, building characteristics, sales history, tax exemptions, and yard items.
curl -X GET 'https://api.parse.bot/scraper/2a0208a7-8136-41b9-97e9-115f3fd57461/search_properties?address=E+MAIN+ST' \ -H 'X-API-Key: $PARSE_API_KEY'
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 qpublic-property-records-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.
from parse_apis.qpublic_property_records_api import QPublic, Property, PropertyDetails, Building, Sale
client = QPublic()
# Search for properties by address
for prop in client.properties.search(address="100 S MAIN ST"):
print(prop.parcel_id, prop.owner, prop.property_address, prop.city)
# Get full details for a specific property
detail_property = client.properties.get(parcel_id="7-13-01-001.02")
details = detail_property.details()
print(details.parcel_id, details.summary)
for building in details.buildings:
print(building.building_id, building.style, building.gross_sq_ft, building.year_built)
for sale in details.sales:
print(sale.sale_date, sale.sale_price, sale.grantor, sale.grantee)
Search for properties by address in Spartanburg County, SC. Returns a list of matching properties with parcel ID, account number, owner, address, city, and legal description. When only one result is found, the response also includes a detail object with full property information. Multiple results require a follow-up get_property_details call for full details. Partial addresses and street names are accepted as search input.
| Param | Type | Description |
|---|---|---|
| addressrequired | string | Street address to search for (e.g. '100 S MAIN ST', '1000 E MAIN ST', 'E MAIN ST'). Partial addresses and street names are accepted. |
{
"type": "object",
"fields": {
"detail": "object (present only when total_results is 1) with full property details including summary, owners, valuations, buildings, land, sales, fees, exemptions, yard_items",
"properties": "array of property summary objects with parcel_id, account_number, owner, property_address, city, legal_description",
"total_results": "integer count of matching properties"
},
"sample": {
"data": {
"properties": [
{
"city": "CAMPOBELLO",
"owner": "PEACH COUNTRY HOLDINGS LLC",
"parcel_id": "1-26-04-012.00",
"account_number": "7932",
"property_address": "100 N MAIN ST",
"legal_description": "LOTS 1, 2 & 3 E R PERRY JR ESTATE PB 89-240"
}
],
"total_results": 8
},
"status": "success"
}
}About the Schneidercorp API
Search and Lookup
The search_properties endpoint accepts a full or partial street address (e.g. 'E MAIN ST' or '100 S MAIN ST') and returns an array of matching parcels, each with parcel_id, account_number, owner, property_address, city, and legal_description. When the search returns exactly one result, the response also includes a detail object containing the full property record, saving a second round-trip. The total_results field indicates how many parcels matched.
Property Details
The get_property_details endpoint takes a parcel_id (formatted like '7-13-01-001.02') and returns a structured record with ten data categories. The summary object covers the parcel ID, account number, millage group, land size, utilities, fire district, site conditions, and location address. The valuations object is keyed by year and exposes Market Land Value, Market Improvement Value, Total Market Value, and both Taxable and Assessed values — useful for tracking assessed value changes over time.
Buildings, Land, and Transactions
The buildings array includes each structure's Building ID, style, gross square footage, year built, condition, and a detailed area breakdown. The land array records land use classification, unit count, unit type, frontage, and depth. The sales array captures every recorded transaction with sale date, price, instrument number, deed book and page, grantor, and grantee. Additional arrays cover fees, exemptions, and yard_items (each yard item includes description, year built, size, and quantity).
Coverage and Source
qPublic, operated by Schneider Corp, is a portal used by county assessor offices across the United States to publish parcel-level property data. This API specifically covers Spartanburg County, SC. Data reflects the county assessor's records and includes the same fields visible on the public portal.
The Schneidercorp API is a managed, monitored endpoint for qpublic.schneidercorp.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when qpublic.schneidercorp.com 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 qpublic.schneidercorp.com 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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Look up current property ownership and mailing address for a specific Spartanburg County parcel
- Track year-over-year changes in assessed and market values for investment analysis
- Pull building characteristics (year built, square footage, condition) for comparable property research
- Retrieve full sales history with deed book and page references for title research
- Check tax exemptions applied to a parcel to estimate net tax liability
- Enumerate yard items and outbuildings associated with a residential property
- Aggregate land use classifications and acreage across multiple parcels for planning or appraisal work
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 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.
Does qPublic have an official developer API?+
What does `search_properties` return when multiple parcels match an address?+
parcel_id, account_number, owner, property_address, city, and legal_description — along with a total_results count. The full detail object is only included when total_results equals 1. For multi-result searches, call get_property_details with the specific parcel_id to retrieve the complete record.Does the API cover counties other than Spartanburg County, SC?+
Are tax bills or payment status included in the response?+
fees and exemptions arrays from the assessor record, but actual tax bills, payment status, and delinquency data are not included. You can fork the API on Parse and revise it to add an endpoint targeting the county's tax payment portal if that data is publicly accessible.