Discover/richmondamerican.com API
live

richmondamerican.com APIwww.richmondamerican.com

Access floor plans and move-in ready home listings from Richmond American Homes community pages, including plan names, lot IDs, types, and listing URLs.

Endpoint health
verified 2h ago
get_community_listings
1/1 passing latest checkself-healing
Endpoints
1
Updated
3h ago
Try it
URL path of the Richmond American community page, e.g. /california/los-angeles-new-homes/valencia/esprit-at-valencia/. Must match the path structure used on richmondamerican.com.
api.parse.bot/scraper/42c19201-00d7-4cd7-a551-37d7fe4f48ca/<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/42c19201-00d7-4cd7-a551-37d7fe4f48ca/get_community_listings?community_url=%2Fcalifornia%2Flos-angeles-new-homes%2Fvalencia%2Fesprit-at-valencia%2F' \
  -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 richmondamerican-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.

"""
Richmond American Homes API Client
Extracts floor plan and move-in ready home listings from Richmond American Homes communities.
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Any
from dataclasses import dataclass


@dataclass
class ListingInfo:
    """Represents a single home listing."""
    plan_name: str
    listing_type: str
    community_name: str
    builder_name: str
    listing_url: str
    lot_id: Optional[str] = None
    square_footage: Optional[int] = None
    bedrooms: Optional[int] = None
    bathrooms: Optional[int] = None


class ParseClient:
    """Client for Richmond American Homes API via Parse.bot"""
    
    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.
        
        Args:
            api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "42c19201-00d7-4cd7-a551-37d7fe4f48ca"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key required. Pass api_key or set PARSE_API_KEY environment variable.")
    
    def _call(self, endpoint: str, method: str = "POST", **params) -> dict[str, Any]:
        """
        Make an API request to Parse.bot.
        
        Args:
            endpoint: The endpoint name (e.g., "get_community_listings")
            method: HTTP method ("GET" or "POST")
            **params: Query/body parameters
            
        Returns:
            Response JSON as dictionary
            
        Raises:
            requests.RequestException: If the API request fails
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        try:
            if method == "GET":
                response = requests.get(url, headers=headers, params=params, timeout=30)
            else:  # POST
                response = requests.post(url, headers=headers, json=params, timeout=30)
            
            response.raise_for_status()
            return response.json()
        except requests.RequestException as e:
            raise Exception(f"API request failed: {str(e)}")
    
    def get_community_listings(self, community_url: str) -> dict[str, Any]:
        """
        Get floor plans and move-in ready homes for a Richmond American Homes community.
        
        Args:
            community_url: URL path of the community (e.g., "/california/los-angeles-new-homes/valencia/esprit-at-valencia/")
            
        Returns:
            Dictionary containing community info and listings
        """
        return self._call(
            "get_community_listings",
            method="GET",
            community_url=community_url
        )


def parse_listings(response: dict) -> list[ListingInfo]:
    """
    Parse API response and convert to ListingInfo objects.
    
    Args:
        response: API response dictionary
        
    Returns:
        List of ListingInfo objects
    """
    listings = []
    
    if response.get("status") != "success" or not response.get("data"):
        return listings
    
    data = response["data"]
    for listing in data.get("listings", []):
        listings.append(ListingInfo(
            plan_name=listing.get("plan_name", "Unknown"),
            listing_type=listing.get("type", "unknown"),
            community_name=listing.get("community_name", ""),
            builder_name=listing.get("builder_name", ""),
            listing_url=listing.get("listing_url", ""),
            lot_id=listing.get("lot_id"),
            square_footage=listing.get("square_footage"),
            bedrooms=listing.get("bedrooms"),
            bathrooms=listing.get("bathrooms")
        ))
    
    return listings


if __name__ == "__main__":
    # Initialize client
    client = ParseClient()
    
    # Community URLs to check
    communities = [
        "/california/los-angeles-new-homes/valencia/esprit-at-valencia/",
        "/colorado/denver-new-homes/castle-rock/ascent-at-castle-rock/",
    ]
    
    all_listings = []
    
    print("=" * 70)
    print("Richmond American Homes Listings Inventory")
    print("=" * 70)
    
    # Fetch listings for each community
    for community_url in communities:
        print(f"\nFetching listings for: {community_url}")
        print("-" * 70)
        
        try:
            response = client.get_community_listings(community_url)
            
            if response.get("status") != "success":
                print(f"  ⚠ Failed to fetch: {response.get('error', 'Unknown error')}")
                continue
            
            data = response.get("data", {})
            community_name = data.get("community_name", "Unknown")
            builder_name = data.get("builder_name", "Richmond American Homes")
            total_listings = data.get("total_listings", 0)
            
            print(f"  Builder: {builder_name}")
            print(f"  Community: {community_name}")
            print(f"  Total Listings: {total_listings}")
            
            # Parse listings
            listings = parse_listings(response)
            all_listings.extend(listings)
            
            # Group by plan and type
            plan_summary = {}
            for listing in listings:
                key = f"{listing.plan_name} ({listing.listing_type})"
                plan_summary[key] = plan_summary.get(key, 0) + 1
            
            print("\n  Plan Summary:")
            for plan_type, count in sorted(plan_summary.items()):
                plan_name, lst_type = plan_type.rsplit(" (", 1)
                lst_type = lst_type.rstrip(")")
                type_label = "Move-In Ready" if lst_type == "move_in_ready" else "Plan to Build"
                print(f"    • {plan_name}: {count} {type_label}")
            
            # Show example move-in ready homes
            qmi_homes = [l for l in listings if l.listing_type == "move_in_ready"]
            if qmi_homes:
                print("\n  Sample Move-In Ready Homes:")
                for home in qmi_homes[:3]:
                    lot_info = f" (Lot: {home.lot_id})" if home.lot_id else ""
                    print(f"    • {home.plan_name}{lot_info}")
                if len(qmi_homes) > 3:
                    print(f"    ... and {len(qmi_homes) - 3} more")
        
        except Exception as e:
            print(f"  ❌ Error: {str(e)}")
    
    # Summary statistics
    print("\n" + "=" * 70)
    print("SUMMARY")
    print("=" * 70)
    print(f"Communities checked: {len(communities)}")
    print(f"Total listings found: {len(all_listings)}")
    
    plan_to_build = [l for l in all_listings if l.listing_type == "plan_to_build"]
    move_in_ready = [l for l in all_listings if l.listing_type == "move_in_ready"]
    
    print(f"  • Plans to Build: {len(plan_to_build)}")
    print(f"  • Move-In Ready: {len(move_in_ready)}")
    
    # Unique plans
    unique_plans = set(l.plan_name for l in all_listings)
    print(f"\nUnique floor plans discovered: {len(unique_plans)}")
    for plan in sorted(unique_plans)[:5]:
        count = sum(1 for l in all_listings if l.plan_name == plan)
        print(f"  • {plan}: {count} listings")
    
    if len(unique_plans) > 5:
        print(f"  ... and {len(unique_plans) - 5} more plans")
All endpoints · 1 totalmissing one? ·

Get floor plans and move-in ready (QMI) homes for a Richmond American Homes community. Returns builder name, community name, plan names, listing types, lot IDs, and listing URLs discovered from the site's XML sitemaps. Numeric details (square footage, bedrooms, bathrooms, prices) are not available as the site loads them exclusively through Blazor Server WebSocket.

Input
ParamTypeDescription
community_urlrequiredstringURL path of the Richmond American community page, e.g. /california/los-angeles-new-homes/valencia/esprit-at-valencia/. Must match the path structure used on richmondamerican.com.
Response
{
  "type": "object",
  "fields": {
    "listings": "array of listing objects with builder_name, community_name, plan_name, type, listing_url, and optionally lot_id",
    "location": "object containing city, state, zip_code, street, latitude, longitude when available",
    "builder_name": "string",
    "community_url": "string",
    "community_name": "string",
    "total_listings": "integer"
  },
  "sample": {
    "data": {
      "listings": [
        {
          "type": "plan_to_build",
          "bedrooms": null,
          "bathrooms": null,
          "plan_name": "Nathanson",
          "qmi_price": null,
          "listing_url": "https://www.richmondamerican.com/california/los-angeles-new-homes/valencia/esprit-at-valencia/nathanson/",
          "builder_name": "Richmond American Homes",
          "community_name": "Esprit at Valencia",
          "square_footage": null,
          "starting_price": null
        },
        {
          "type": "move_in_ready",
          "lot_id": "33650000-0003",
          "bedrooms": null,
          "bathrooms": null,
          "plan_name": "Nathanson",
          "qmi_price": null,
          "listing_url": "https://www.richmondamerican.com/california/los-angeles-new-homes/valencia/esprit-at-valencia/nathanson/33650000-0003/",
          "builder_name": "Richmond American Homes",
          "community_name": "Esprit at Valencia",
          "square_footage": null,
          "starting_price": null
        }
      ],
      "location": {},
      "builder_name": "Richmond American Homes",
      "community_url": "https://www.richmondamerican.com/california/los-angeles-new-homes/valencia/esprit-at-valencia/",
      "community_name": "Esprit at Valencia",
      "total_listings": 25
    },
    "status": "success"
  }
}

About the richmondamerican.com API

The Richmond American Homes API provides 1 endpoint — get_community_listings — that returns all floor plan and move-in ready (QMI) listings for a given community page, exposing up to 7 fields per listing including builder name, community name, plan name, listing type, lot ID, and direct listing URL, plus a location object with city, state, ZIP, street, and coordinates when available.

What the API Returns

The get_community_listings endpoint accepts a community_url path — for example, /california/los-angeles-new-homes/valencia/esprit-at-valencia/ — and returns a structured response covering all discoverable listings for that Richmond American Homes community. Each listing object includes builder_name, community_name, plan_name, type (distinguishing floor plan templates from quick move-in homes), listing_url, and optionally lot_id where applicable. The top-level response also includes total_listings and community_url for easy reference.

Location Data

When available, the response includes a location object containing city, state, zip_code, street, latitude, and longitude. This lets you geocode communities, plot them on a map, or filter by geographic area without a secondary geocoding call.

Listing Types and Coverage

The type field differentiates between standard floor plan listings (configurable home designs offered by the community) and QMI (quick move-in) homes that are already built or near completion and assigned a specific lot_id. Note that numeric details such as square footage, bedroom count, bathroom count, and pricing are not currently returned by this endpoint — the response focuses on identifiers, types, and URLs.

Scope and Input

The API is scoped to individual community pages on richmondamerican.com. You supply the URL path of a specific community, and the response reflects the listings tied to that community. To cover multiple communities across a region or state, you would call the endpoint once per community URL.

Reliability & maintenanceVerified

The richmondamerican.com API is a managed, monitored endpoint for www.richmondamerican.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when www.richmondamerican.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.richmondamerican.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
2h 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
  • Aggregate new construction inventory across Richmond American communities for a real estate search portal
  • Monitor when new QMI (move-in ready) lots appear in a specific community using lot_id tracking
  • Map Richmond American communities by geocoordinates from the location object for a homebuyer search tool
  • Compare available floor plan names across multiple communities in the same metro area
  • Feed listing URLs into a downstream scraper or notification system when new plan types appear
  • Build a lead-generation tool that surfaces communities with active QMI inventory for buyers seeking fast closings
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 Richmond American Homes offer an official developer API?+
Richmond American Homes does not publish a public developer API or documented data feed for third-party use. This Parse API provides structured access to community listing data from their website.
How does the get_community_listings endpoint distinguish floor plans from move-in ready homes?+
Each listing object includes a type field that separates standard floor plan listings from QMI (quick move-in) homes. QMI listings also carry an optional lot_id field identifying the specific lot, which floor plan listings typically do not have.
Does the API return pricing, square footage, bedroom counts, or other numeric home details?+
Not currently. The endpoint returns identifiers, types, URLs, and location data. Numeric details like price, square footage, and bed/bath counts are not included in the current response shape. You can fork this API on Parse and revise it to add an endpoint that retrieves those fields from individual listing URLs.
Can I retrieve listings for multiple communities in a single request?+
The endpoint is scoped to one community per request via the community_url parameter. To cover multiple communities, you call the endpoint once per community URL. You can fork this API on Parse and revise it to add a batch endpoint that accepts multiple community paths.
How fresh is the listing data, and does the API paginate results?+
All listings discovered for a community are returned in a single response — there is no pagination. Data reflects what is currently published on the community page, but there is no built-in change-detection or timestamp field in the response, so polling frequency is at your discretion.
Page content last updated . Spec covers 1 endpoint from www.richmondamerican.com.
Related APIs in Real EstateSee all →
zillow.com API
Search for homes for sale, rent, or recently sold listings on Zillow while accessing detailed property information, Zestimates, agent profiles, and current mortgage rates all in one place. Streamline your real estate research by gathering comprehensive property details, agent information, and financing options without navigating multiple pages.
zoopla.co.uk API
Search for properties available for sale or rent, view detailed listing information, check sold house prices, and find local estate agents all in one place. Get access to live marketplace data to help you research properties, compare prices, and connect with agents on the Zoopla platform.
domain.com.au API
Search and compare property listings for sale, rent, or sold properties across Australia, view detailed property information and agent profiles, and explore suburb insights to make informed real estate decisions. Access comprehensive data on agents, neighborhoods, and properties all in one place.
funda.nl API
Search for property listings on Funda.nl, the largest Dutch real estate platform. Access prices, addresses, property details, and agent contact information across Dutch cities and neighbourhoods. Supports paginated browsing and bulk retrieval of listings by area.
loopnet.com API
Access LoopNet's commercial real estate data programmatically. Search listings by location, property type, and transaction type; retrieve full listing details including pricing and property facts; and find and profile commercial real estate brokers.
yad2.co.il API
Search for apartments and cars on Yad2's marketplace and access detailed listing information including photos, prices, and specifications. Instantly reveal seller contact information to connect directly with real estate agents and car dealers.
rightmove.co.uk API
Search for properties across the UK's largest property portal and retrieve detailed listings for homes for sale or to rent, including prices, descriptions, and key property information. Find your next home or investment opportunity by browsing available properties and getting comprehensive details on individual listings.
trulia.com API
Search real estate listings for properties available for sale, rent, or recently sold, and access detailed information like property photos, price history, nearby schools, and local amenities. Compare similar homes, calculate mortgage estimates, and make informed decisions with comprehensive property data all in one place.