Toll Brothers APItollbrothers.com ↗
Retrieve home designs and quick move-in homes from Toll Brothers community pages. Access floor plans, pricing, bed/bath counts, and square footage via one endpoint.
What is the Toll Brothers API?
The Toll Brothers API exposes 1 endpoint, get_community_homes, that returns every home design and quick move-in (QMI) listing from a given Toll Brothers community page. Each result includes 8 structured fields per home: builder name, community name, plan name, square footage, bedroom and bathroom counts, starting price, and QMI price where applicable. This makes it straightforward to pull structured new-construction inventory directly from Toll Brothers community URLs.
curl -X GET 'https://api.parse.bot/scraper/fc75b6ab-bf75-4c1e-bc61-c3631a2194e3/get_community_homes?community_url=%2Fluxury-homes-for-sale%2FCalifornia%2FMetro-Heights%2FViewpoint' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace tollbrothers-com-api
uv run 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.
"""
Toll Brothers Community Homes API Client
This module provides a Python client for the Parse API to retrieve home designs
and quick move-in homes from Toll Brothers community pages.
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional
class ParseClient:
"""Client for interacting with the Parse API."""
def __init__(self, api_key: Optional[str] = None):
"""
Initialize the Parse API client.
Args:
api_key: API key for authentication. If not provided, will use PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "fc75b6ab-bf75-4c1e-bc61-c3631a2194e3"
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) -> dict:
"""
Make a request to the Parse API.
Args:
endpoint: The API endpoint name
method: HTTP method (GET or POST)
**params: Parameters to pass to the endpoint
Returns:
JSON response from the API
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
if method == "GET":
response = requests.get(url, headers=headers, params=params)
elif method == "POST":
response = requests.post(url, headers=headers, json=params)
else:
raise ValueError(f"Unsupported HTTP method: {method}")
response.raise_for_status()
return response.json()
def get_community_homes(self, community_url: str) -> dict:
"""
Retrieve all home designs and quick move-in homes from a Toll Brothers community page.
Args:
community_url: The Toll Brothers community page URL path or full URL
e.g., '/luxury-homes-for-sale/California/Metro-Heights/Viewpoint'
Returns:
Dictionary containing community name, homes list, and total count
"""
return self._call("get_community_homes", method="GET", community_url=community_url)
def main():
"""Main function demonstrating practical usage of the Toll Brothers API client."""
# Initialize the client
client = ParseClient()
# List of Toll Brothers communities to analyze
communities_to_search = [
"/luxury-homes-for-sale/California/Metro-Heights/Viewpoint",
"/luxury-homes-for-sale/Pennsylvania/Philadelphia-Area/Moorland",
]
print("=" * 80)
print("TOLL BROTHERS COMMUNITY HOMES ANALYSIS")
print("=" * 80)
all_homes = []
total_communities = 0
# Fetch homes from each community
for community_url in communities_to_search:
try:
print(f"\nFetching homes from: {community_url}")
response = client.get_community_homes(community_url)
if response.get("status") == "success":
community_data = response.get("data", {})
community_name = community_data.get("community_name", "Unknown")
homes = community_data.get("homes", [])
total = community_data.get("total", 0)
print(f"Community: {community_name}")
print(f"Total homes found: {total}")
total_communities += 1
# Process each home
for idx, home in enumerate(homes, 1):
all_homes.append(home)
# Print home details
print(f"\n Home {idx}:")
print(f" Plan: {home.get('plan_name', 'N/A')}")
print(f" Builder: {home.get('builder_name', 'N/A')}")
print(f" Bedrooms: {home.get('bedrooms', 'N/A')}")
print(f" Bathrooms: {home.get('bathrooms', 'N/A')}")
print(f" Square Footage: {home.get('square_footage', 'N/A'):,}")
print(f" Starting Price: ${home.get('starting_price', 0):,}")
if home.get("is_qmi"):
qmi_price = home.get("qmi_price")
print(f" Quick Move-In: YES - ${qmi_price:,}")
else:
print(f" Quick Move-In: NO")
print(f" URL: {home.get('listing_url', 'N/A')}")
else:
print(f"Error: {response.get('message', 'Unknown error')}")
except requests.exceptions.RequestException as e:
print(f"Error fetching community {community_url}: {e}")
except Exception as e:
print(f"Unexpected error processing {community_url}: {e}")
# Summary analysis
print("\n" + "=" * 80)
print("SUMMARY ANALYSIS")
print("=" * 80)
if all_homes:
print(f"Total communities searched: {total_communities}")
print(f"Total homes found: {len(all_homes)}")
# Calculate statistics
prices = [h.get("starting_price", 0) for h in all_homes if h.get("starting_price")]
if prices:
avg_price = sum(prices) / len(prices)
min_price = min(prices)
max_price = max(prices)
print(f"\nPrice Statistics:")
print(f" Average Price: ${avg_price:,.0f}")
print(f" Minimum Price: ${min_price:,}")
print(f" Maximum Price: ${max_price:,}")
# Count QMI homes
qmi_homes = [h for h in all_homes if h.get("is_qmi")]
print(f"\nQuick Move-In Homes: {len(qmi_homes)} out of {len(all_homes)}")
# Bedroom distribution
bedroom_counts = {}
for home in all_homes:
bedrooms = home.get("bedrooms", "Unknown")
bedroom_counts[bedrooms] = bedroom_counts.get(bedrooms, 0) + 1
print(f"\nBedroom Distribution:")
for bedrooms, count in sorted(bedroom_counts.items()):
print(f" {bedrooms} bedrooms: {count} homes")
else:
print("No homes found in any community.")
if __name__ == "__main__":
main()Retrieve all home designs and quick move-in (QMI) homes listed on a Toll Brothers community page. Returns each floor plan with builder name, community name, plan name, square footage, bedroom count, bathroom count, starting/from price, QMI price (if applicable), and the listing URL. Supports both individual community pages and master community pages which aggregate multiple sub-communities.
| Param | Type | Description |
|---|---|---|
| community_urlrequired | string | The Toll Brothers community page URL path, e.g. '/luxury-homes-for-sale/California/Metro-Heights/Viewpoint'. Full URLs starting with https://www.tollbrothers.com are also accepted. |
{
"type": "object",
"fields": {
"homes": "array of home objects with builder_name, community_name, plan_name, square_footage, bedrooms, bathrooms, starting_price, qmi_price, is_qmi, listing_url",
"total": "integer",
"community_name": "string"
},
"sample": {
"data": {
"homes": [
{
"is_qmi": false,
"bedrooms": "5-6",
"bathrooms": "5-6",
"plan_name": "Compass",
"qmi_price": null,
"listing_url": "https://www.tollbrothers.com/luxury-homes-for-sale/California/Metro-Heights/Viewpoint/Compass",
"builder_name": "Toll Brothers",
"community_name": "Viewpoint at Metro Heights",
"square_footage": 2962,
"starting_price": 1758000
},
{
"is_qmi": true,
"bedrooms": "5",
"bathrooms": "5",
"plan_name": "Compass Contemporary Craftsman",
"qmi_price": 1758000,
"listing_url": "https://www.tollbrothers.com/luxury-homes-for-sale/California/Metro-Heights/Viewpoint/Quick-Move-In/284366",
"builder_name": "Toll Brothers",
"community_name": "Viewpoint at Metro Heights",
"square_footage": 2962,
"starting_price": 1758000
}
],
"total": 6,
"community_name": "Viewpoint at Metro Heights"
},
"status": "success"
}
}About the Toll Brothers API
What the API Returns
The get_community_homes endpoint accepts a single required parameter, community_url, which is the path portion of a Toll Brothers community page (for example, /luxury-homes-for-sale/California/Metro-Heights/Viewpoint). The response contains a homes array, a total integer reflecting the count of listings found, and a community_name string identifying the community.
Home Object Fields
Each object in the homes array includes builder_name, community_name, plan_name, square_footage, bedrooms, bathrooms, starting_price, and qmi_price. The starting_price field reflects the base from-price for a standard home design, while qmi_price is populated only when that specific unit is a quick move-in home with an assigned price. Floor plans without a QMI designation will return null or an empty value for qmi_price.
Coverage and Scope
The endpoint is scoped to a single community page per request. To aggregate data across multiple Toll Brothers communities, you call the endpoint once per community URL. The community_url parameter maps directly to Toll Brothers' URL structure, so any publicly accessible community page can be queried. Data reflects what is currently published on that community's listing page, including both available home designs and any active quick move-in homes.
The Toll Brothers API is a managed, monitored endpoint for tollbrothers.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when tollbrothers.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 tollbrothers.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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track starting price changes for specific Toll Brothers floor plans across communities over time
- Build a new-construction home search tool filtered by bedroom count and square footage
- Identify which communities currently have quick move-in homes available by checking
qmi_price - Aggregate square footage and pricing data across multiple Toll Brothers communities for market analysis
- Compare bedroom and bathroom configurations across floor plans within a single community
- Alert buyers when a new QMI home appears in a target community
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 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.
Does Toll Brothers offer an official developer API?+
How does the `get_community_homes` endpoint distinguish quick move-in homes from standard floor plans?+
starting_price field and return a null or empty qmi_price. Quick move-in homes carry a specific assigned price in the qmi_price field, which you can use to filter QMI-only results from a community's full listing.Can I query multiple communities in one request?+
get_community_homes covers one community URL. To collect data across communities, you make one request per community_url value. The total field in each response tells you how many homes were returned for that community.Does the API return lot-level details, GPS coordinates, or home images?+
Does the API cover Toll Brothers communities outside the United States or in every US state?+
community_url path on tollbrothers.com, but communities behind login walls or not yet published publicly will not return data. If a specific region's pages are not accessible, the response will reflect that. You can fork this API on Parse and revise it to handle additional regional URL patterns or community discovery.