# List seller leads

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

`GET https://platform.casafari.com/v1/seller-leads`

[High Potential Seller Leads](/docs/seller-leads) · [REST API](/docs/rest/seller-leads). Send `Authorization: Bearer $CASAFARI_API_KEY`: a platform API key or OAuth access token; see [platform sign-in](/docs/rest#platform-api-keys). Costs 100 units per page (1 unit = EUR 0.04).

Over MCP: none; this product is REST only.

## Description

Homes around a point whose asking price was cut repeatedly: at least `min_price_cuts` cuts (default 1) adding up to at least `min_price_cut_pct` percent (default 5), over the home's whole time on the market or, with `since`, from that date. Search within `radius_m` (50 to 300 m) of `lat`/`lon`, in ES, FR, IT, DE, GR or AD. Each lead carries a `lead_` id, the property's `prop_` id (readable with Property Sourcing), its coordinates and its price cuts. For the next page, send only `cursor` (and `page_size`). 100 units per page.

## Query parameters

- `lat` (number, required): Latitude of the point to search around, -90 to 90.
- `lon` (number, required): Longitude of the point to search around, -180 to 180.
- `radius_m` (integer, optional): Radius in metres, a whole number from 50 to 300. 50–300; default 300.
- `country` (string, optional): ISO 3166-1 alpha-2 code of the point's country: ES, FR, IT, DE, GR or AD. Needed unless the account covers one country only.
- `operation` (string, optional): `sale` or `rent`. Values: `sale`, `rent`. default "sale".
- `min_price_cuts` (integer, optional): Fewest price cuts, a whole number from 1. 1–100; default 1.
- `min_price_cut_pct` (number, optional): Smallest total cut in percent, 0.1 to 100. 0.1–100; default 5.
- `since` (string (date), optional): A date (YYYY-MM-DD): also count the cuts since then, reported in `price_cuts_since`.
- `types` (string, optional): Comma-separated property type names, e.g. `apartment,house`.
- `price_min` (integer, optional): Lowest asking price, a whole number above 0. ≥ 1.
- `price_max` (integer, optional): Highest asking price, a whole number above 0. ≥ 1.
- `page_size` (integer, optional): Leads per page, up to 100 (25 on Free). 1–100; default 25.
- `cursor` (string, optional): The cursor from a previous page's `next`; send it with `page_size` only.

## Example request

Placeholders only: replace the token and the values with your own.

```bash
curl "https://platform.casafari.com/v1/seller-leads?lat=40.4168&lon=-3.7038" \
  -H "Authorization: Bearer $CASAFARI_API_KEY"
```

## Responses

### 200 One page of leads.

Type: `object`.

- `results` (object[], optional)
  - `id` (string, optional): Opaque lead id, `lead_...`.
  - `property_id` (string, optional): The property's `prop_` id, readable with GET /v1/property-sourcing/properties/{property_id}.
  - `coordinates` (object, optional, nullable)
    - `lat` (number, optional)
    - `lon` (number, optional)
  - `price_cuts` (object, optional, nullable): Price cuts over the home's whole time on the market.
    - `count` (number, optional, nullable): Number of price cuts.
    - `percentage` (number, optional, nullable): Total cut, in percent.
  - `price_cuts_since` (object, optional, nullable): Price cuts since the `since` date; null without it.
    - `count` (number, optional, nullable): Number of price cuts.
    - `percentage` (number, optional, nullable): Total cut, in percent.
- `total` (integer, optional): How many leads the area has.
- `next` (string, optional, nullable): URL of the next page (valid one hour), or null.

Example with sample values (ids and figures are illustrative):

```json
{
  "results": [
    {
      "id": "lead_5Tn3wK8pR2yH6mQ1vX9cBe",
      "property_id": "prop_9Rk4tW2nP7xM3cL6vB1qZs",
      "coordinates": {
        "lat": 40.4172,
        "lon": -3.7051
      },
      "price_cuts": {
        "count": 3,
        "percentage": 12.5
      },
      "price_cuts_since": null
    }
  ],
  "total": 14,
  "next": "https://platform.casafari.com/v1/seller-leads?cursor=cur_SAMPLE"
}
```

### 400 Invalid parameter (`invalid_request`, naming each one), or the search reached its depth limit (`page_depth_exceeded`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 401 Missing or unknown API key or token.

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 402 No units left to fund the call (`payment_required`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 403 The account is not entitled to this product or country (`not_entitled`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 404 Unknown, expired or another account's cursor (`not_found`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

### 429 A request limit of the plan was reached (`request_limit_reached`).

Type: `object`.

- `type` (string, optional): The problem's documentation URL.
- `title` (string, optional)
- `status` (integer, optional)
- `detail` (string, optional): What happened and how to fix it.
- `instance` (string, optional)
- `code` (string, optional): e.g. invalid_request, payment_required, not_entitled, not_found, page_depth_exceeded, request_limit_reached.
- `request_id` (string, optional)
- `errors` (object[], optional): One entry per field to fix.
  - `field` (string, optional)
  - `message` (string, optional)

## Related pages

- [Get a seller lead (GET /v1/seller-leads/{lead_id})](/docs/rest/seller-leads/get-a-seller-lead)
- [High Potential Seller Leads REST API: all operations](/docs/rest/seller-leads)
- [How to get a bearer token for the Casafari REST API](/docs/rest)
- [MCP vs REST API compared](/docs/parity)
