# `area-insights_count_sales_by_type`

> **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).

Number of registered sales by property type. Product: [Area Insights](/docs/area-insights). Annotations: Read-only.

Call it as `area-insights_count_sales_by_type` 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 Number of registered sales by property type do?

How many registered sales an area of Spain, France, Italy or Poland had (Portugal has no sales counts), by property type: what kind of properties actually sell there. empty_type_count counts sales whose property type the source does not give. Give country and location_boundary; sold_at_range and the other filters narrow the sales counted. Sale prices, not asking prices: for asking prices use the other Area Insights tools.

## Which parameters does area-insights_count_sales_by_type 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, optional): Sale dates, YYYY-MM-DD: {"gte": "2024-01-01"}, an upper bound with lte, or both (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_]*$`.
- `type_groups` (string[], optional): Property type groups, e.g. ["apartment", "house"]. Values: `apartment`, `house`, `room`, `building`, `investment`, `plot`, `other`. 1–7 items.
- `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_count_sales_by_type?

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_count_sales_by_type",
    "arguments": {
      "country": "ES",
      "location_boundary": {
        "location_ids": [
          1
        ]
      }
    }
  }
}
```

## 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)
