# D.R. Horton Scraper (`solidcode/drhorton-scraper`) Actor

\[💰 $0.9 / 1K] Extract D.R. Horton new-home data: communities, move-in ready homes and floor plans with prices, beds, baths, square footage, amenities, GPS, selling status and available-home counts across 37 states. Filter by price, size, property type, amenities and home series.

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

## Pricing

from $0.90 / 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

## D.R. Horton Scraper

Pull new-home data from D.R. Horton — America's largest homebuilder — at scale: communities, move-in ready homes, and floor plans with prices, beds, baths, square footage, garages, stories, amenities, GPS coordinates, selling status, and true available-home counts. Built for real estate analysts, homebuilder competitive-intelligence teams, mortgage and title lead-gen desks, and PropTech data teams who need current new-construction inventory without hand-collecting it community by community.

### Why This Scraper?

- **37 states, 4,620 communities** — every market D.R. Horton actually builds in, from Hawaii and Oregon to Delaware and Florida. Pick states from a 37-entry list, or paste any drhorton.com state, metro, city, or community page.
- **Three record types, one dataset** — communities, move-in ready homes, and floor plans arrive together, each tagged `community`, `home`, or `floorPlan`. Switching both child types on costs no extra time: every community is visited exactly once and yields both.
- **8,700+ records from Texas in about 5 minutes** — all 369 communities plus their move-in ready homes and floor plans, complete. A single metro like Austin returns all 893 of its records in about 30 seconds.
- **GPS coordinates on every record** — latitude and longitude on communities, homes, and floor plans, ready to drop into a map layer or spatial join. No separate geocoding step, no address-matching guesswork.
- **45 amenity filters** — community pools, pickleball and bocce courts, dog parks, walking and nature trails, fishing ponds, private docks, putting greens, cornhole, event lawns, gated and active-adult (55+) communities. Pick several and only communities offering all of them come back.
- **13 selling statuses** — from "Now pre-selling" and "Coming soon" through "New phase now selling", "Final opportunities", "Closing out", and "Sold out". Catch brand-new phase openings and last-chance closeout inventory before they surface on listing portals.
- **All 6 D.R. Horton brand series and 7 property types** — Express (entry level), Tradition (mid range), Emerald (luxury), Cottage (compact), Freedom (active adult), Pacific Ridge (West Coast); single family, townhomes, multifamily, condos, duplexes, patio homes, and multi-generational homes. Series names match even when the source carries ℠ or ® marks, so a series filter never comes back empty on a punctuation mismatch.
- **Per-home economics, not just a price tag** — asking price, original price, estimated monthly payment, lot number, plan name, plan code, and live construction status ("Under Contract") on every available home.
- **True child counts, not the published ones** — D.R. Horton's own "available homes" figure undercounts by roughly 1.4×, so every community is expanded regardless of what it claims. `homesFound` and `floorPlansFound` report what was actually there.
- **Sales-office phone, street address, community write-up and up to 60 photos** — switching on either child record type also fills in each community's street address, its full marketing description, the sales office's direct phone number, and its complete photo gallery. Across all 369 Texas communities, address, description and phone came back on 100% of records, with an average of 30 photos each.

### Use Cases

**New-Construction Market Research**

- Map new-home inventory and starting prices by metro, city, or ZIP
- Track price-per-square-foot spreads across the Express, Tradition, and Emerald series
- Measure how much of a state's pipeline is "Coming soon" versus "Now selling"
- Compare bedroom, bathroom, and garage mixes between Sun Belt and Midwest markets

**Investment & Inventory Analysis**

- Surface "Closing out" and "Final opportunities" communities for discount hunting
- Compare asking price against original price to find quiet price cuts
- Underwrite rental yield with estimated monthly payment alongside square footage
- Track how quickly move-in ready homes shift from available to Under Contract

**Competitive Intelligence**

- Benchmark a rival builder's floor plans against D.R. Horton plan codes, sizes, and base prices
- Monitor where the nation's largest builder is opening new phases and sections
- Track amenity packages — pools, trails, pickleball — that define each price tier
- Watch active-adult (55+) and multi-generational product expansion state by state

**Mortgage, Title & Relocation**

- Build territory lists of communities with GPS coordinates and ZIP codes
- Size the addressable pipeline in a metro before hiring or opening a branch
- Feed relocation clients current inventory filtered to their budget and bedroom count
- Prioritize outreach around new phase openings and pre-selling communities

**PropTech & Data Products**

- Power new-construction search, alerting, and comparison tools
- Enrich MLS and public-record databases with builder-direct plan and pricing data
- Build price-history time series by re-running on a schedule
- Drive map-based dashboards straight from the latitude and longitude fields

### Getting Started

#### Whole state, communities only

The fastest start — one state, community-level records:

```json
{
    "states": ["texas"],
    "maxResults": 100
}
```

#### One metro, everything in it

Paste a metro URL and switch on both child record types for full inventory:

```json
{
    "startUrls": ["https://www.drhorton.com/texas/austin"],
    "includeAvailableHomes": true,
    "includeFloorPlans": true,
    "maxResults": 0
}
```

#### Entry-level homes with resort amenities

Filter to affordable communities that offer a pool and a fitness center:

```json
{
    "states": ["florida", "georgia"],
    "maxPrice": 300000,
    "homeSeries": ["Express"],
    "propertyTypes": ["Single family"],
    "amenities": ["Pool", "Exercise - Fitness"],
    "includeAvailableHomes": true,
    "maxResults": 0
}
```

#### Closeout hunting across multiple states

Last-chance inventory, larger homes, with floor plans attached:

```json
{
    "states": ["texas", "north-carolina", "arizona"],
    "sellingStatuses": ["Final Opportunities", "Closing Out"],
    "minBedrooms": 4,
    "minSquareFeet": 2200,
    "minGarages": 2,
    "stories": ["1"],
    "includeAvailableHomes": true,
    "includeFloorPlans": true,
    "maxResults": 5000
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `states` | array | `["texas"]` | Pick one or more of the 37 states where D.R. Horton builds. Every community in each selected state is collected in a single pass. |
| `startUrls` | array | empty | Paste any drhorton.com state, metro-area, city, or community page URL — for example `https://www.drhorton.com/texas/austin`. Use it when you want one metro or one community instead of a whole state. |
| `maxResults` | integer | `100` | Stop starting new communities once this many results have been collected. Set to `0` for no limit (a safety cap of 50,000 still applies). |

States and URLs can be combined — results from both are merged and duplicates removed.

**How the limit behaves when you also collect homes or floor plans.** A community is always delivered complete — the community record plus every one of its homes and floor plans. The limit therefore stops the run from *starting* another community; it does not cut the community you are already inside. The final count can land well above your number: the last community alone can add up to about 180 records, and a limit of 5 has been measured returning 27. Results are billed as they are delivered, so set the limit in the hundreds or thousands when either child type is on, or leave both off when you need an exact community count.

#### Record Types

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeAvailableHomes` | boolean | `false` | Also collect the individual move-in ready homes inside each community: address, price, monthly payment, beds, baths, square footage, lot number, plan name, construction status. A community holds about 13 homes on average and up to 130. |
| `includeFloorPlans` | boolean | `false` | Also collect each community's floor plans: plan name, plan code, base price, square footage, beds, baths, garages, stories. A community offers about 8 plans on average and up to 50. |

Switching both on costs nothing extra — both come from the same visit to each community page. Either toggle also fills in each community's `streetAddress`, `description`, `salesOfficePhone` and `images`, which are only published on the community's own page.

#### Price & Size Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `minPrice` | integer | empty | Keep only communities whose starting price is at or above this amount (USD). |
| `maxPrice` | integer | empty | Keep only communities whose starting price is at or below this amount (USD). |
| `minSquareFeet` | integer | empty | Keep only communities whose largest home is at least this size. |
| `maxSquareFeet` | integer | empty | Keep only communities whose smallest home is at or below this size. |
| `minBedrooms` | integer | empty | Keep only communities offering at least this many bedrooms in their largest home (0–10). |
| `minBathrooms` | integer | empty | Keep only communities offering at least this many bathrooms in their largest home (0–10). |
| `minGarages` | integer | empty | Keep only communities offering at least this many garage spaces (0–6). |

Communities that do not publish a price are excluded while a price filter is set.

#### Community Attribute Filters

| Parameter | Type | Options | Description |
|-----------|------|---------|-------------|
| `stories` | array | 1 story · 2 stories · 3 stories | Keep only communities offering homes with any of these storey counts. A community offering 1 to 3 storeys matches a request for 2. |
| `propertyTypes` | array | Single family homes · Townhomes · Multifamily · Condos · Duplexes · Patio homes · Multi-generational homes | Keep only communities that build any of these 7 property types. |
| `homeSeries` | array | Express Series — entry level · Tradition Series — mid range · Emerald Series — luxury · Cottage Series — compact · Freedom Series — active adult · Pacific Ridge Series — West Coast | D.R. Horton groups homes into brand series by price point and finish level. About one community in seven has no series assigned and is excluded while this filter is set. |
| `sellingStatuses` | array | Now selling · Now pre-selling · Coming soon · New phase coming soon · New phase now selling · New phase open · New section open · New model open · New plans now available · Model for sale · Final opportunities · Closing out · Sold out | Keep only communities in these 13 sales stages — ideal for spotting brand-new openings or final-opportunity closeouts. |
| `amenities` | array | 45 options — Community pools · Club house · Gated community · Active adult (55+) · Dog park · Walking / nature trails · Fitness center · Pickleball · Golf · Tennis · Lake · Private dock · Fire pits · Smart home system, and 31 more | Keep only communities offering **all** of the amenities you pick. Matching is forgiving — asking for "Pool" also matches "Community Pools". |

All filters are optional, and all are matched against the **community**: every home and floor plan inside a matching community is kept. Filtering narrows what you receive and pay for without making the run any slower.

### Output

Every record carries a `recordType` field so you can split one dataset into three clean tables.

#### Community records

```json
{
    "recordType": "community",
    "name": "Simpsons Crossing",
    "url": "https://www.drhorton.com/delaware/delaware/milford/simpsons-crossing",
    "homeSeries": "Express Series",
    "addressText": "Milford, DE 19963",
    "streetAddress": "10984 Farmerfield St",
    "city": "Milford",
    "state": "DE",
    "zipCode": "19963",
    "latitude": 38.89834,
    "longitude": -75.43195,
    "sellingStatus": "New Phase Coming Soon",
    "availableHomes": 12,
    "homesFound": 20,
    "floorPlansFound": 9,
    "callForPrice": false,
    "minPrice": 285990,
    "maxPrice": 419990,
    "minBedrooms": 3,
    "maxBedrooms": 5,
    "minBathrooms": 2,
    "maxBathrooms": 3.5,
    "minGarages": 1,
    "maxGarages": 2,
    "minStories": 1,
    "maxStories": 2,
    "minSquareFeet": 1365,
    "maxSquareFeet": 2812,
    "propertyType": "Single family",
    "amenities": ["Community Pools", "Walking - Nature Trails", "Dog Park"],
    "badges": ["red-tag-event"],
    "description": "Welcome to Simpsons Crossing, a new home community in Milford, DE, offering single-family homes minutes from downtown and the Delaware beaches...",
    "salesOfficePhone": "302-604-2160",
    "imageUrl": "https://www.drhorton.com/-/media/drhorton/simpsons-crossing/exterior1.jpg",
    "images": [
        "https://www.drhorton.com/-/media/drhorton/simpsons-crossing/exterior1.jpg",
        "https://www.drhorton.com/-/media/drhorton/simpsons-crossing/kitchen.jpg"
    ],
    "scrapedAt": "2026-08-01T10:54:44Z"
}
```

`streetAddress`, `description`, `salesOfficePhone` and `images` come from the community's own page, so they are filled in whenever **available homes or floor plans** is switched on, and are `null` on a communities-only run. Everything else in the community record is always present.

**Identity & location**

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `community` |
| `name` | string | Community name |
| `url` | string | Community page link |
| `addressText` | string | Address line as published, e.g. `"Milford, DE 19963"` |
| `streetAddress` | string | Street address of the community's model home / sales office |
| `city` | string | City |
| `state` | string | Two-letter state code |
| `zipCode` | string | ZIP code |
| `latitude` | number | Community latitude |
| `longitude` | number | Community longitude |
| `imageUrl` | string | Community hero image |
| `scrapedAt` | string | UTC timestamp of collection |

**Description, contact & photos** — filled in when either child record type is switched on

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | The community's full marketing write-up — location, schools, commuting, amenities |
| `salesOfficePhone` | string | Direct phone number for the community's sales office |
| `images` | array | Every photo in the community gallery, up to 60 full-size image URLs (30 on average) |

**Status, pricing & inventory**

| Field | Type | Description |
|-------|------|-------------|
| `sellingStatus` | string | One of 13 sales stages, e.g. `"New Phase Coming Soon"` |
| `homeSeries` | string | Brand series, e.g. `"Express Series"` (null when unassigned) |
| `availableHomes` | number | Available-home count as published by the builder |
| `homesFound` | number | Move-in ready homes actually collected (when that toggle is on) |
| `floorPlansFound` | number | Floor plans actually collected (when that toggle is on) |
| `callForPrice` | boolean | True when pricing is by enquiry only |
| `minPrice` / `maxPrice` | number | Community price range in USD (null when unpublished) |
| `badges` | array | Promotional campaign tags active on the community |

**Home specification ranges**

| Field | Type | Description |
|-------|------|-------------|
| `minBedrooms` / `maxBedrooms` | number | Bedroom range across the community's homes |
| `minBathrooms` / `maxBathrooms` | number | Bathroom range (halves included, e.g. `3.5`) |
| `minGarages` / `maxGarages` | number | Garage-space range |
| `minStories` / `maxStories` | number | Storey range |
| `minSquareFeet` / `maxSquareFeet` | number | Living-area range |
| `propertyType` | string | Property types as a single readable string |
| `propertyTypes` | array | Property types as a de-duplicated list |
| `amenities` | array | Every amenity the community offers |

#### Move-in ready home records

```json
{
    "recordType": "home",
    "id": "e0f42a3b-20dc-466f-9934-d92e906213b6",
    "communityName": "Simpsons Crossing",
    "communityUrl": "https://www.drhorton.com/delaware/delaware/milford/simpsons-crossing",
    "name": "JEFFERSON",
    "address": "10984 Farmerfield St",
    "city": "MILFORD",
    "state": "DE",
    "zipCode": "19963",
    "latitude": 38.89834,
    "longitude": -75.43195,
    "price": 289990,
    "originalPrice": 299990,
    "monthlyPayment": 1934,
    "bedrooms": 3,
    "bathrooms": 2.5,
    "garages": 2,
    "stories": 2,
    "squareFeet": 1365,
    "lotNumber": "0652",
    "planName": "JEFFERSON",
    "planCode": "XT01",
    "status": "Under Contract",
    "homeSeries": "Express Series",
    "multiGen": false,
    "url": "https://www.drhorton.com/delaware/delaware/milford/simpsons-crossing/qmis/10984-farmerfield-st",
    "scrapedAt": "2026-08-01T10:56:03Z"
}
```

**Home identity & address**

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `home` |
| `id` | string | Stable home identifier |
| `communityName` | string | Parent community name |
| `communityUrl` | string | Parent community link |
| `name` | string | Plan name, falling back to street address |
| `address` | string | Street address |
| `city` / `state` / `zipCode` | string | Home location |
| `latitude` / `longitude` | number | Coordinates inherited from the community |
| `url` | string | Home detail page |
| `imageUrl` | string | Home photo |
| `scrapedAt` | string | UTC timestamp of collection |

**Pricing & specification**

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Current asking price in USD |
| `originalPrice` | number | Price before any reduction |
| `monthlyPayment` | number | Estimated monthly payment |
| `purchaseUrl` | string | Direct purchase / reservation link when offered |
| `bedrooms` / `bathrooms` | number | Bedroom and bathroom counts |
| `garages` / `stories` | number | Garage spaces and storey count |
| `squareFeet` | number | Living area |
| `lotNumber` | string | Lot number within the community |
| `planName` / `planCode` | string | Floor plan name and builder plan code |
| `status` | string | Construction / sales status, e.g. `"Under Contract"` |
| `homeSeries` | string | Brand series |
| `multiGen` | boolean | True for multi-generational layouts |
| `propertyType` | string | Property type inherited from the community |
| `amenities` | array | Community amenities inherited by the home |
| `badges` | array | Promotional tag on the individual home |

#### Floor plan records

```json
{
    "recordType": "floorPlan",
    "id": "21da2c00-8460-47f7-842b-70e36cb12db4",
    "communityName": "Simpsons Crossing",
    "communityUrl": "https://www.drhorton.com/delaware/delaware/milford/simpsons-crossing",
    "name": "Camberly",
    "city": "Milford",
    "state": "DE",
    "zipCode": "19963",
    "latitude": 38.89834,
    "longitude": -75.43195,
    "price": 362990,
    "priceFormatted": "$362s",
    "bedrooms": 4,
    "bathrooms": 2,
    "garages": 2,
    "stories": 1,
    "squareFeet": 1437,
    "planName": "Camberly",
    "planCode": "X436",
    "homeSeries": "Express Series",
    "multiGen": false,
    "url": "https://www.drhorton.com/delaware/delaware/milford/simpsons-crossing/floor-plans/x436",
    "scrapedAt": "2026-08-01T10:56:03Z"
}
```

**Plan identity & location**

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `floorPlan` |
| `id` | string | Stable plan identifier |
| `communityName` | string | Parent community name |
| `communityUrl` | string | Parent community link |
| `name` / `planName` | string | Plan name, e.g. `"Camberly"` |
| `planCode` | string | Builder plan code, e.g. `"X436"` |
| `city` / `state` / `zipCode` | string | Plan location |
| `latitude` / `longitude` | number | Coordinates inherited from the community |
| `url` | string | Floor plan page |
| `imageUrl` | string | Plan rendering or elevation image |
| `scrapedAt` | string | UTC timestamp of collection |

**Plan pricing & specification**

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Base price in USD |
| `priceFormatted` | string | Price as displayed, e.g. `"$362s"` |
| `bedrooms` / `bathrooms` | number | Bedroom and bathroom counts |
| `garages` / `stories` | number | Garage spaces and storey count |
| `squareFeet` | number | Living area |
| `homeSeries` | string | Brand series |
| `multiGen` | boolean | True for multi-generational layouts |
| `propertyType` | string | Property type inherited from the community |
| `amenities` | array | Community amenities inherited by the plan |

### Tips for Best Results

- **Switch both child toggles on together.** Homes and floor plans come from the same visit to each community page, so collecting both takes no longer than collecting one — all of Texas with both on finishes in about 5 minutes, and both toggles also unlock each community's street address, description, sales-office phone and photo gallery.
- **Ignore `availableHomes` when sizing a run; trust `homesFound`.** The builder's published count undercounts real inventory by roughly 1.4×, and communities that publish zero frequently still have homes and floor plans.
- **Hunt discounts with `sellingStatuses`.** Combine "Closing out" and "Final opportunities" for last-chance inventory, or "Now pre-selling" plus "Coming soon" to see the pipeline months before it reaches listing portals.
- **Leave price filters empty for full coverage.** About 15% of communities publish no starting price, and they are dropped whenever `minPrice` or `maxPrice` is set — filter on square footage or bedrooms instead when completeness matters more than budget.
- **Paste a metro URL for a single market.** `https://www.drhorton.com/texas/austin` returns 38 communities instead of the state's 369 — faster, cheaper, and sharper than filtering a whole state down.
- **Set `maxResults` to 0 for a complete state.** A community's homes and floor plans are always kept together with the community, so a small cap can finish well above your number — up to about 180 records past it — rather than splitting a community in half.
- **Split very large jobs by state.** Collecting homes and floor plans runs for up to 50 minutes per run. That is enough for around 5,000 communities — more than D.R. Horton's entire national footprint — but if you ever exceed it, the remaining communities are still returned without their homes and floor plans and the run tells you so in plain language. Re-running one state at a time always gets the full detail.
- **Stack amenity picks carefully.** Amenities are matched with AND logic — asking for pickleball, a dog park, and a lake at once narrows results fast. Start with one, then add. Matching is whole-word and plural-tolerant, so "Pool" finds "Community Pools" and "Park" also finds "Dog Park" — pick the more specific option when you want only that one.

### Pricing

**From $0.90 per 1,000 results** — flat pay-per-result. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee. 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.105 | $0.100 | $0.095 | $0.090 |
| 1,000 | $1.05 | $1.00 | $0.95 | $0.90 |
| 10,000 | $10.50 | $10.00 | $9.50 | $9.00 |
| 100,000 | $105.00 | $100.00 | $95.00 | $90.00 |

A "result" is one record in your dataset — community, move-in ready home, and floor plan records are each billed as one result. Apify platform fees are additional.

### 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 on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor collects publicly available information from D.R. Horton's website — the same community, home, and floor plan details any visitor can view in a browser. It collects no personal data, no account-protected content, and no login-gated pages.

You are responsible for how you use the data. Review D.R. Horton's terms of use, respect applicable laws including copyright and database rights, and comply with data protection regulations such as GDPR and CCPA where they apply. Use the data for legitimate purposes such as market research, analytics, and business intelligence.

# Actor input Schema

## `states` (type: `array`):

Pick one or more states to scrape. Every D.R. Horton community in each selected state is collected in a single pass. Only the 37 states where D.R. Horton currently builds are listed.

## `startUrls` (type: `array`):

Paste any drhorton.com state, metro-area, city or community page URL — for example https://www.drhorton.com/texas/austin. Useful when you want a single metro area or a single community instead of a whole state.

## `includeAvailableHomes` (type: `boolean`):

Off by default. When on, the scraper also collects the individual move-in ready homes inside each community (address, price, monthly payment, beds, baths, square footage, lot number, plan name, construction status). A community holds about 13 homes on average and up to 130, so a 100-community run can return well over 1,000 extra rows. Turning this on also fills in each community's street address, description, sales office phone and photo gallery, which are only available on the community's own page. Note: this stage runs for up to 50 minutes. On a very large run (several big states at once) any communities left after that are still returned, but without their homes and floor plans — the run then reports partial results and says so.

## `includeFloorPlans` (type: `boolean`):

Off by default. When on, the scraper also collects each community's floor plans (plan name, plan code, base price, square footage, beds, baths, garages, stories). A community offers about 8 plans on average and up to 50, so a 100-community run can return around 800 extra rows. Turning this on together with available homes costs nothing extra — both come from the same visit to each community page, which also fills in each community's street address, description, sales office phone and photo gallery. Note: this stage runs for up to 50 minutes. On a very large run (several big states at once) any communities left after that are still returned, but without their homes and floor plans — the run then reports partial results and says so.

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

Stop starting new communities once this many results have been collected. Set to 0 for no limit (a hard safety cap of 50,000 results still applies). IMPORTANT when you also collect homes or floor plans: a community's homes and plans are always delivered together with the community, so the final count can go WELL PAST your number — the last community alone can add up to about 180 records, and results are billed as they are delivered. A cap of 5 has been measured returning 27 records. Set the limit in the hundreds or thousands when either child type is on, or leave both off for exact community counts. A whole state can hold up to about 500 communities.

## `minPrice` (type: `integer`):

Only keep communities whose starting price is at or above this amount. Communities that do not publish a price are excluded while this filter is set. Leave empty — or set 0 — for no minimum.

## `maxPrice` (type: `integer`):

Only keep communities whose starting price is at or below this amount. Communities that do not publish a price are excluded while this filter is set. Leave empty for no maximum.

## `minBedrooms` (type: `integer`):

Only keep communities that offer at least this many bedrooms in their largest home. Matched on the community; all of its homes and floor plans are then kept. Leave empty — or set 0 — for any.

## `minBathrooms` (type: `integer`):

Only keep communities that offer at least this many bathrooms in their largest home. Matched on the community; all of its homes and floor plans are then kept. Leave empty — or set 0 — for any.

## `minGarages` (type: `integer`):

Only keep communities that offer at least this many garage spaces. Matched on the community; all of its homes and floor plans are then kept. Leave empty — or set 0 — for any.

## `minSquareFeet` (type: `integer`):

Only keep communities whose largest home is at least this size. Matched on the community; all of its homes and floor plans are then kept. Leave empty — or set 0 — for any.

## `maxSquareFeet` (type: `integer`):

Only keep communities whose smallest home is at or below this size. Matched on the community; all of its homes and floor plans are then kept. Leave empty for any.

## `stories` (type: `array`):

Only keep communities that offer homes with any of these storey counts. A community offering 1 to 3 storeys matches a request for 2. Matched on the community; all of its homes and floor plans are then kept. Leave empty for any.

## `propertyTypes` (type: `array`):

Only keep communities that build any of these property types. Matched on the community; all of its homes and floor plans are then kept. Leave empty for all.

## `homeSeries` (type: `array`):

D.R. Horton groups its homes into brand series by price point and finish level. Only keep communities in the series you pick — about one community in seven has no series assigned and is excluded while this filter is set. Matched on the community; all of its homes and floor plans are then kept. Leave empty for all series.

## `sellingStatuses` (type: `array`):

Only keep communities in these sales stages. Great for spotting brand new openings or final-opportunity closeouts. Matched on the community; all of its homes and floor plans are then kept. Leave empty for all.

## `amenities` (type: `array`):

Only keep communities that offer ALL of the amenities you pick. Matching is forgiving — asking for "Pool" also matches a community listed with "Community Pools" or "Pool House", and "Park" also matches "Dog Park". Pick the more specific option when you want only that one. Matched on the community; all of its homes and floor plans are then kept. Leave empty for no amenity filter.

## Actor input object example

```json
{
  "states": [
    "texas"
  ],
  "startUrls": [],
  "maxResults": 100,
  "stories": [],
  "propertyTypes": [],
  "homeSeries": [],
  "sellingStatuses": [],
  "amenities": []
}
```

# Actor output Schema

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

Everything collected in this run, communities and their homes and floor plans together.

## `communities` (type: `string`):

Community rows: price and size ranges, selling status, amenities, GPS and available-home counts, plus street address, description, sales office phone and photos when a child record type is enabled.

## `homes` (type: `string`):

Individual move-in ready homes (only present when 'Also scrape available homes' is enabled).

## `floorPlans` (type: `string`):

Floor plans offered in each community (only present when 'Also scrape floor plans' is enabled).

# 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 = {
    "states": [
        "texas"
    ],
    "startUrls": [],
    "includeAvailableHomes": false,
    "includeFloorPlans": false,
    "maxResults": 100,
    "stories": [],
    "propertyTypes": [],
    "homeSeries": [],
    "sellingStatuses": [],
    "amenities": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/drhorton-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 = {
    "states": ["texas"],
    "startUrls": [],
    "includeAvailableHomes": False,
    "includeFloorPlans": False,
    "maxResults": 100,
    "stories": [],
    "propertyTypes": [],
    "homeSeries": [],
    "sellingStatuses": [],
    "amenities": [],
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/drhorton-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 '{
  "states": [
    "texas"
  ],
  "startUrls": [],
  "includeAvailableHomes": false,
  "includeFloorPlans": false,
  "maxResults": 100,
  "stories": [],
  "propertyTypes": [],
  "homeSeries": [],
  "sellingStatuses": [],
  "amenities": []
}' |
apify call solidcode/drhorton-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/AVVGksO9okJuxOZVn/builds/plFGLhmgJOeU0y8fk/openapi.json
