# Pulte Homes Scraper (`crawlerbros/pulte-homes-scraper`) Actor

Scrape new-construction home communities, floor plans, and quick-move-in homes from Pulte Homes and sister PulteGroup brands (Centex, Del Webb, DiVosta) across 26 US states.

- **URL**: https://apify.com/crawlerbros/pulte-homes-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Pulte Homes Scraper

Scrape new-construction home communities, floor plans, and quick-move-in (spec) homes from [Pulte Homes](https://www.pultehomes.com) and sister PulteGroup brands — Centex, Del Webb (55+ active adult), and DiVosta. `pultehomes.com` redirects to `pulte.com`; this actor scrapes the public API and pages behind that domain. No login, no cookies, no paid proxy required.

### What this actor does

- **Two modes:** browse communities by state (+ optional metro region), or pull every floor plan and move-in-ready home for specific communities
- **4 brands:** Pulte Homes, Centex, Del Webb, DiVosta
- **26 US states** covered
- **Rich community data:** address, phone, price range, bedroom/bathroom/garage ranges, sales status, quick-move-in inventory count, GPS coordinates
- **Floor plans:** plan name, series, starting price, square footage, beds/baths/garage, rendering image, interactive 3D virtual tour link (when Pulte provides one)
- **Quick move-in homes:** current price, original price + computed savings, exact address, homesite number, anticipated completion date, specs, photo — including communities that have sold through all buildable lots and only list remaining spec-home inventory (Pulte renders these on a different page template; the actor detects and parses both)
- **Filters:** price range, bedroom range, minimum bathrooms, active-adult only, exclude sold-out, quick-move-in-only
- **Empty fields are omitted** — every record only contains data Pulte actually returned

### Output per record

`recordType` distinguishes three shapes in the same dataset:

**`community`** (mode=byState)

- `communityId`, `name`, `brandName`
- `address` — `{ street1, street2, city, state, zipCode }`
- `phone`, `region`
- `bedrooms` / `bathrooms` / `garage` — `{ min, max }`
- `startingPrice` (USD) or `priceRangeLabel` (e.g. "Upper $300's") when a firm price isn't set yet
- `priceStatus`, `communityStatus` (e.g. "Now Selling", "Sold Out", "Amenities Now Open")
- `quickMoveInCount`, `isActiveAdult`, `isSoldOut`, `isDelWebbExplore` (Del Webb "Explore" model-park designation, when applicable)
- `latitude`, `longitude`
- `communityUrl`, `sourceUrl`

**`floorPlan`** (mode=communityDetails)

- `planId`, `name`, `series`, `startingPrice`
- `sqft`, `bedrooms`, `bathrooms`, `garage`
- `imageUrl`, `planUrl`, `virtualTourUrl` (interactive 3D floor-plan tour, when available), `communityUrl`, `sourceUrl`

**`quickMoveInHome`** (mode=communityDetails)

- `homeId`, `name`, `series`
- `price`, `wasPrice`, `savingsAmount` (when discounted)
- `addressText`, `homesiteNumber`, `anticipatedCompletion`
- `sqft`, `bedrooms`, `bathrooms`, `garage`
- `imageUrl`, `homeUrl`, `communityUrl`, `sourceUrl`

Every record also has `scrapedAt` (UTC ISO timestamp).

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `byState` | `byState` or `communityDetails` |
| `state` | select | `Florida` | One of 26 US states (mode=byState) |
| `brand` | select | `Pulte` | `Pulte` / `Centex` / `Del Webb` / `DiVosta` (mode=byState) |
| `region` | string | – | Optional metro area, e.g. `Orlando` (mode=byState) |
| `communityUrls` | array | – | Pulte.com community URLs (mode=communityDetails) |
| `includeFloorPlans` | boolean | `true` | Emit floor-plan records (mode=communityDetails) |
| `includeQuickMoveIns` | boolean | `true` | Emit quick-move-in home records (mode=communityDetails) |
| `minPrice` / `maxPrice` | number | – | Filter by price (USD) |
| `minBedrooms` | number | – | Minimum bedrooms |
| `maxBedrooms` | number | – | Maximum bedrooms |
| `minBathrooms` | number | – | Minimum bathrooms |
| `activeAdultOnly` | boolean | `false` | Mode=byState: 55+ communities only |
| `excludeSoldOut` | boolean | `false` | Mode=byState: drop sold-out communities |
| `qmiOnly` | boolean | `false` | Mode=byState: only communities with move-in-ready inventory |
| `maxItems` | integer | `100` | Hard cap on emitted records |

### Example input

```json
{
  "mode": "byState",
  "state": "Florida",
  "brand": "Pulte",
  "region": "Orlando",
  "minBedrooms": 3,
  "maxItems": 100
}
```

```json
{
  "mode": "communityDetails",
  "communityUrls": [
    { "url": "https://www.pulte.com/homes/florida/orlando/clermont/lakehaven-estates-211447" }
  ]
}
```

### Use cases

- **Market research** — track new-construction pricing and inventory across metros
- **Lead generation** — find quick-move-in homes matching a buyer's budget/bedroom requirements
- **Competitive analysis** — compare community counts, price points, and sales status by builder brand and region
- **Deal alerts** — surface discounted quick-move-in homes via the `savingsAmount` field

### FAQs

**Does this need a Pulte account?**
No. It scrapes Pulte's public community-search API and community pages.

**What's the difference between `startingPrice` on a community vs. a floor plan?**
A community's `startingPrice` is the lowest floor-plan starting price across the whole community. Each `floorPlan` record has its own specific starting price.

**Why do some communities show `priceRangeLabel` instead of `startingPrice`?**
Brand-new "Coming Soon" communities don't have a firm price yet — Pulte shows a range label like "Upper $300's" instead. The actor surfaces whichever one Pulte actually provides.

**Can I search Centex, Del Webb, or DiVosta the same way?**
Yes — set `brand` accordingly. Coverage varies by state (e.g. Del Webb is strongest in retirement-heavy states like Arizona and Florida).

### Limitations

- `region` is a free-text metro name (e.g. `Orlando`, `Phoenix`) matched against Pulte's own region names; an unmatched region returns zero results rather than an error.
- Only English-language, US markets are covered (Pulte does not currently operate outside the US).
- Individual community pages can be large; very high `maxItems` values across many `communityUrls` in one run will take proportionally longer.
- A small number of long-established, large master-planned communities (mostly older Del Webb 55+ communities) use a legacy community-page template with no floor-plan or quick-move-in grid at all — Pulte only shows a marketing overview and directs visitors to call the sales office. The actor correctly returns 0 records for these pages instead of crashing; it does not fabricate data Pulte doesn't expose on the page.
- `planUrl` / `homeUrl` (individual floor-plan / quick-move-in permalinks) always open correctly in a real web browser, but pulte.com's edge WAF returns a soft 404 to bare HTTP clients (e.g. `curl`) that omit modern browser fingerprint headers (`sec-ch-ua`, `sec-fetch-*`). This only affects the deep permalink pages, not the community pages themselves or the data the actor extracts (which is scraped directly from the community page's card markup, not by fetching these permalinks).

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `state` (type: `string`):

US state to search for communities.

## `brand` (type: `string`):

Which PulteGroup homebuilding brand to search.

## `region` (type: `string`):

Narrow to a specific metro area within the state, e.g. `Orlando`, `Tampa`, `Phoenix`, `Denver`. Leave blank to search the whole state.

## `communityUrls` (type: `array`):

Pulte.com community page URLs, e.g. `https://www.pulte.com/homes/florida/orlando/clermont/lakehaven-estates-211447` (use the `communityUrl` field from mode=byState output).

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

Emit a record per available floor plan (mode=communityDetails).

## `includeQuickMoveIns` (type: `boolean`):

Emit a record per move-in-ready spec home currently for sale (mode=communityDetails).

## `minPrice` (type: `number`):

Drop records priced below this.

## `maxPrice` (type: `number`):

Drop records priced above this.

## `minBedrooms` (type: `number`):

Drop records with fewer bedrooms than this.

## `maxBedrooms` (type: `number`):

Drop records with more bedrooms than this.

## `minBathrooms` (type: `number`):

Drop records with fewer bathrooms than this.

## `activeAdultOnly` (type: `boolean`):

Mode=byState only. Only keep communities flagged as active-adult (55+).

## `excludeSoldOut` (type: `boolean`):

Mode=byState only. Drop communities marked as sold out.

## `qmiOnly` (type: `boolean`):

Mode=byState only. Only keep communities that currently have move-in-ready inventory.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "byState",
  "state": "Florida",
  "brand": "Pulte",
  "communityUrls": [],
  "includeFloorPlans": true,
  "includeQuickMoveIns": true,
  "activeAdultOnly": false,
  "excludeSoldOut": false,
  "qmiOnly": false,
  "maxItems": 100
}
```

# Actor output Schema

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

Dataset containing all scraped communities, floor plans, and quick-move-in homes.

# 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 = {
    "mode": "byState",
    "state": "Florida",
    "brand": "Pulte",
    "communityUrls": [],
    "includeFloorPlans": true,
    "includeQuickMoveIns": true,
    "activeAdultOnly": false,
    "excludeSoldOut": false,
    "qmiOnly": false,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/pulte-homes-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 = {
    "mode": "byState",
    "state": "Florida",
    "brand": "Pulte",
    "communityUrls": [],
    "includeFloorPlans": True,
    "includeQuickMoveIns": True,
    "activeAdultOnly": False,
    "excludeSoldOut": False,
    "qmiOnly": False,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/pulte-homes-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "byState",
  "state": "Florida",
  "brand": "Pulte",
  "communityUrls": [],
  "includeFloorPlans": true,
  "includeQuickMoveIns": true,
  "activeAdultOnly": false,
  "excludeSoldOut": false,
  "qmiOnly": false,
  "maxItems": 100
}' |
apify call crawlerbros/pulte-homes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/pulte-homes-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9K47vIadWQayCJk4w/builds/HSAeR4QBl9zJLfWf2/openapi.json
