# County Property Owner & Assessor Data Lookup (`seemuapps/county-property-owner-scraper`) Actor

Look up a property's current owner name, mailing address, assessed value, and characteristics from public county assessor open-data feeds by street address.

- **URL**: https://apify.com/seemuapps/county-property-owner-scraper.md
- **Developed by:** [Andrew](https://apify.com/seemuapps) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$8.00 / 1,000 parcel records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## County Property Owner & Assessor Data Lookup

Look up any property's current owner name, mailing address, assessed value, and building characteristics — straight from public county assessor open-data feeds, by street address, no login required.

### What you get

- Owner name and owner mailing address (where the county publishes it)
- Situs (property) address, parcel ID, and a link to the county's own record
- Assessed value, land use / property type, year built, living area, and lot size — whichever of these each county actually publishes
- Sourced directly from official county assessor / property appraiser open-data services — the same data the county's own map viewer uses

### Use cases

- Real estate investor lead generation — find the owner behind a vacant lot, distressed property, or off-market address
- Skip tracing starting point — get the owner's mailing address to begin direct-mail outreach
- Property research and due diligence before an offer
- Portfolio and comps research — pull assessed value and building details for a list of addresses

### Supported counties

| County | What you get |
|---|---|
| Harris County, TX (Houston) | Owner name, mailing address, situs address, assessed value, land use class, lot size. No year built / living area published on this feed. |
| Miami-Dade County, FL | Owner name, mailing address, situs address, assessed value, land use, year built, living area, lot size — the most complete of the three. |
| Los Angeles County, CA | Situs address, assessed value, land use, year built, living area. Owner name and mailing address are **not** included — California law keeps that off the county's bulk-public GIS feed. |

### How to use

1. Choose **County**
2. Enter **Address** — house number + street name is enough (e.g. `2701 Westheimer` or `801 Biscayne Blvd`). Leave off city/state/zip; the county is already selected. A partial street name with no house number returns every parcel on that street.
3. Set **Max Items** (default 20; set 0 for the source's own cap of 1000)
4. Run the actor — results appear in the **Dataset** tab

### Output format

Each dataset record:

```json
{
  "county": "harris-tx",
  "parcelId": "1147210110005",
  "ownerName": "EVERSMEYER DOUGLAS CHARLES",
  "ownerMailingAddress": "2701 WESTHEIMER RD #11F, HOUSTON, TX, 77098",
  "situsAddress": "2701 WESTHEIMER, HOUSTON, 77098",
  "assessedValue": 420508,
  "landUse": "Z5",
  "yearBuilt": null,
  "livingAreaSqft": null,
  "lotSizeSqft": null,
  "url": "https://hcad.org/"
}
```

Fields a given county doesn't publish are `null` rather than guessed or fabricated.

### Matching notes

- Matching is by house number + street name, not a full geocoded address — it is intentionally forgiving of a missing/extra city, state, or zip in the input, but a misspelled street name will not match.
- A house number with no exact match in the county's data returns zero rows — try dropping the house number to search the whole street.
- Condo/multi-unit buildings can return multiple parcels for the same street address (one per unit) — each unit is its own dataset record.

# Actor input Schema

## `county` (type: `string`):

Which county assessor open-data feed to search.

## `address` (type: `string`):

Street address or partial address to search, e.g. '2701 Westheimer' or '801 Biscayne Blvd'. Leave off city/state/zip — matching is by house number + street name within the selected county only. A partial street name (no house number) returns every parcel on that street, up to Max Items.

## `maxItems` (type: `integer`):

Maximum number of matching parcel records to return. Set 0 for the source service's own cap (1000).

## Actor input object example

```json
{
  "county": "harris-tx",
  "address": "2701 Westheimer",
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

One parcel per record. Fields: county, parcelId, ownerName, ownerMailingAddress, situsAddress, assessedValue, landUse, yearBuilt, livingAreaSqft, lotSizeSqft, url. Fields not published by a given county are null.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "address": "2701 Westheimer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/county-property-owner-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "address": "2701 Westheimer" }

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/county-property-owner-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "address": "2701 Westheimer"
}' |
apify call seemuapps/county-property-owner-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/county-property-owner-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wRDZAcRfmhONyANur/builds/c2i82ref60zRI1KMH/openapi.json
