Casa APIcasa.it ↗
Search Casa.it property listings by location, price, size, and type. Retrieve listing details, photos, publisher info, and location autocomplete via 5 endpoints.
What is the Casa API?
The Casa.it API gives developers access to Italy's real estate listings across 5 endpoints, covering location autocomplete, paginated property search, listing details, and property type filters. The search_listings endpoint accepts filters for price, room count, size in square meters, and sort order, while get_listing_detail returns the full listing record including description, media, address, and publisher data.
curl -X GET 'https://api.parse.bot/scraper/2fb52193-7159-4b0c-b042-5bd783d23675/get_location_suggestions?query=Roma' \ -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 casa-it-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.
"""Casa.it property search — bounded, re-runnable; every call capped."""
from parse_apis.casa_it_property_search_api import CasaIt, TransactionType, Sort, ListingNotFound
client = CasaIt()
# Discover locations matching a query — each carries an hkey for downstream search.
for loc in client.locations.suggest(query="Milano", limit=3):
print(loc.name, loc.type, loc.hkey, loc.listings_count)
# List available property types (static catalog).
for pt in client.propertytypes.list(limit=5):
print(pt.label, pt.value)
# Search listings for sale in Rome, sorted by price ascending.
listing = client.listings.search(
location_hkey="a0d22860",
transaction_type=TransactionType.VENDITA,
sort=Sort.PRICE_ASC,
limit=1,
).first()
if listing:
print(listing.id, listing.property_type, listing.channel)
# Search mountain homes (chalets, trulli, baite) — no location filter.
for home in client.listings.search_mountain(price_max=500000, limit=3):
print(home.id, home.property_type, home.uri)
# Search rentals with Sort enum — typed error handling.
try:
rental = client.listings.search(
location_hkey="a0d22860",
transaction_type=TransactionType.AFFITTO,
sort=Sort.PRICE_DESC,
limit=1,
).first()
if rental:
print(rental.id, rental.property_type, rental.description)
except ListingNotFound as exc:
print(f"Not found: {exc.listing_id}")
print("exercised: locations.suggest / propertytypes.list / listings.search / listings.search_mountain")
Get location autocomplete suggestions for a search query. Returns locations (cities, provinces, regions, zones, metro lines) with their hkey identifiers for use in search_listings and search_mountain_homes. Each location carries an hkey string that uniquely identifies it in downstream search endpoints, plus lat/lon coordinates and an approximate listings_count.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search query for location (e.g., 'Roma', 'Milano') |
{
"type": "object",
"fields": {
"items": "array of location objects with id, name, hkey, type, lat, lon, slug, level, listings_count"
},
"sample": {
"data": {
"items": [
{
"id": "IT-LAZ-RM",
"lat": 41.85,
"lon": 12.63,
"hkey": "ed427fcb",
"name": "Roma",
"slug": "roma",
"type": "province",
"level": 6,
"listings_count": "44.914"
}
]
},
"status": "success"
}
}About the Casa API
Endpoints and Data Coverage
The API exposes five endpoints for working with Italian real estate data from Casa.it. get_location_suggestions accepts a text query and returns matching places — cities, provinces, regions, zones, and metro lines — each with an hkey identifier, geographic coordinates, and a listings_count. That hkey is the key input for scoping searches to a specific area in both search_listings and search_mountain_homes.
Search and Filtering
search_listings accepts POST requests with filters including price_max, mq_min, mq_max, rooms, bathrooms, and sort (relevance, price ascending, or price descending). Results are paginated via page and size parameters. The response includes a list array of listing objects, a total count, paginator metadata, and resolvedLocations confirming how the location input was interpreted. search_mountain_homes targets a specific subset of rural property types — baite, bungalow, chalet, trulli — and accepts location_hkey, price bounds, and size bounds. For most use cases, search_listings with the appropriate property type filter covers equivalent ground.
Listing Detail and Reference Data
get_listing_detail takes a numeric listing_id and returns the full property record: propertyType, address, price, size, rooms, description, media (photos), publisher, features, and more. If the listing no longer exists, the response includes a stale_input field with kind input_not_found. get_property_types returns a static reference list of residential property type labels and their corresponding filter values for use in search requests.
The Casa API is a managed, monitored endpoint for casa.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when casa.it 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 casa.it 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 cross-border property search tool filtering Italian listings by price, region, and size
- Aggregate listing data to track price trends across Italian cities using
search_listingswithprice_maxand location filters - Populate a location autocomplete widget using
get_location_suggestionswith itsname,type, andlat/lonfields - Monitor individual listings for price or status changes by polling
get_listing_detailwith a storedlisting_id - Create a rural property finder surfacing trulli, chalet, and baita listings via
search_mountain_homes - Index Casa.it publisher contact data and listing photos from the
publisherandmediafields in listing detail responses - Enumerate available property type filter values via
get_property_typesto dynamically populate a search UI
| 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 Casa.it have an official developer API?+
What does `get_location_suggestions` return beyond a place name?+
id, name, hkey, type (city, province, region, zone, or metro line), lat, lon, slug, level, and listings_count. The hkey value is what you pass as location_hkey in search endpoints.Does `get_listing_detail` return rental listings, or only properties for sale?+
propertyType and related fields in the response distinguish the listing's category. Filtering searches by transaction type (sale vs. rent) is not currently an explicit parameter in search_listings. You can fork this API on Parse and revise it to add a transaction-type filter to the search endpoint.Is there a way to search by neighborhood or draw a map polygon instead of using an hkey?+
location_hkey values returned by get_location_suggestions for geographic scoping. Free-form polygon or bounding-box search is not currently exposed. You can fork this API on Parse and revise it to add coordinate-based or bounding-box search if the underlying data supports it.How does pagination work in `search_listings`?+
page (integer) and size (results per page) as POST body parameters. The response includes a paginator object with pagination metadata and a total integer for the full result count matching your filters.