# The property graph

**Casafari is the AI agent-native real estate data intelligence platform.** The most complete property index in Europe: a deduplicated, cleaned property graph of residential and commercial property, for sale and for rent, in 16 countries.

## More than listings

Listings are where Casafari starts, not what it delivers. A listing is one advertisement of a property on one source: an agency's own website or a portal. The same flat is usually advertised several times, by more than one agency and on more than one portal, at prices and with descriptions that do not always agree. Counting listings counts advertisements, not properties.

Casafari takes those listings, structures them, cleans them and deduplicates them, and merges every listing of a property into one record. The records, the listings behind them, the agencies and agents that advertise them, their places and their history form the property graph: the most complete property index in Europe.

## How the graph is built

1. **Collect.** Listings from agency websites and portals in 16 countries, as they appear and as they change.
2. **Structure.** Every listing into one schema: type, operation, price, area, rooms, features, condition, energy rating and location.
3. **Clean.** Values normalised, places resolved to the location tree and to coordinates, outliers flagged.
4. **Deduplicate.** The same property, advertised by several agencies and portals, recognised as one.
5. **Merge into the graph.** One record per property, linking its listings, agencies, agents, location and history.

## The history of every property

Because every listing of a property lands on the same record, the record keeps what happened to it, across every source:

- **Price changes**, for sale and for rent: every change, with the old price, the new one and the dates.
- **Status changes**: active, reserved, on hold, sold, rented.
- **Listing and delisting**: when the property came on the market, on which sources, and when each listing was taken down.
- **Time on the market**: for each property, and as distributions for an area.

[Alerts](/docs/alerts) deliver the same history as it happens: new properties, price rises and cuts, reservations, delistings and sales, for any set of filters.

## Every asset class, for sale and for rent

Residential and commercial property alike, in one taxonomy, with country-specific types mapped onto it:

- **Residential**: apartments, studios, duplexes, penthouses, houses, villas, townhouses, chalets, bungalows, country houses, country estates, palaces and rooms.
- **Commercial**: offices, retail, restaurants, hotels, industrial premises, warehouses, workshops and other commercial property.
- **Buildings**: apartment buildings, office buildings and mixed-use buildings.
- **Land**: urban and rural plots.
- **Parking**: garages and parking spaces.
- **New developments**: apartment and house developments.

Each record carries the operations it is offered for, sale and rent, so one property for sale and to let is still one property.

## 16 countries, one schema

The API covers Andorra, Austria, Belgium, France, Germany, Greece, Italy, Luxembourg, Monaco, Poland, Portugal, San Marino, Spain, Switzerland, the United Arab Emirates and the United States. Every market is structured the same way: the same property types, the same fields, and one location tree from country down to neighbourhood, with coordinates. A question asked about Lisbon, Madrid or Munich is answered in the same shape.

## What it means for an agent

- **Count properties, not advertisements.** A property on three portals and two agency websites is one property, so totals, supply and averages are not inflated by duplicates.
- **History comes with the record.** Price cuts, time on the market and delistings are on the property; there is no need to stitch advertisements together.
- **One shape everywhere.** The same request works in every country the graph covers.
- **Built on it:** [Properties](/docs/properties), [Comparables & Valuation](/docs/comparables-valuation), [Area Insights](/docs/area-insights), [Alerts](/docs/alerts) and [AgentGraph AI](/docs/agentgraph).

## Where it shows in the reference

The API's field and operation names keep the word listing, because that is what they hold: `listing_id` is the id of one advertisement, `listings` are the ones merged into a property. The tools' and operations' own descriptions are quoted as each team publishes them.

| In the API | What it is |
|---|---|
| [`property_id`](/docs/rest/properties/get-property-by-id-v1) | The property: one record in the graph. |
| [`listings`](/docs/rest/properties/get-property-by-id-v1) | The listings merged into the property, each with its source, agency, price and dates. |
| [`primary_listing_id`](/docs/rest/properties/search-properties-v2) | The listing chosen to represent the property. |
| [`sale_price_history`, `rent_price_history`](/docs/rest/properties/get-property-by-id-v1) | Every price change, with the old price, the new one and the dates. |
| [`sale_active_listings_count`, `rent_active_listings_count`](/docs/comparables-valuation/get-comparables) | How many live listings the property has right now, for sale and for rent. |
| [`average_listings_per_property`](/docs/comparables-valuation/get-comparables) | In comparables statistics: how many listings, on average, each comparable property merges. |
| [`POST /api/v1/properties/match-by-listings`](/docs/rest/properties/get-property-by-listing-ids-v1) | Send listing ids, get back the property each one belongs to. |
| [Alert subtypes `new`, `price_up`, `price_down`, `reserved`, `delisted`, `sold`](/docs/rest/alerts/search-alerts-v1) | The history as it happens, delivered to a feed or a webhook. |

## Questions about this

- [What is Casafari MCP?](/docs/faq/what-is-casafari-mcp)
- [What is Casafari?](/docs/faq/what-is-casafari)
- [Can I build a market report with Casafari MCP?](/docs/faq/example-market-report)
- [How do I look up one property and its price history?](/docs/faq/example-property-lookup)
- [What is the Casafari property graph, and where does the data come from?](/docs/faq/what-is-the-property-graph)
