# Dallas CAD Property Records Scraper (`solidcode/dallascad-scraper`) Actor

\[💰 $4.00 / 1K] Extract Dallas County, TX property records from DCAD by owner, address, account number or business name. Get owner mailing addresses, appraised and taxable values, exemptions, estimated taxes, building details, land, deed dates and value history.

- **URL**: https://apify.com/solidcode/dallascad-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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.

- **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

## Dallas CAD Property Records Scraper

Pull official Dallas County, Texas property records from the Dallas Central Appraisal District (DCAD) at scale — owner names and mailing addresses, appraised and taxable values, homestead and other exemptions, estimated taxes by taxing unit, building characteristics, land segments, deed dates, and 28 years of value history. Search by owner, street address, account number, or business name and get one clean row per parcel. Built for Texas real estate investors, title researchers, property tax consultants, appraisers, and skip tracers who need bulk county appraisal data without clicking through DCAD's search forms ten results at a time.

### Why This Scraper?

- **All four DCAD search surfaces in one actor** — owner name, street address, 17-character account number, and business name. Account-number lookup is the fastest path when you already hold DCAD ids from a tax roll or title file, and business-name search reaches Business Personal Property accounts that owner search never returns.
- **28 years of value history per parcel** — opt in and every property carries a year-by-year record back to 1999: owner of record, legal description, deed transfer date, improvement value, land value, market value, per-jurisdiction taxable value, and the exemptions in force that year.
- **Six taxing jurisdictions broken out on every parcel** — city, school district, county, community college, hospital district, and special district, each with its tax rate per $100, exemption amount, taxable value, estimated tax, and tax ceiling.
- **71 fields on a fully enriched parcel, 73 with value history, 13 in fast mode** — turn full detail off for cheap bulk sweeps that still return address, city, owner, market value, and account type; turn it on for the complete appraisal record. Every row of a run carries exactly the same columns, with `null` where DCAD publishes nothing, so a CSV or Excel export never shifts columns from one row to the next.
- **Two-word street names handled correctly** — `SHADY GLEN` returns its 70 real parcels and `CEDAR HILL` its 263, instead of collapsing to `SHADY` or `CEDAR` and burying you in unrelated results. Punctuated names work too: `O'BRIEN` finds all 156 O'Brien accounts even though DCAD files the name without the apostrophe.
- **30 residential building characteristics** — year built, effective year built, actual age, living and total area, bedrooms, full and half baths, kitchens, fireplaces, wet bars, foundation, roof type and material, exterior wall, heating, air conditioning, and pool/spa/sauna/deck/sprinkler flags.
- **All 32 Dallas County cities as a validated dropdown** — Addison through Wylie, picked from a list rather than typed, so a misspelled city can never silently return zero rows.
- **`%` wildcard on owner and business names** — `%SMITH` returns every owner with SMITH anywhere in the name, and `%INSURANCE` sweeps a whole industry of business accounts.
- **Skip-trace-ready ownership** — owner mailing address split into street, city, state, and ZIP, plus multi-owner percentage splits, the registered tax agent, deed transfer date, and the deed instrument number parsed out of the legal description.
- **Land and commercial building detail** — per land segment: state code, zoning, frontage, depth, area, pricing method, unit price, market adjustment, adjusted price, and ag-land flag. Commercial parcels add per-building description, net lease area, stories, units, quality, condition, and four-way depreciation.

### Use Cases

**Real Estate Investment**

- Find absentee owners: parcels where the mailing address differs from the property address
- Spot likely non-owner-occupied homes by filtering rows with no homestead exemption
- Compare appraised value per square foot across neighborhood codes
- Track 28-year value trends to time entries and exits in a submarket

**Property Tax Consulting**

- Build protest evidence from year-by-year market and taxable value swings
- Identify parcels whose value jumped in the latest revaluation year
- Audit exemptions: find homesteads missing from properties that qualify
- Pull estimated tax by jurisdiction to model a client's total liability

**Title & Legal Research**

- Verify current owner of record, ownership percentages, and deed transfer date
- Retrieve full legal descriptions and deed instrument numbers for chain-of-title work
- Confirm parcel identity from an account number in seconds
- Reconstruct ownership history for a parcel across nearly three decades

**Lead Generation & Skip Tracing**

- Compile owner mailing lists for a single street, city, or whole-county owner-name sweep
- Target commercial owners by business name for equipment and inventory accounts
- Build direct-mail lists filtered by value band, year built, or pool presence
- Locate all parcels held by one owner or LLC across Dallas County

**Market & Data Analytics**

- Benchmark assessed values across the county's 32 cities
- Model housing stock by year built, building class, and construction type
- Feed county appraisal data into internal CRMs, dashboards, and valuation models
- Measure exemption uptake and taxable-value erosion by school district

### Getting Started

#### Look up one owner

```json
{
  "searchType": "owner",
  "searchTerms": ["SMITH JOHN"]
}
```

#### Sweep a street in one city

```json
{
  "searchType": "address",
  "searchTerms": ["LOVERS"],
  "city": "DALLAS",
  "accountTypes": ["residential"],
  "maxResults": 200
}
```

#### Wildcard owner sweep with full detail

```json
{
  "searchType": "owner",
  "searchTerms": ["%HOLDINGS LLC", "%PROPERTIES LP"],
  "accountTypes": ["residential", "commercial"],
  "maxResults": 500,
  "includeDetails": true
}
```

#### Everything on specific accounts, with history

```json
{
  "searchType": "account",
  "searchTerms": ["00000398224420000", "00000398224430000"],
  "maxResults": 0,
  "includeDetails": true,
  "includeValueHistory": true
}
```

### Input Reference

#### What to Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchType` | string | `"owner"` | How to look up properties. Options: `owner` (Owner Name), `address` (Street Address), `account` (Account Number), `business` (Business Name). |
| `searchTerms` | array of strings | `["SMITH JOHN"]` | One term per line. Owner Name: last name first, e.g. `SMITH JOHN` or just `SMITH`. Street Address: `LOVERS` for a whole street, or `6646 E LOVERS LN` for one property. Account Number: the full 17-character account number. Business Name: e.g. `WALMART`. Use `%` as a wildcard; punctuation such as apostrophes is handled for you. Any one term returns at most 700 matches. Street names are matched on their first 23 characters and house numbers on their first 7 — DCAD's own limits. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `accountTypes` | array of strings | `["residential"]` | Which kinds of accounts to include. Options: `residential` (Residential), `commercial` (Commercial), `bpp` (Business Personal Property). Select all three to get everything. |
| `city` | string | `""` (All Cities) | Limit results to a single Dallas County city. Choices: All Cities, Addison, Balch Springs, Carrollton, Cedar Hill, Cockrell Hill, Combine, Coppell, Dallas, DeSoto, Duncanville, Farmers Branch, Ferris, Garland, Glenn Heights, Grand Prairie, Grapevine, Highland Park, Hutchins, Irving, Lancaster, Lewisville, Mesquite, No Town, Ovilla, Richardson, Rowlett, Sachse, Seagoville, Sunnyvale, University Park, Wilmer, Wylie. Applies to Street Address searches only. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Total properties to collect across all your search terms. Set to `0` for no limit. Because terms run in parallel a run can finish a few rows over your limit rather than cutting a page in half, and no single term can exceed DCAD's own 700-match ceiling. |
| `includeDetails` | boolean | `true` | Open each property's full record for appraised and taxable values, exemptions, estimated taxes by taxing unit, owner mailing address, legal description, deed date, building characteristics, and land details. Turn off for a much faster run returning address, city, owner, total value, and property type only. |
| `includeValueHistory` | boolean | `false` | Also collect the year-by-year history for each property: past owners, market value, taxable value, and exemptions going back as far as 1999. |

### Output

One row per property account. Every row in a run carries the same key set — anything DCAD does not publish for that parcel comes back as `null` rather than a missing column. Example (residential, full detail and history enabled, trimmed for length):

```json
{
  "accountNumber": "00000398224420000",
  "accountType": "RESIDENTIAL",
  "url": "https://www.dallascad.org/AcctDetailRes.aspx?ID=00000398224420000",
  "searchType": "account",
  "searchTerm": "00000398224420000",
  "scrapedAt": "2026-07-24T22:33:15+00:00",
  "detailsLoaded": true,
  "valueHistoryLoaded": true,
  "propertyAddress": "6646 E LOVERS LN",
  "addressLine2": "Bldg: P Suite: 1801",
  "city": "DALLAS",
  "neighborhoodCode": "1DS525",
  "mapsco": "36-D (DALLAS)",
  "ownerName": "SMITH JOHN",
  "ownerMailingAddress": "6646 E LOVERS LN APT 1801, DALLAS, TEXAS 752141692",
  "ownerCity": "DALLAS",
  "ownerState": "TEXAS",
  "ownerZip": "752141692",
  "owners": [{ "name": "SMITH JOHN", "ownershipPercent": 100.0 }],
  "legalDescription": "OAKS ON THE LANE CONDO PH II | BLK 1/5431 PT LOT 1 ACS 2.568 | BLDG P UNIT 1801 0269% CE",
  "deedTransferDate": "3/30/2021",
  "deedTransferDateISO": "2021-03-30",
  "deedInstrument": "INT202100089667",
  "valueYear": 2026,
  "improvementValue": 78630,
  "landValue": 45340,
  "marketValue": 123970,
  "revaluationYear": 2025,
  "yearBuilt": 1979,
  "livingArea": 805,
  "buildingClass": "CONDOMINIUM",
  "bedrooms": 2,
  "bathsFull": 1,
  "stories": "ONE STORY",
  "hasPool": false,
  "landSegments": [
    {
      "number": 1,
      "stateCode": "SFR - CONDOMINIUMS",
      "zoning": "MULTIFAMILY DISTRICT 1",
      "areaValue": 219024.0,
      "areaUnit": "SQUARE FEET",
      "unitPrice": 30.0,
      "adjustedPrice": 45338,
      "agLand": false
    }
  ],
  "exemptions": ["HOMESTEAD EXEMPTION"],
  "hasHomesteadExemption": true,
  "taxJurisdictions": [
    {
      "category": "city",
      "name": "DALLAS",
      "taxRatePer100": 0.6988,
      "exemptionAmount": 24794,
      "taxableValue": 99176,
      "estimatedTax": 693.04,
      "taxCeiling": null
    }
  ],
  "totalTaxableValue": 99176,
  "totalEstimatedTaxes": 1222.72,
  "valueHistory": [
    {
      "year": 2026,
      "ownerName": "SMITH JOHN",
      "marketValue": 123970,
      "maxTaxableValue": 99176,
      "exemptions": ["HOMESTEAD EXEMPTION"]
    }
  ]
}
```

#### Identity & Source

| Field | Type | Description |
|-------|------|-------------|
| `accountNumber` | string | 17-character DCAD account number |
| `accountType` | string | `RESIDENTIAL`, `COMMERCIAL`, or `BPP` |
| `url` | string | Direct link to the property's DCAD record page |
| `searchType` | string | Which search mode produced this row |
| `searchTerm` | string | The exact term you entered that produced this row |
| `scrapedAt` | string | ISO 8601 timestamp of collection |
| `detailsLoaded` | boolean | `true` when the full record was read; `false` marks the handful of rows whose detail page did not load, so a blank value is never mistaken for "nothing on file" |
| `valueHistoryLoaded` | boolean | Same signal for the year-by-year history, when it was requested |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `propertyAddress` | string | Situs street address of the parcel |
| `addressLine2` | string | Building, suite, or unit qualifier |
| `city` | string | City the parcel sits in |
| `neighborhoodCode` | string | DCAD neighborhood code (residential records) |
| `marketArea` | string | Market area code (commercial records) |
| `mapsco` | string | Mapsco grid reference |

#### Owner, Deed & Legal

| Field | Type | Description |
|-------|------|-------------|
| `ownerName` | string | Primary owner of record |
| `businessName` | string | Business name on Business Personal Property accounts |
| `ownerMailingAddress` | string | Full mailing address as printed by DCAD |
| `ownerCity` | string | Mailing city |
| `ownerState` | string | Mailing state |
| `ownerZip` | string | Mailing ZIP |
| `owners` | array | Multi-owner splits: `name`, `ownershipPercent` (a number, e.g. `50.0`) |
| `taxAgent` | string | Registered tax agent, when one is on file |
| `legalDescription` | string | Full legal description, lines joined |
| `legalDescriptionLines` | array of strings | The raw legal description lines |
| `deedTransferDate` | string | Most recent deed transfer date, as DCAD prints it (`M/D/YYYY`) |
| `deedTransferDateISO` | string | The same date as `YYYY-MM-DD`, ready to sort and filter |
| `deedInstrument` | string | Instrument number parsed from the legal description |

#### Values, Exemptions & Taxes

| Field | Type | Description |
|-------|------|-------------|
| `valueYear` | integer | Appraisal year these values apply to |
| `improvementValue` | integer | Building (improvement) value |
| `landValue` | integer | Land value |
| `marketValue` | integer | Total market value |
| `valueInDispute` | boolean | `true` when DCAD shows "Value in Dispute" instead of a figure |
| `revaluationYear` | integer | Most recent revaluation year |
| `previousRevaluationYear` | integer | Prior revaluation year |
| `exemptions` | array of strings | Exemptions in force, e.g. `HOMESTEAD EXEMPTION`. `null` on the rare record where DCAD publishes no exemption section at all, so "none on file" and "not published" stay distinguishable |
| `hasHomesteadExemption` | boolean | Quick flag for owner-occupied homesteads |
| `taxJurisdictions` | array | Six jurisdictions (city, school, county, college, hospital, special district), each with `name`, `taxRatePer100`, `exemptionAmount`, `taxableValue`, `estimatedTax`, `taxCeiling` |
| `totalTaxableValue` | integer | Highest taxable value across jurisdictions |
| `totalEstimatedTaxes` | number | DCAD's total estimated annual tax |

#### Building Characteristics

| Field | Type | Description |
|-------|------|-------------|
| `yearBuilt` | integer | Year the main building was built |
| `effectiveYearBuilt` | integer | Effective year built after improvements |
| `actualAge` | integer | Actual age in years |
| `livingArea` | integer | Living area in square feet |
| `totalArea` | integer | Total area in square feet |
| `buildingClass` | string | e.g. `CONDOMINIUM`, `SINGLE FAMILY` |
| `constructionType` | string | e.g. `FRAME`, `MASONRY` |
| `foundation` | string | Foundation type |
| `roofType` | string | Roof shape |
| `roofMaterial` | string | Roof covering material |
| `exteriorWall` | string | Exterior wall material |
| `bedrooms` | integer | Bedroom count |
| `bathsFull` | integer | Full bathroom count |
| `bathsHalf` | integer | Half bathroom count |
| `kitchens` | integer | Kitchen count |
| `fireplaces` | integer | Fireplace count |
| `wetBars` | integer | Wet bar count |
| `stories` | string | e.g. `ONE STORY` |
| `heating` | string | Heating system |
| `airConditioning` | string | Cooling system |
| `hasPool`, `hasSpa`, `hasSauna`, `hasDeck`, `hasSprinkler` | boolean | Amenity flags |
| `basement`, `fenceType`, `desirability` | string | Basement type, fence type, condition/desirability rating |
| `percentComplete`, `depreciation` | integer, number | Percent complete and depreciation percentage |

#### Structures & Land

| Field | Type | Description |
|-------|------|-------------|
| `additionalImprovements` | array | Detached structures: `number`, `improvementType`, `construction`, `floor`, `exteriorWall`, `area` |
| `improvements` | array | Commercial buildings: `description`, `totalArea`, `yearBuilt`, `construction`, `foundation`, `foundationArea`, `netLeaseArea`, `stories`, `units`, `basement`, `heat`, `ac`, `quality`, `condition`, plus four depreciation measures |
| `landSegments` | array | `number`, `stateCode`, `zoning`, `frontageFt`, `depthFt`, `areaValue` (number), `areaUnit` (e.g. `SQUARE FEET`), `pricingMethod`, `unitPrice`, `marketAdjustment`, `adjustedPrice`, `agLand` |

#### Value History (when enabled)

`valueHistory` is an array with one entry per appraisal year, newest first, reaching back as far as 1999.

| Field | Type | Description |
|-------|------|-------------|
| `year` | integer | Appraisal year |
| `ownerName` | string | Owner of record that year |
| `ownerAddress` | string | Owner mailing address that year |
| `legalDescription` | string | Legal description on file that year |
| `deedTransferDate` | string | Deed transfer date on file that year |
| `deedTransferDateISO` | string | The same date as `YYYY-MM-DD` |
| `improvementValue` | integer | Building value that year |
| `landValue` | integer | Land value that year |
| `marketValue` | integer | Total market value that year |
| `homesteadCapped` | integer | Homestead-capped value, when DCAD published one |
| `taxableValue` | object | Taxable value per jurisdiction: `city`, `isd`, `county`, `college`, `hospital`, `specialDistrict` |
| `maxTaxableValue` | integer | Highest taxable value across jurisdictions that year |
| `exemptions` | array of strings | Exemptions in force that year |

### Tips for Best Results

- **Owner names are stored last name first.** Search `SMITH JOHN`, not `JOHN SMITH`. When in doubt, search the surname alone and filter the output.
- **Use `%` as a wildcard for partial matches.** `%LLC` finds every owner whose name contains LLC, `SMITH%` anchors to the start. This is the single fastest way to sweep entities across the county.
- **Type the street name exactly as it is signposted.** `SHADY GLEN`, `CEDAR HILL`, and `BEAR RUN` are searched as written, and a trailing street type such as `LN` or `RD` is looked up both ways automatically — so you never have to guess which words are the street name and which are the street type.
- **Any one search term tops out at 700 matches.** That is Dallas CAD's own ceiling, not ours: a whole-county sweep of `SMITH` stops at 700 however high you set Max Results, and the run tells you when a term hit it. To go past 700, split the term into narrower ones — `SMITH A`, `SMITH B`, or street-by-street instead of city-wide — and add them all to Search Terms.
- **Turn off Include Full Property Details for bulk sweeps.** You still get address, city, owner, market value, and account type, and the run finishes several times faster. Enable it for the subset you actually want to underwrite.
- **Absentee-owner shortcut:** run with full detail on, then keep rows where `hasHomesteadExemption` is `false` or `ownerMailingAddress` doesn't match `propertyAddress`. That combination is the highest-signal investor lead list DCAD data can produce.
- **`maxResults` is a global cap across every search term.** With ten terms and a cap of 100 you get 100 properties total, not 100 each — start at 10–50 to check the output shape, then raise it.
- **The city filter only applies to Street Address searches.** For owner, account, or business searches it is ignored, so filter on the `city` output field in your own post-processing instead. Account numbers must be pasted whole — all 17 characters.

### Pricing

**From $4.00 per 1,000 results** — under the going rate for Dallas County appraisal data, with account-number search, business-name search, and 28-year value history included at no extra charge. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.48 | $0.46 | $0.43 | $0.40 |
| 1,000 | $4.80 | $4.55 | $4.30 | $4.00 |
| 10,000 | $48.00 | $45.50 | $43.00 | $40.00 |
| 100,000 | $480.00 | $455.00 | $430.00 | $400.00 |

A "result" is one property account row in the output dataset — enabling full detail or value history enriches that same row rather than adding billable rows. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications when a run finishes
- **Webhooks** — Trigger your own APIs on run completion
- **Apify API** — Full programmatic access from any language

### Legal & Ethical Use

Dallas Central Appraisal District records are public records published by a Texas appraisal district under state law, and this actor collects only what DCAD publishes openly on its website. It is built for legitimate property research, valuation, tax representation, title work, and market analysis. You are responsible for complying with applicable law — including the Texas Property Tax Code and Texas Public Information Act — and with DCAD's terms of use. Owner names and mailing addresses are personal information: handle them accordingly, respect opt-out and do-not-contact requests, and never use this data for harassment, discrimination, or any unlawful purpose. Be mindful of fair housing rules when combining appraisal data with marketing or lending decisions.

# Actor input Schema

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

How you want to look up properties. Owner Name is best for finding everything a person or company owns. Street Address is best for a specific property or a whole street. Account Number is the fastest option if you already have the 17-character DCAD account number. Business Name finds business personal property accounts.

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

One term per line. Owner Name: last name first, e.g. 'SMITH JOHN' or just 'SMITH'. Street Address: 'LOVERS' for a whole street, or '6646 E LOVERS LN' for one property. Account Number: the full 17-character account number, e.g. '00000398224420000'. Business Name: e.g. 'WALMART'. Tip: use % as a wildcard, for example '%LA' finds any owner with 'LA' anywhere in the name. Punctuation in names is handled for you — 'O'BRIEN' is looked up the way Dallas CAD stores it. Dallas CAD returns at most 700 matches for any one term, so split very broad searches into narrower terms. Street names are matched on the first 23 characters and house numbers on the first 7, which is all Dallas CAD's own form accepts.

## `accountTypes` (type: `array`):

Which kinds of accounts to include. Select all three to get everything. Business Personal Property covers business equipment and inventory rather than land or buildings. This filter applies to Owner Name and Street Address searches: Business Name searches only ever cover Business Personal Property, and an Account Number always returns its own property whatever its type.

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

Limit results to a single city in Dallas County. Leave on 'All Cities' to search the whole county. This filter only applies to Street Address searches.

## `maxResults` (type: `integer`):

Total number of properties to collect across all your search terms. Set to 0 for no limit. Tip: start with 10-50 to check the output, then raise it. Dallas CAD returns at most 700 matches for any single search term, so a run collects up to 700 properties per term no matter how high you set this — to go deeper, split the search into several narrower terms (for example SMITH A, SMITH B) and add them all. Because search terms run in parallel, a run can finish a few rows over your limit rather than cutting a page of results in half. With full details on, a single run comfortably collects a few thousand properties; for very large jobs, split the terms across several runs.

## `includeDetails` (type: `boolean`):

Open each property's full record to collect appraised and taxable values, exemptions, estimated taxes by taxing unit, owner mailing address, legal description, deed date, building characteristics and land details. Turn this off for a much faster run that returns only the address, city, owner name, total value and property type.

## `includeValueHistory` (type: `boolean`):

Also collect the year-by-year history for each property: past owners, market value, taxable value and exemptions going back as far as 1999 (up to 28 years). This adds an extra page load per property, so runs take longer.

## Actor input object example

```json
{
  "searchType": "owner",
  "searchTerms": [
    "SMITH JOHN"
  ],
  "accountTypes": [
    "residential"
  ],
  "maxResults": 100,
  "includeDetails": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of properties with address, owner, and market value.

## `owners` (type: `string`):

Table of owner names and mailing addresses per account.

## `values` (type: `string`):

Table of appraised values, taxable values, exemptions, and estimated taxes.

## `building` (type: `string`):

Table of building characteristics such as year built, living area, beds and baths.

# 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 JOHN"
    ],
    "accountTypes": [
        "residential"
    ],
    "city": "",
    "maxResults": 100,
    "includeDetails": true,
    "includeValueHistory": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/dallascad-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 JOHN"],
    "accountTypes": ["residential"],
    "city": "",
    "maxResults": 100,
    "includeDetails": True,
    "includeValueHistory": False,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/dallascad-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 JOHN"
  ],
  "accountTypes": [
    "residential"
  ],
  "city": "",
  "maxResults": 100,
  "includeDetails": true,
  "includeValueHistory": false
}' |
apify call solidcode/dallascad-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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