HAR APIhar.com ↗
Retrieve active listings and past transactions for HAR.com real estate agents. Returns address, price, beds/baths, sqft, property type, and sold dates.
What is the HAR API?
The HAR.com API exposes one endpoint — get_agent_listings — that returns up to five sections of listing data for any Houston Association of Realtors agent: active for-sale and for-rent listings, recently sold and rented properties, and recent showings. Each record includes address, price, property type, beds, baths, square footage, status, and zip code, giving developers a structured view of an agent's current inventory and transaction history.
curl -X GET 'https://api.parse.bot/scraper/11c10551-f94a-4d12-916c-30a8e0e3362e/get_agent_listings?agent_id=susangar&agent_slug=susan-garczynski' \ -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 har-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.
"""Walkthrough: HAR.com Agent Listings API — bounded, re-runnable."""
from parse_apis.har_com_agent_listings_api import Har, Section, AgentNotFound
client = Har()
# Fetch a full agent portfolio with all sections
portfolio = client.agentportfolios.get(agent_slug="susan-garczynski", agent_id="susangar")
print(f"Agent: {portfolio.agent_name} | Total listings: {portfolio.total_listings}")
# Inspect active For Sale listings
for listing in portfolio.for_sale[:3]:
print(f" FOR SALE: {listing.address} | {listing.price} | {listing.beds}bd/{listing.full_baths}ba | {listing.sqft} sqft")
# Inspect recently sold — shows represented party and sold date
for listing in portfolio.recently_sold[:3]:
print(f" SOLD: {listing.address} | Listed: {listing.listed_price} | Represented: {listing.represented} | Date: {listing.sold_date}")
# Filter to only rental sections using Section enum
rentals = client.agentportfolios.get(
agent_slug="susan-garczynski",
agent_id="susangar",
sections=Section.FOR_RENT,
)
for listing in rentals.for_rent[:3]:
print(f" RENTAL: {listing.address} | {listing.price}/mo | MLS: {listing.mls_number}")
# Typed error handling for a non-existent agent
try:
client.agentportfolios.get(agent_slug="nonexistent-agent-xyz", agent_id="noagent")
except AgentNotFound as exc:
print(f"Agent not found: {exc.agent_slug}")
print("exercised: agentportfolios.get (all sections / filtered / error handling)")
Retrieve all active listings and past transactions for a HAR.com real estate agent. Returns data across sections: For Sale, For Rent, Recently Sold, Recently Rented, and Recent Showings. Each listing includes address, zip code, price, status, property type, beds/baths/sqft, and for sold/rented properties: who the agent represented and the transaction date. Requires either agent_slug or agent_id to identify the agent; both are recommended for reliable resolution. Sections can be filtered via a comma-separated string of Section codes.
| Param | Type | Description |
|---|---|---|
| agent_id | string | Agent ID used in HAR URLs (e.g., 'susangar' from listings_susangar). |
| sections | string | Comma-separated list of sections to include. Empty string returns all sections. |
| agent_slug | string | Agent URL slug used in HAR profile URLs (e.g., 'susan-garczynski' from har.com/susan-garczynski/...). |
{
"type": "object",
"fields": {
"agent_id": "string - Agent ID used",
"sections": "object - Keys are section names (for_sale, for_rent, recently_sold, recently_rented, recent_showings), values are arrays of listing objects with address, zip_code, price, status, property_type, beds, full_baths, half_baths, sqft, mls_number, listing_id, and optionally represented, listed_price, sold_date or rented_date",
"agent_name": "string - Agent's display name",
"agent_slug": "string - URL slug used",
"total_listings": "integer - Total number of listings across all returned sections"
}
}About the HAR API
What the API Returns
The get_agent_listings endpoint returns a structured object keyed by section name: for_sale, for_rent, recently_sold, recently_rented, and recent_showings. Each section contains an array of listing objects. Top-level response fields include agent_name, agent_id, agent_slug, and total_listings, which counts all listings across every returned section.
How to Identify an Agent
Agents are identified by two optional parameters that together resolve a HAR.com profile. agent_slug matches the URL path segment (e.g., susan-garczynski from har.com/susan-garczynski/...), while agent_id matches the identifier used in HAR listing URLs (e.g., susangar from listings_susangar). You can provide either or both. If you only want a subset of sections, pass a comma-separated list to the sections parameter — for example, recently_sold,for_sale. An empty string returns all five sections.
Per-Listing Fields
Every listing object across all sections includes: street address, zip code, asking or sold price, current status, property type (single-family, condo, etc.), beds, baths, and square footage. Sold and rented entries also carry transaction dates, which makes it possible to compute days-on-market or build a timeline of an agent's closed deals.
Coverage Scope
HAR.com is the listing platform for the Houston Association of Realtors, so coverage is limited to the Greater Houston market. Agents who have few or no active listings will still return historical sections if past transactions exist on their profile.
The HAR API is a managed, monitored endpoint for har.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when har.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 har.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?+
- Compare an agent's current for-sale inventory against their recently sold properties to assess pricing accuracy.
- Aggregate recently_sold and recently_rented data to benchmark an agent's transaction volume over time.
- Pull for_rent listings from multiple agents to monitor Houston rental inventory across zip codes.
- Track recent_showings data to gauge how actively an agent is working a given market segment.
- Build an agent comparison tool using total_listings and sold history for buyer or seller due diligence.
- Monitor price changes on for_sale listings by polling the endpoint periodically and diffing returned prices.
- Identify agents specializing in specific property types by filtering for_sale results by the property type field.
| 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 HAR.com offer an official developer API?+
What does the sections parameter control, and which values are valid?+
sections parameter accepts a comma-separated string of any combination of: for_sale, for_rent, recently_sold, recently_rented, and recent_showings. Passing an empty string returns all five sections. The total_listings field in the response reflects only the sections you requested.