atHome APIathome.lu ↗
Access Luxembourg property listings, agency profiles, and agent details from atHome.lu via 8 structured endpoints. Filter by price, area, rooms, city, and more.
What is the atHome API?
The atHome.lu API covers 8 endpoints that expose property listings, agency profiles, and agent data from Luxembourg's atHome.lu real estate platform. Use search_properties to query listings by price, area, and room count, or get_agency_agents to retrieve the full roster of agents for any agency. Responses include structured fields for addresses, photos, transaction types, pricing, and contact details.
curl -X GET 'https://api.parse.bot/scraper/c5977a9f-4e77-4f30-9a5b-83c1c0b9671b/search_properties?page=1&max_area=200&min_area=50&max_price=2000000&max_rooms=5&min_price=100000&min_rooms=2&page_size=5&transaction=buy&property_types=Apartment' \ -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 athome-lu-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.
"""atHome.lu Real Estate API — bounded, re-runnable walkthrough."""
from parse_apis.athome_lu_real_estate_api import (
AtHome, Transaction, PropertyNotFound
)
client = AtHome()
# Search properties for sale with price/size filters.
for prop in client.properties.search(
transaction=Transaction.BUY, min_price=500000, max_price=1000000, limit=3
):
print(prop.type, prop.address.city, prop.prices.min, prop.prices.unit)
# Browse agencies in Luxembourg, drill into the first one.
agency_summary = client.agencysummaries.search(limit=1).first()
if agency_summary:
print(agency_summary.name, agency_summary.facets.buy, "listings for sale")
# Navigate to full agency details.
agency = agency_summary.details()
print(agency.name, agency.services, agency.languages)
# List agents belonging to this agency.
for agent in agency.agents.list(limit=3):
print(agent.first_name, agent.last_name, agent.email)
# Featured agents list — quick browse of top agents on the platform.
featured = client.featuredagents.list(limit=2).first()
if featured:
# Drill into full agent profile.
full_agent = featured.details()
print(full_agent.first_name, full_agent.last_name, full_agent.languages)
# Typed error handling: fetch a property that may not exist.
try:
detail = client.properties.search(transaction=Transaction.RENT, limit=1).first()
if detail:
print(detail.type, detail.address.city)
except PropertyNotFound as exc:
print(f"Property not found: {exc.listing_id}")
print("exercised: properties.search / agencysummaries.search / agency.details / agency.agents.list / featuredagents.list / featured.details")
Search for property listings on atHome.lu with various filters. Returns paginated results ordered by recency. Supports filtering by transaction type, property type, price range, room count, and surface area. Results include full listing summaries with address, contact, media, pricing, and child units for multi-unit projects.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| max_area | integer | Maximum surface area in square meters. |
| min_area | integer | Minimum surface area in square meters. |
| max_price | integer | Maximum price in EUR. |
| max_rooms | integer | Maximum number of rooms. |
| min_price | integer | Minimum price in EUR. |
| min_rooms | integer | Minimum number of rooms. |
| page_size | integer | Number of results per page. |
| transaction | string | Transaction type. |
| property_types | string | Comma-separated property type keys to filter by. Values are case-sensitive: 'Apartment', 'House', 'Semi-detached house', 'Terraced', 'Apartment block', 'New project', 'Housing project'. |
{
"type": "object",
"fields": {
"data": "array of property listing objects with id, type, address, contact, media, prices, surfaces, rooms, and permalink fields",
"total": "integer total count of matching results"
},
"sample": {
"data": {
"data": [
{
"id": 9136394,
"name": "KIISCHTEN",
"type": "Apartment block",
"rooms": {
"max": 0,
"min": 0
},
"prices": {
"max": 1245000,
"min": 645000,
"unit": "€"
},
"address": {
"city": "Junglinster",
"country": "Luxembourg"
},
"typeKey": "residence",
"bedrooms": {
"max": 3,
"min": 1
},
"surfaces": {
"max": 140,
"min": 63,
"unit": "m²"
}
}
],
"total": 0
},
"status": "success"
}
}About the atHome API
Property Search and Listing Details
The search_properties endpoint accepts filters including min_price, max_price, min_area, max_area, min_rooms, max_rooms, and page/page_size for pagination. Results return an array of listing objects with id, type, address, contact, media, prices, surfaces, rooms, and permalink fields, plus a total count of matching records. Results are ordered by recency. Note that unrecognized property_types values silently return empty results rather than an error.
get_property_details takes a numeric listing_id (from search_properties results) and returns the full listing record, including descriptions, media, prices, characteristics, and a children array for multi-unit projects. Passing a non-existent ID returns an input_not_found response rather than an HTTP error.
Agency and Agent Data
search_agencies lets you find agencies by optional city parameter (e.g. 'Luxembourg' or 'Esch-sur-Alzette'); omitting it returns all active agencies in Luxembourg. Each result includes id, name, addresses, and facets showing buy, rent, and sold counts. From there, get_agency_details returns the full agency profile: businessHours, description, services, languages, email, and external links.
get_agency_properties ties listings back to an agency via agency_id, with optional filters for agent_id and transaction type ('buy' or 'rent'). get_agency_agents returns every agent at a given agency with fields id, firstName, lastName, email, phoneNumber, and photo. get_agent_details adds languages, experienceSince, and agencyId for individual agents. get_all_agents returns a curated list of active agents platform-wide, each including a nested agency object with id, name, city, and logo.
The atHome API is a managed, monitored endpoint for athome.lu — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when athome.lu 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 athome.lu 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 Luxembourg property search tool filtering by price range and minimum area using
search_properties. - Aggregate agency contact details and business hours across Luxembourg cities with
search_agenciesandget_agency_details. - Map all listings belonging to a specific agency by combining
search_agenciesandget_agency_properties. - Display agent bio pages with experience dates and languages sourced from
get_agent_details. - Compare buy-vs-rent inventory counts per agency using the
facetsfield fromsearch_agencies. - Build a multi-unit project explorer using the
childrenarray returned byget_property_details. - Monitor new Luxembourg listings by polling
search_propertieswith recency ordering and tracking newidvalues.
| 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 atHome.lu offer an official developer API?+
What does `get_agency_properties` return, and can I filter by transaction type?+
id, transaction, price, address, characteristic, and photos for the specified agency. You can pass transaction: 'buy' or transaction: 'rent' to narrow results, and optionally supply an agent_id to filter to a single agent's listings. The meta object includes the total count of matching properties.Are property listings outside Luxembourg covered?+
search_agencies endpoint defaults to Luxembourg-wide results when no city filter is supplied.Does the API expose historical sold-price data or valuation estimates?+
What happens if I pass an invalid listing ID to `get_property_details`?+
input_not_found response rather than an HTTP error code. Similarly, passing an unrecognized value for property_types in search_properties returns empty results without an error, so validating IDs and type values against known data before querying is advisable.