# `area-insights_get_sales_time_series`

> **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. Every property is one record with its full price and market history. [How the property graph is built](/docs/property-graph).

Registered sale price trend in an area. Product: [Area Insights](/docs/area-insights). Annotations: Read-only.

Call it as `area-insights_get_sales_time_series` on the Area Insights MCP server, `https://platform.casafari.com/mcp/area-insights` ([how to connect](/docs/connect)).

Over REST: no operation in the public API description does this. [MCP and REST compared](/docs/parity#area-insights).

## What does Registered sale price trend in an area do?

How registered sale prices moved in an area of Spain, France, Italy, Poland or Portugal: weekly average sale price and average price per square metre, plus total_properties, the number of registered sales in the period. Give country, location_boundary and sold_at_range with both dates. Every week in the range is returned; a week with no sales has value 0, which means nothing sold that week, not a price of 0. Spain: notary deeds; France: DVF, the public register of property sales; Italy: registered sales via our partner Ring33; Poland: RCN, Poland's official register of property prices. Sale prices, not asking prices: for asking prices use the other Area Insights tools.

## Which parameters does area-insights_get_sales_time_series take?

- `country` (string, required): ES (Spain), FR (France), IT (Italy), PL (Poland) or PT (Portugal: INE's official median per m² by municipality and quarter; area as location_ids, a circle or a polygon, only types and sold_at_range as filters, no counts) or AT (Austria: yearly open-data prices per m² by municipality, district or state; location_ids only; no counts; not available until Casafari names its source). Values: `ES`, `FR`, `IT`, `PL`, `PT`, `AT`.
- `location_boundary` (object, required): The area: exactly one of location_ids (from Location Lookup), circle or polygon.
  - `location_ids` (integer[], optional): Location ids from Location Lookup (locations_search), all in the request's country. 1–100 items; ≥ 1.
  - `circle` (object, optional): A circle: its centre and radius in metres (1 to 50 000).
    - `coordinates` (object, required)
      - `lat` (number, required) -90–90.
      - `lon` (number, required) -180–180.
    - `radius_in_meters` (number, required) 1–50000.
  - `polygon` (object[], optional): A closed polygon: at least 4 points, the last equal to the first. 4–1000 items.
    - `lat` (number, required) -90–90.
    - `lon` (number, required) -180–180.
- `sold_at_range` (object, required): Sale dates, YYYY-MM-DD, both bounds required: {"gte": "2024-01-01", "lte": "2025-12-31"} (or gt / lt).
  - `gte` (string (date), optional) pattern `^\d{4}-\d{2}-\d{2}$`.
  - `gt` (string (date), optional) pattern `^\d{4}-\d{2}-\d{2}$`.
  - `lte` (string (date), optional) pattern `^\d{4}-\d{2}-\d{2}$`.
  - `lt` (string (date), optional) pattern `^\d{4}-\d{2}-\d{2}$`.
- `types` (string[], optional): Property types, lower case, e.g. ["apartment", "penthouse"] or ["house", "villa"]. 1–40 items; at most 40 characters; pattern `^[a-z][a-z_]*$`.
- `conditions` (string[], optional): Spain, Italy and Poland only: property condition, any of used, ruin, very-good, new, other. Values: `used`, `ruin`, `very-good`, `new`, `other`. 1–5 items.
- `with_mortgage` (boolean, optional): Spain only: true for sales financed with a mortgage, false for sales without one.
- `price_range` (object, optional): Registered sale price in euros: {"gte": n, "lte": n} (or gt / lt); at least one bound.
  - `gte` (number, optional) ≥ 0.
  - `gt` (number, optional) ≥ 0.
  - `lte` (number, optional) ≥ 0.
  - `lt` (number, optional) ≥ 0.
- `price_per_sqm_range` (object, optional): Registered sale price per square metre in euros: {"gte": n, "lte": n} (or gt / lt); at least one bound.
  - `gte` (number, optional) ≥ 0.
  - `gt` (number, optional) ≥ 0.
  - `lte` (number, optional) ≥ 0.
  - `lt` (number, optional) ≥ 0.
- `total_area_range` (object, optional): Built area in square metres: {"gte": n, "lte": n} (or gt / lt); at least one bound.
  - `gte` (number, optional) ≥ 0.
  - `gt` (number, optional) ≥ 0.
  - `lte` (number, optional) ≥ 0.
  - `lt` (number, optional) ≥ 0.
- `plot_area_range` (object, optional): France and Poland only: plot area in square metres: {"gte": n, "lte": n} (or gt / lt); at least one bound.
  - `gte` (number, optional) ≥ 0.
  - `gt` (number, optional) ≥ 0.
  - `lte` (number, optional) ≥ 0.
  - `lt` (number, optional) ≥ 0.
- `bedrooms_range` (object, optional): France only: bedrooms: {"gte": n, "lte": n} (or gt / lt); at least one bound.
  - `gte` (integer, optional) ≥ 0.
  - `gt` (integer, optional) ≥ 0.
  - `lte` (integer, optional) ≥ 0.
  - `lt` (integer, optional) ≥ 0.

## How do I call area-insights_get_sales_time_series?

Required arguments only, with placeholder values; see the parameters above for real ones.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "area-insights_get_sales_time_series",
    "arguments": {
      "country": "ES",
      "location_boundary": {
        "location_ids": [
          1
        ]
      },
      "sold_at_range": {
        "gte": "2025-01-01"
      }
    }
  }
}
```

## Related pages

- [Get Current Datetime (area-insights_get_current_datetime)](/docs/area-insights/get_current_datetime)
- [Get Time Series Data (area-insights_get_time_series_data)](/docs/area-insights/get_time_series_data)
- [Get Time Series Operations (area-insights_get_time_series_operations)](/docs/area-insights/get_time_series_operations)
- [Get Price Distribution (area-insights_get_price_distribution)](/docs/area-insights/get_price_distribution)
- [Area Insights: all its MCP tools and REST operations](/docs/area-insights)
- [Connect an MCP client](/docs/connect)
- [All Casafari MCP tools](/docs/tools)
