Discover/pulte.com API
live

pulte.com APIwww.pulte.com

Access Pulte Homes community floor plans and Quick Move-In inventory via API. Returns plan details, QMI home listings, and community metadata by community ID.

Endpoint health
verified 3h ago
get_community_plans
1/1 passing latest checkself-healing
Endpoints
1
Updated
4h ago
Try it
Numeric Pulte community identifier from the community page URL.
api.parse.bot/scraper/e8ec1397-4efb-456e-8214-b6668c0e4f74/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Use it in your codegrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/e8ec1397-4efb-456e-8214-b6668c0e4f74/get_community_plans?community_id=211654' \
  -H 'X-API-Key: $PARSE_API_KEY'
Or use the typed Python SDKfully typed · autocompletes

Typed Python client. Install the CLI, sign in, then pull this API’s generated client:

pip install parse-sdk
parse login
parse add --marketplace pulte-com-api

parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Pulte Homes API Client
Retrieve home floor plans and Quick Move-In inventory for Pulte Homes communities.
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Any, Optional


class ParseClient:
    """Client for interacting with the Pulte Homes API via Parse."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: API key for authentication. If not provided, uses PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "e8ec1397-4efb-456e-8214-b6668c0e4f74"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError(
                "API key must be provided or set in PARSE_API_KEY environment variable"
            )

    def _call(
        self, endpoint: str, method: str = "POST", **params: Any
    ) -> dict[str, Any]:
        """
        Make a request to the Parse API.

        Args:
            endpoint: The endpoint name (e.g., 'get_community_plans')
            method: HTTP method ('GET' or 'POST')
            **params: Query/body parameters for the request

        Returns:
            Response JSON as a dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}

        if method.upper() == "GET":
            response = requests.get(url, headers=headers, params=params, timeout=30)
        elif method.upper() == "POST":
            response = requests.post(url, headers=headers, json=params, timeout=30)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def get_community_plans(self, community_id: str) -> dict[str, Any]:
        """
        Retrieve all home floor plans and QMI inventory homes for a Pulte community.

        Args:
            community_id: Numeric Pulte community identifier from the community page URL.

        Returns:
            Dictionary containing community_id, community_name, home_plans, qmi_homes,
            total_plans, and total_qmi.
        """
        return self._call("get_community_plans", method="GET", community_id=community_id)


def main():
    """Main function demonstrating a practical workflow with the Pulte Homes API."""

    # Initialize the client
    client = ParseClient()

    # Define a list of community IDs to check
    community_ids = ["211654"]

    print("=" * 70)
    print("PULTE HOMES INVENTORY SEARCH")
    print("=" * 70)

    all_communities_data = []

    for community_id in community_ids:
        try:
            print(f"\nFetching data for community ID: {community_id}")
            print("-" * 70)

            # Get community plans and QMI inventory
            response = client.get_community_plans(community_id)

            # Verify successful response
            if response.get("status") != "success":
                print(f"Error: API returned status '{response.get('status')}'")
                continue

            data = response.get("data", {})
            all_communities_data.append(data)

            # Display community information
            print(f"Community: {data.get('community_name')}")
            print(f"Total Plans: {data.get('total_plans')}")
            print(f"Total QMI Homes: {data.get('total_qmi')}")

            # Process and display home plans
            home_plans = data.get("home_plans", [])
            if home_plans:
                print(f"\n  Available Floor Plans ({len(home_plans)}):")
                print("  " + "-" * 66)

                for idx, plan in enumerate(home_plans, 1):
                    print(f"\n    {idx}. {plan.get('plan_name', 'Unknown')}")
                    print(f"       Plan ID: {plan.get('plan_id')}")
                    print(f"       Square Feet: {plan.get('square_feet'):,}")
                    print(
                        f"       Bedrooms: {plan.get('bedrooms')} | Bathrooms: {plan.get('bathrooms')}"
                    )
                    price = plan.get("price")
                    print(
                        f"       Price: {f'${price:,.0f}' if price else 'Contact for pricing'}"
                    )
                    print(f"       URL: {plan.get('listing_url')}")

            # Process QMI homes
            qmi_homes = data.get("qmi_homes", [])
            if qmi_homes:
                print(f"\n  Quick Move-In (QMI) Homes ({len(qmi_homes)}):")
                print("  " + "-" * 66)

                for idx, home in enumerate(qmi_homes, 1):
                    print(f"\n    {idx}. {home.get('home_name', 'QMI Home')}")
                    print(f"       Home ID: {home.get('home_id')}")
                    print(
                        f"       Bedrooms: {home.get('bedrooms')} | Bathrooms: {home.get('bathrooms')}"
                    )
                    print(f"       Status: {home.get('status')}")
            else:
                print("\n  No Quick Move-In homes currently available.")

        except requests.exceptions.RequestException as e:
            print(f"Error fetching community {community_id}: {e}")
        except Exception as e:
            print(f"Unexpected error for community {community_id}: {e}")

    # Summary statistics
    print("\n" + "=" * 70)
    print("SUMMARY")
    print("=" * 70)

    total_communities = len(all_communities_data)
    total_all_plans = sum(c.get("total_plans", 0) for c in all_communities_data)
    total_all_qmi = sum(c.get("total_qmi", 0) for c in all_communities_data)

    print(f"Communities Analyzed: {total_communities}")
    print(f"Total Floor Plans: {total_all_plans}")
    print(f"Total QMI Homes Available: {total_all_qmi}")

    if total_all_plans > 0:
        print("\nTop opportunities for buyers:")
        all_plans = []
        for community in all_communities_data:
            for plan in community.get("home_plans", []):
                all_plans.append(
                    {
                        "community": community.get("community_name"),
                        "plan_name": plan.get("plan_name"),
                        "bedrooms": plan.get("bedrooms"),
                        "bathrooms": plan.get("bathrooms"),
                        "sqft": plan.get("square_feet"),
                    }
                )

        # Group by bedroom count
        bedrooms_groups = {}
        for plan in all_plans:
            bed_count = plan["bedrooms"]
            if bed_count not in bedrooms_groups:
                bedrooms_groups[bed_count] = []
            bedrooms_groups[bed_count].append(plan)

        for bed_count in sorted(bedrooms_groups.keys()):
            plans = bedrooms_groups[bed_count]
            print(
                f"\n  {bed_count}-Bedroom Plans: {len(plans)} available"
                if bed_count
                else f"\n  Plans: {len(plans)} available"
            )

    print("\n" + "=" * 70)


if __name__ == "__main__":
    main()
All endpoints · 1 totalmissing one? ·

Retrieves all home floor plans and QMI inventory homes for a Pulte community.

Input
ParamTypeDescription
community_idrequiredstringNumeric Pulte community identifier from the community page URL.
Response
{
  "type": "object",
  "fields": {
    "qmi_homes": "array",
    "total_qmi": "integer",
    "home_plans": "array",
    "total_plans": "integer",
    "community_id": "string",
    "community_name": "string"
  },
  "sample": {
    "data": {
      "qmi_homes": [],
      "total_qmi": 0,
      "home_plans": [
        {
          "type": "home_plan",
          "price": null,
          "plan_id": 700853,
          "bedrooms": 4,
          "bathrooms": 4,
          "plan_name": "Plan 1",
          "listing_url": "https://www.pulte.com/homes/california/orange-county/irvine/eclipse-at-luna-park-211654/plan-1-700853",
          "square_feet": 4005,
          "builder_name": "Pulte",
          "community_name": "Eclipse At Luna Park"
        }
      ],
      "total_plans": 3,
      "community_id": "211654",
      "community_name": "Eclipse At Luna Park"
    },
    "status": "success"
  }
}

About the pulte.com API

The Pulte Homes API exposes floor plan and Quick Move-In (QMI) inventory data for Pulte communities through a single endpoint, get_community_plans, returning up to 10 response fields including home plan arrays, QMI home arrays, and community metadata. Pass a numeric community ID to retrieve every available floor plan and move-in-ready home in that community in one call.

What the API Returns

The get_community_plans endpoint accepts a single required parameter — community_id, a numeric string taken from the Pulte community page URL — and returns a structured response covering both floor plan offerings and current QMI inventory. The top-level response fields include community_id, community_name, home_plans (an array of available floor plan configurations), total_plans (count of those plans), qmi_homes (an array of Quick Move-In homes ready for near-term purchase), and total_qmi (count of QMI listings).

Floor Plans vs. QMI Homes

The home_plans array covers the configurable options Pulte offers in a community — these represent design options buyers can still customize before construction. The qmi_homes array is distinct: these are already-built or nearly-complete homes with fixed specs that can close quickly. Tracking both arrays together gives a complete picture of what a community currently offers at any given time.

Practical Scope

Each request targets one community, identified by its numeric ID. To cover multiple Pulte communities, make one call per community_id. The API does not require any account credentials on the caller's side. Community IDs are stable numeric identifiers found in the path segment of Pulte community URLs (for example, 211654 in the sample URL above).

Reliability & maintenanceVerified

The pulte.com API is a managed, monitored endpoint for www.pulte.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when www.pulte.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official www.pulte.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
3h ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Monitor QMI inventory changes across multiple Pulte communities by comparing total_qmi over time.
  • Build a community comparison tool using home_plans and total_plans to show plan counts side-by-side.
  • Alert prospective buyers when new Quick Move-In homes appear in the qmi_homes array for a target community.
  • Aggregate floor plan availability across all Pulte communities in a region by iterating community IDs.
  • Feed community_name and plan data into a CRM to track buyer interest against active inventory.
  • Track how many floor plan options remain available in a community as it approaches sellout using total_plans.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000250 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Pulte Homes offer an official developer API?+
Pulte does not publish a public developer API or API documentation. There is no official endpoint listed on pulte.com for third-party access to community or inventory data.
What does the `qmi_homes` array contain, and how is it different from `home_plans`?+
qmi_homes lists Quick Move-In homes — units that are already built or nearly complete and available for a faster close. home_plans lists the floor plan configurations the community offers for new builds, which buyers may still be able to customize. The two arrays are separate, and total_qmi and total_plans give the respective counts for each.
Can I look up communities by state, city, or zip code rather than by community ID?+
Not currently. The API resolves community data using the numeric community_id parameter only; there is no geographic search or browse endpoint. You can fork this API on Parse and revise it to add a geographic lookup or community search endpoint.
Does the API return pricing, square footage, or bedroom counts for floor plans or QMI homes?+
The endpoint specification exposes home_plans and qmi_homes as arrays, but detailed sub-fields like pricing, square footage, or bedroom count are not enumerated in the current response schema. You can fork this API on Parse and revise it to surface those sub-fields from the arrays.
How current is the inventory data returned by `get_community_plans`?+
The data reflects the current state of the Pulte community page at the time of the request. QMI availability in particular can change frequently as homes sell or new units are added, so repeated polling is the recommended approach for freshness-sensitive applications.
Page content last updated . Spec covers 1 endpoint from www.pulte.com.