DR Horton $1💰 New Homes, Communities & Move-In Listings avatar

DR Horton $1💰 New Homes, Communities & Move-In Listings

Pricing

from $1.00 / 1,000 result items

Go to Apify Store
DR Horton $1💰 New Homes, Communities & Move-In Listings

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

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

FieldExample
recordTypecommunity
communityNameSample Community
brandExpress Series
propertyTypeSingle family
addressSample City, ST 00000
urlhttps://www.drhorton.com/state/market/city/sample-community
imageUrlhttps://www.drhorton.com/-/media/.../000000000.jpg
sellingStatusNow Selling
availableHomes6
latitude / longitude33.0000 / -87.0000
minBeds / maxBeds3 / 4
minBaths / maxBaths2 / 2.5
minSqft / maxSqft1272 / 2164
minPrice / maxPrice244400 / 294900
amenities["Granite Countertops", "HOA"]

Quick move-in home record

FieldExample
recordTypehome
address100 Sample Drive
price347900
originalPrice355900
monthlyPayment1964.52
bedrooms / bathrooms / garages4 / 3 / 3
sqft2273
lot0000
seriesTradition Series
city / marketSample City / Sample Market
latitude / longitude33.0000 / -87.0000
pending / underContract / soldfalse / false / false
urlhttps://www.drhorton.com/state/market/city/community/qmis/100-sample-drive

Floor plan record

FieldExample
recordTypeplan
planNameThe Sample
planCodeSMPL
brandNameExpress Series
sqft1618
bedrooms / bathrooms / garages3 / 2 / 2
price269900
statusAvailable
communityPhone000-000-0000
communityHours[{"dayOfWeek": "Monday", "opens": "10:00", "closes": "18:00"}]
urlhttps://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 by stateKey or an auto-derived hash of mode/states/startUrls/include* toggles) and classifies every record as NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED. changeType, changedFields, firstSeenAt, and lastSeenAt are added to every record, but only when incremental mode is on. emitUnchanged and emitExpired control whether UNCHANGED/EXPIRED rows are pushed (both bill extra rows when on); EXPIRED only 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

ParameterTypeDefaultDescription
modestringsearch"search" iterates states; "url" scrapes pasted URLs.
statesarray["Texas"]States to scrape in search mode.
includeCommunitiesbooleantrueOutput one record per community.
includeQmiHomesbooleantrueOutput one record per quick move-in home.
includeFloorPlansbooleanfalseOutput one record per floor plan (fetches one extra page per community; billed separately).
startUrlsarray-drhorton.com state, market, city, or community URLs (url mode).
resumeFromRunIdstring-Continue one interrupted crawl from a previous run/dataset id.
incrementalModebooleanfalseRemember this search's baseline and classify records NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED on repeat runs.
stateKeystring-Names the saved incremental baseline. Leave empty to auto-derive one from mode/states/startUrls/include* toggles.
emitUnchangedbooleanfalseAlso push UNCHANGED rows in incremental mode (bills extra rows).
emitExpiredbooleanfalsePush 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.
maxItemsinteger20Stop after this many records. The default keeps a trial run small; set 0 for no limit (hundreds of records per state).
proxyobjectApify datacenterConnection settings. Datacenter is the cheapest reliable option here.
maxResidentialMBinteger0Residential 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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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.