# Dallas CAD Property Records Scraper (`spry_frame/dallas-cad-scraper`) Actor

Scrapes public property records from the Dallas Central Appraisal District (DCAD). Search by owner name, street address, or city to extract ownership, valuation, tax, and exemption data.

- **URL**: https://apify.com/spry\_frame/dallas-cad-scraper.md
- **Developed by:** [COSENT GROUP](https://apify.com/spry_frame) (community)
- **Categories:** Real estate, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## Dallas CAD Property Records Scraper

Extract full property records from the **Dallas Central Appraisal District (DCAD)** — one of the largest county appraisal databases in the US, covering every property in Dallas County, Texas (2.6 million+ accounts).

Search by **owner name** or **street address** and get ownership details, appraised values, tax estimates, exemption status, deed history, and building info — all from DCAD's public database, no login required.

### Why Use This

Dallas County is one of the most active real estate markets in the country. DCAD's public records are a goldmine for:

- Finding **absentee owners** and out-of-state landlords
- Identifying **properties with no homestead exemption** (likely investor-owned)
- Pulling **tax burden data** for underwriting or comps
- Building **skip-trace lead lists** for wholesalers and agents
- Researching **ownership history** and deed transfer dates
- Tracking **commercial and BPP accounts** for business intelligence

### Data Fields

| Field | Description |
|---|---|
| `accountNumber` | DCAD account number (unique identifier) |
| `ownerName` | Current owner name |
| `ownerMailingAddress` | Owner's mailing address (may differ from property — key for absentee owner lists) |
| `propertyAddress` | Physical property address |
| `city` | City |
| `zip` | ZIP code |
| `neighborhood` | DCAD neighborhood code |
| `legalDescription` | Full legal property description |
| `deedDate` | Most recent deed transfer date |
| `propertyType` | Residential / Commercial / Business Personal Property |
| `yearBuilt` | Year the main structure was built |
| `livingArea` | Living area in square feet (residential) |
| `landValue` | Appraised land value ($) |
| `improvementValue` | Appraised improvement (structure) value ($) |
| `appraisedValue` | Total appraised value ($) |
| `taxableValue` | Taxable value after exemptions ($) |
| `estimatedTaxTotal` | Total estimated annual tax bill ($) |
| `taxJurisdictions` | Tax breakdown by entity (city, school, county, college, hospital, special district) |
| `exemptions` | Active exemptions — e.g. Homestead, Over-65, Disabled Veteran |
| `url` | Direct link to the DCAD record |
| `scrapedAt` | Timestamp of when the record was scraped |

### Input Options

| Parameter | Description | Default |
|---|---|---|
| `searchType` | `OWNER` (by owner name) or `ADDRESS` (by street name) | `OWNER` |
| `searchTerms` | List of names or streets to search. Use `%` as a wildcard. | — |
| `accountType` | `RESIDENTIAL`, `COMMERCIAL`, `BPP`, or `ALL` | `RESIDENTIAL` |
| `city` | City filter for address searches (e.g. `DALLAS`, `IRVING`) | — |
| `maxResultsPerSearch` | Max records returned per search term | `100` |
| `proxyConfiguration` | Proxy settings (Apify Proxy recommended) | Apify Proxy |

### Example Inputs

**Find all residential properties owned by someone named Johnson:**
```json
{
  "searchType": "OWNER",
  "searchTerms": ["JOHNSON"],
  "accountType": "RESIDENTIAL",
  "maxResultsPerSearch": 200
}
````

**Find properties on a specific street:**

```json
{
  "searchType": "ADDRESS",
  "searchTerms": ["LAKECREST CIR"],
  "city": "IRVING",
  "accountType": "ALL",
  "maxResultsPerSearch": 50
}
```

**Search multiple owners in one run:**

```json
{
  "searchType": "OWNER",
  "searchTerms": ["SMITH", "JONES", "WILLIAMS"],
  "accountType": "RESIDENTIAL",
  "maxResultsPerSearch": 100
}
```

### Example Output

```json
{
  "accountNumber": "321607300C0190000",
  "ownerName": "SMITH ANGEL",
  "ownerMailingAddress": "7622 LAKECREST CIR, IRVING, TEXAS 75063",
  "propertyAddress": "7622 LAKECREST CIR",
  "city": "IRVING",
  "zip": "75063",
  "neighborhood": "5ASO02",
  "legalDescription": "LAKE FOREST HILLS 5TH INST BLK C/7602 LT 19",
  "deedDate": "6/22/2026",
  "propertyType": "Residential",
  "yearBuilt": "1971",
  "livingArea": "2,450",
  "landValue": 120000,
  "improvementValue": 424350,
  "appraisedValue": 544350,
  "taxableValue": 370480,
  "estimatedTaxTotal": 7238.99,
  "taxJurisdictions": [
    { "jurisdiction": "City", "estimatedTax": 1820.45 },
    { "jurisdiction": "School", "estimatedTax": 3912.10 }
  ],
  "exemptions": "HOMESTEAD EXEMPTION, OTHER EXEMPTION",
  "url": "https://www.dallascad.org/AcctDetailRes.aspx?ID=321607300C0190000",
  "scrapedAt": "2026-07-23T18:07:45.000Z"
}
```

### Tips for Best Results

- **Owner searches**: Use last name only for broad results, or `LAST FIRST` for a specific owner. The `%` wildcard works mid-string (e.g. `SM%TH`).
- **Address searches**: Use the street name only, no number (e.g. `LAKECREST CIR` not `7622 LAKECREST CIR`). Add a city filter to narrow results.
- **Absentee owner list**: Run an owner search and filter output records where `ownerMailingAddress` city differs from `city`.
- **No-exemption list**: Filter output where `exemptions` is null — these are often investor-owned or recently transferred.
- **Multiple terms**: Pass an array of search terms to scrape several names or streets in a single run.

### Data Source & Legality

All data is sourced from the [Dallas Central Appraisal District public website](https://www.dallascad.org/), which is a Texas government agency. Property appraisal records are public information under Texas law. No login, credentials, or API key is required.

DCAD data is updated annually with interim changes applied throughout the year. Appraised values reflect the current tax year's proposed or certified values.

# Actor input Schema

## `searchType` (type: `string`):

How to search DCAD — by owner name or by street address.

## `searchTerms` (type: `array`):

For Owner search: enter last name or 'Last First' (e.g. 'SMITH', 'JONES ROBERT'). For Address search: enter street names (e.g. 'MAIN', 'OAK%'). Use % as wildcard.

## `accountType` (type: `string`):

Filter by property type.

## `city` (type: `string`):

Filter results to a specific city. Leave blank for all cities.

## `maxResultsPerSearch` (type: `integer`):

Maximum number of property records to scrape per search term (0 = unlimited).

## `proxyConfiguration` (type: `object`):

Proxy settings. DCAD is a government site — Apify's default datacenter proxies work fine.

## Actor input object example

```json
{
  "searchType": "OWNER",
  "searchTerms": [
    "JOHNSON",
    "WILLIAMS DAVID",
    "GARCIA%"
  ],
  "accountType": "RESIDENTIAL",
  "city": "DALLAS",
  "maxResultsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `accountNumber` (type: `string`):

DCAD account number — unique identifier for the property record.

## `ownerName` (type: `string`):

Current property owner name as listed in DCAD records.

## `ownerMailingAddress` (type: `string`):

Owner's mailing address — may differ from the property address for absentee owners.

## `propertyAddress` (type: `string`):

Physical street address of the property.

## `city` (type: `string`):

City where the property is located.

## `zip` (type: `string`):

5-digit ZIP code of the property.

## `neighborhood` (type: `string`):

DCAD internal neighborhood code.

## `legalDescription` (type: `string`):

Full legal description of the property.

## `deedDate` (type: `string`):

Date of the most recent deed transfer.

## `propertyType` (type: `string`):

Type of property: Residential, Commercial, or Business Personal Property.

## `yearBuilt` (type: `string`):

Year the main structure was built.

## `livingArea` (type: `string`):

Total living area in square feet (residential properties).

## `landValue` (type: `string`):

Appraised value of the land only.

## `improvementValue` (type: `string`):

Appraised value of the structure/improvements.

## `appraisedValue` (type: `string`):

Total appraised value (land + improvements).

## `taxableValue` (type: `string`):

Taxable value after exemptions are applied.

## `estimatedTaxTotal` (type: `string`):

Total estimated annual property tax bill across all jurisdictions.

## `exemptions` (type: `string`):

Active exemptions on the property, e.g. Homestead Exemption, Over-65, Disabled Veteran.

## `url` (type: `string`):

Direct URL to the property record on the DCAD website.

## `scrapedAt` (type: `string`):

ISO 8601 timestamp of when this record was scraped.

# 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 = {
    "searchType": "OWNER",
    "searchTerms": [
        "SMITH"
    ],
    "accountType": "RESIDENTIAL",
    "maxResultsPerSearch": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("spry_frame/dallas-cad-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 = {
    "searchType": "OWNER",
    "searchTerms": ["SMITH"],
    "accountType": "RESIDENTIAL",
    "maxResultsPerSearch": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("spry_frame/dallas-cad-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchType": "OWNER",
  "searchTerms": [
    "SMITH"
  ],
  "accountType": "RESIDENTIAL",
  "maxResultsPerSearch": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call spry_frame/dallas-cad-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=spry_frame/dallas-cad-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Dallas CAD Property Records Scraper",
        "description": "Scrapes public property records from the Dallas Central Appraisal District (DCAD). Search by owner name, street address, or city to extract ownership, valuation, tax, and exemption data.",
        "version": "1.0",
        "x-build-id": "e0FvqOJy2RwMN3uq5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/spry_frame~dallas-cad-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-spry_frame-dallas-cad-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/spry_frame~dallas-cad-scraper/runs": {
            "post": {
                "operationId": "runs-sync-spry_frame-dallas-cad-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/spry_frame~dallas-cad-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-spry_frame-dallas-cad-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "searchType",
                    "searchTerms"
                ],
                "properties": {
                    "searchType": {
                        "title": "Search Type",
                        "enum": [
                            "OWNER",
                            "ADDRESS"
                        ],
                        "type": "string",
                        "description": "How to search DCAD — by owner name or by street address.",
                        "default": "OWNER"
                    },
                    "searchTerms": {
                        "title": "Search Terms",
                        "type": "array",
                        "description": "For Owner search: enter last name or 'Last First' (e.g. 'SMITH', 'JONES ROBERT'). For Address search: enter street names (e.g. 'MAIN', 'OAK%'). Use % as wildcard.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "accountType": {
                        "title": "Property Type",
                        "enum": [
                            "ALL",
                            "RESIDENTIAL",
                            "COMMERCIAL",
                            "BPP"
                        ],
                        "type": "string",
                        "description": "Filter by property type.",
                        "default": "RESIDENTIAL"
                    },
                    "city": {
                        "title": "City Filter (Address search only)",
                        "type": "string",
                        "description": "Filter results to a specific city. Leave blank for all cities."
                    },
                    "maxResultsPerSearch": {
                        "title": "Max Results Per Search Term",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of property records to scrape per search term (0 = unlimited).",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. DCAD is a government site — Apify's default datacenter proxies work fine."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
