DR Horton $1💰 New Homes, Communities & Move-In Listings
Pricing
from $1.00 / 1,000 result items
DR Horton $1💰 New Homes, Communities & Move-In Listings
From $1/1K. Extract new-home data from drhorton.com, America’s largest homebuilder. Pull communities and quick move-in homes by state with prices, payment estimates, floor plans, square footage, amenities, and map coordinates.
Pricing
from $1.00 / 1,000 result items
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
D.R. Horton Scraper
Extract new-home data from drhorton.com, America's largest homebuilder, at scale. This actor pulls entire states of communities and quick move-in homes in seconds, with firm prices, monthly payment estimates, floor plans, square footage, amenities, and map coordinates.
Why this scraper?
- Three record types, one run: communities (neighbourhood summaries), quick move-in homes (move-in-ready homes with firm prices), and floor plans (model name, code, specs).
- Whole states in two requests: one state returns every community and every move-in home D.R. Horton lists there, hundreds of records, in two calls.
- 40+ fields per record, including monthly payment estimates, original vs current price (so you can spot price drops), lot numbers, plan codes, and GPS coordinates.
- Low-cost by default: runs on every plan including Free; residential is optional.
- Search or URL mode: pick states from a list, or paste any drhorton.com state, market, city, or community page.
- Resume & recurring updates: continue an interrupted crawl from a previous run/dataset id, or turn on Incremental mode to have the actor remember its own baseline and report only NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED records on a schedule.
- Built-in cost controls: a residential traffic budget cap, plus a hard record cap.
- Resilient: automatic retries, connection rotation, health monitoring, and a backup connection gateway for failover.
Data you get
Sample shape, values are illustrative placeholders, not from a live listing.
Community record
| Field | Example |
|---|---|
| recordType | community |
| communityName | Sample Community |
| brand | Express Series |
| propertyType | Single family |
| address | Sample City, ST 00000 |
| url | https://www.drhorton.com/state/market/city/sample-community |
| imageUrl | https://www.drhorton.com/-/media/.../000000000.jpg |
| sellingStatus | Now Selling |
| availableHomes | 6 |
| latitude / longitude | 33.0000 / -87.0000 |
| minBeds / maxBeds | 3 / 4 |
| minBaths / maxBaths | 2 / 2.5 |
| minSqft / maxSqft | 1272 / 2164 |
| minPrice / maxPrice | 244400 / 294900 |
| amenities | ["Granite Countertops", "HOA"] |
Quick move-in home record
| Field | Example |
|---|---|
| recordType | home |
| address | 100 Sample Drive |
| price | 347900 |
| originalPrice | 355900 |
| monthlyPayment | 1964.52 |
| bedrooms / bathrooms / garages | 4 / 3 / 3 |
| sqft | 2273 |
| lot | 0000 |
| series | Tradition Series |
| city / market | Sample City / Sample Market |
| latitude / longitude | 33.0000 / -87.0000 |
| pending / underContract / sold | false / false / false |
| url | https://www.drhorton.com/state/market/city/community/qmis/100-sample-drive |
Floor plan record
| Field | Example |
|---|---|
| recordType | plan |
| planName | The Sample |
| planCode | SMPL |
| brandName | Express Series |
| sqft | 1618 |
| bedrooms / bathrooms / garages | 3 / 2 / 2 |
| price | 269900 |
| status | Available |
| communityPhone | 000-000-0000 |
| communityHours | [{"dayOfWeek": "Monday", "opens": "10:00", "closes": "18:00"}] |
| url | https://www.drhorton.com/state/market/city/community/floor-plans/smpl |
Floor plan records also include communityAddressDetail (full postal address) and communityHours (sales office opening hours), pulled from the community page during the detail crawl.
Every record also includes a raw object with all original source fields, so no field is ever lost. In Incremental mode (see below), change detection fingerprints the whole emitted record, raw included — measured live against drhorton.com's own JSON/HTML source across all three record types, nothing in raw was found to change between identical back-to-back fetches, so nothing is excluded from the comparison. monthlyPayment is likewise kept in the comparison (not excluded) since it showed no drift either.
How to use
Scrape one state (communities + move-in homes):
{"mode": "search","states": ["Texas"],"includeCommunities": true,"includeQmiHomes": true,"proxy": { "useApifyProxy": true }}
Scrape several states, move-in homes only:
{"mode": "search","states": ["Florida", "Georgia", "South Carolina"],"includeCommunities": false,"includeQmiHomes": true,"proxy": { "useApifyProxy": true }}
Add floor plans (detail crawl):
{"mode": "search","states": ["Arizona"],"includeFloorPlans": true,"proxy": { "useApifyProxy": true }}
Scrape specific pages (URL mode):
{"mode": "url","startUrls": ["https://www.drhorton.com/texas/dallas","https://www.drhorton.com/florida"],"proxy": { "useApifyProxy": true }}
Recurring updates (incremental mode) — schedule this daily/weekly and get only what changed:
{"mode": "search","states": ["Hawaii"],"incrementalMode": true,"proxy": { "useApifyProxy": true }}
Resume & recurring updates
Two distinct features, both off by default so existing scheduled runs are unaffected:
resumeFromRunId— paste a previous run ID or dataset ID to continue ONE interrupted crawl. Records already collected there are skipped so you get only what's still missing. A one-off continuation, not ongoing monitoring.incrementalMode— for a search you run on a schedule. The actor remembers what the same search returned last time (in its own key-value store, keyed bystateKeyor an auto-derived hash of mode/states/startUrls/include* toggles) and classifies every record asNEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED.changeType,changedFields,firstSeenAt, andlastSeenAtare added to every record, but only when incremental mode is on.emitUnchangedandemitExpiredcontrol whether UNCHANGED/EXPIRED rows are pushed (both bill extra rows when on);EXPIREDonly fires after a run that scanned every selected state/URL completely (no cap, resume, or fetch failure truncating it).
Combining resumeFromRunId with incrementalMode on a search that already has saved incremental state fails fast (nothing is charged) — use one or the other for that search, or bootstrap a fresh incremental campaign with a different stateKey.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | search | "search" iterates states; "url" scrapes pasted URLs. |
| states | array | ["Texas"] | States to scrape in search mode. |
| includeCommunities | boolean | true | Output one record per community. |
| includeQmiHomes | boolean | true | Output one record per quick move-in home. |
| includeFloorPlans | boolean | false | Output one record per floor plan (fetches one extra page per community; billed separately). |
| startUrls | array | - | drhorton.com state, market, city, or community URLs (url mode). |
| resumeFromRunId | string | - | Continue one interrupted crawl from a previous run/dataset id. |
| incrementalMode | boolean | false | Remember this search's baseline and classify records NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED on repeat runs. |
| stateKey | string | - | Names the saved incremental baseline. Leave empty to auto-derive one from mode/states/startUrls/include* toggles. |
| emitUnchanged | boolean | false | Also push UNCHANGED rows in incremental mode (bills extra rows). |
| emitExpired | boolean | false | Push a synthetic EXPIRED row for records no longer found, after a complete scan (bills extra rows). EXPIRED rows count against maxItems like any other record; if more records disappeared than the remaining budget, the rest stay tracked as present and are reported (and billed) on a later run instead of being dropped. |
| maxItems | integer | 20 | Stop after this many records. The default keeps a trial run small; set 0 for no limit (hundreds of records per state). |
| proxy | object | Apify datacenter | Connection settings. Datacenter is the cheapest reliable option here. |
| maxResidentialMB | integer | 0 | Residential traffic budget in MB; after the cap the run switches to the cheaper connection tier for the rest of the run. 0 means no cap. |
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape — the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record — not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Output example
Sample shape, values are illustrative placeholders.
{"recordType": "home","id": "home:/state/market/city/community/qmis/100-sample-drive","state": "Texas","address": "100 Sample Drive","lot": "0000","url": "https://www.drhorton.com/state/market/city/community/qmis/100-sample-drive","communityName": "Sample Community","communityUrl": "https://www.drhorton.com/state/market/city/community","price": 347900,"originalPrice": 355900,"monthlyPayment": 1964.52,"bedrooms": 4,"bathrooms": 3,"garages": 3,"stories": 1,"sqft": 2273,"propertyType": "Single Family","series": "Tradition Series","city": "Sample City","market": "Sample Market","latitude": 33.0000,"longitude": -87.0000,"pending": false,"underContract": false,"sold": false}
Plan requirement
This actor runs on the datacenter connection tier by default, which works on every plan including the Free tier. Residential connections are optional and require a Starter plan or higher. For the lowest cost, keep the default datacenter setting and leave the residential traffic budget at 0.