eXp Realty APIexprealty.com ↗
Access eXp Realty property listings, price history, agent contacts, and location slugs via 3 structured endpoints. Supports pagination and full property details.
What is the eXp Realty API?
The eXp Realty API exposes 3 endpoints for querying property listings on exprealty.com, resolving location slugs, and retrieving full property records. The search_listings endpoint returns paginated summaries including address, price, bedrooms, bathrooms, and listing URLs. The get_property_details endpoint goes deeper with price history, agent contacts, appraisal data, and image URLs for any individual property.
curl -X GET 'https://api.parse.bot/scraper/7d9916c3-50d1-44fd-95ec-a35040ab22b8/search_listings?page=1&slug=austin-tx-real-estate&query=Austin%2C+TX' \ -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 exprealty-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.
from parse_apis.exp_realty_api import ExpRealty, Location, Listing, PropertyDetail, PropertyListing, Agent, PriceHistory
realty = ExpRealty()
# Discover locations matching a query
for location in realty.locations.search(query="Austin, TX"):
print(location.id, location.type, location.url_path)
# Search property listings by slug
for listing in realty.listings.search(slug="austin-tx-real-estate", limit=5):
print(listing.address, listing.price, listing.bedrooms, listing.bathrooms)
# Get full property details for each listing
detail = listing.details.get()
prop = detail.listing
print(prop.price, prop.status, prop.brokerage)
for agent in prop.agents_info:
print(agent.name, agent.phone)
for entry in detail.history:
print(entry.added_at, entry.price, entry.sold_price)
Search for property listings by location query or slug. Supports pagination. Either query or slug must be provided. When query is used, it first resolves to a slug via discover_location internally. Returns listing summaries with address, price, bedrooms, bathrooms, and navigation paths for detail lookups.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| slug | string | Area slug for the location (e.g. 'austin-tx-real-estate'). Can be obtained from discover_location results' url_path field. |
| query | string | Location query (e.g. 'Austin, TX'). Used to auto-discover a slug if slug is not provided. |
{
"type": "object",
"fields": {
"slug": "string, the resolved area slug used for the search",
"listings": "array of property listing summaries with id, address, price, bedrooms, bathrooms, slug, neighbourhood, listing_url_absolute_path",
"pagination": "object with page, size, count (total listings), and total (total pages)"
},
"sample": {
"data": {
"slug": "austin-tx-real-estate",
"listings": [
{
"id": 82137070,
"slug": "1700-buffalo-gap-rd-austin-tx",
"price": 2700000,
"address": "1700 Buffalo Gap Rd, Austin, TX, 78734-3520",
"bedrooms": 3,
"bathrooms": 3,
"neighbourhood": "N/A",
"listing_url_absolute_path": "/austin-tx-real-estate/na/1700-buffalo-gap-rd"
}
],
"pagination": {
"page": 0,
"size": 26,
"count": 6404,
"total": 200
}
},
"status": "success"
}
}About the eXp Realty API
Endpoints and Data Coverage
The API consists of three endpoints. discover_location accepts a free-text query like 'Austin, TX' and returns an array of prediction objects, each carrying type, id, and attributes fields including description, group, label, and url_path. These url_path values feed directly into search_listings as the slug parameter.
Searching Listings
search_listings accepts either a slug (e.g. austin-tx-real-estate) or a plain-text query that resolves to a slug automatically. Results are paginated via the page parameter. Each listing summary in the listings array includes id, address, price, bedrooms, bathrooms, slug, neighbourhood, and listing_url_absolute_path. The pagination object exposes page, size, count (total listings), and total (total pages), which lets you iterate through the full result set for any area.
Property Details
get_property_details accepts either a listing_url taken from listing_url_absolute_path in search results, or a combination of city_slug and property_slug. The response breaks into four sections: listing (full record including price, status, address, bedrooms, bathrooms, imageUrls, agentsInfo, description, and brokerage), history (array of price events with price, addedAt, soldPrice, soldAt, and standardStatus), appraisal (with appraisalResult and sellingRange), and stats (municipality and neighbourhood statistics).
The eXp Realty API is a managed, monitored endpoint for exprealty.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when exprealty.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 exprealty.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?+
- Build a property search tool filtered by city or neighbourhood using search_listings pagination.
- Track price history for individual listings by pulling the history array from get_property_details.
- Display agent contact information sourced from the agentsInfo field for lead generation workflows.
- Populate a listing detail page with imageUrls, description, and brokerage data from get_property_details.
- Generate market reports using municipality and neighbourhood stats from the stats object.
- Resolve ambiguous city name inputs to canonical area slugs via discover_location before running a search.
- Compare appraisalResult and sellingRange against list price to surface pricing anomalies.
| 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.