# Zoopla MCP tools

> Every Zoopla MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/zoopla

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

12 tools for Zoopla on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own ZooplaPro agent account (listing changes work for manual uploaders, not for listings sent by a property software feed)
- Integration page: https://cotlet.dev/integrations/zoopla-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `zoopla_list_listings` | read | Your listings in one department, with address, price, site status, listing status and upload method. |
| `zoopla_get_listing` | read | Full listing: address, price, property details, description, features, photos, utilities, EPC and floorplans. |
| `zoopla_get_listing_performance` | read | Listing performance report: daily page views, price changes, Featured Properties upgrades, similar listings benchmark and a shareable link for the vendor or landlord. |
| `zoopla_get_performance_overview` | read | Listings live per department, email and phone lead counts, and Premium Listings in use for a date range. |
| `zoopla_list_leads` | read | Leads from the Leads report: email enquiries with message and listing, phone calls with time, caller number and result. |
| `zoopla_get_featured_properties_report` | read | How each of your Featured Properties is performing on Zoopla, listing by listing. |
| `zoopla_get_upgrade_credits` | read | Premium Listings and Weekly Featured Property credits left, their expiry, and which listings use them. |
| `zoopla_create_listing` | write | New listing in a department, saved as Private so it is not on Zoopla until you publish it. Manual uploaders only. |
| `zoopla_update_listing` | write | Change price, description, features, photos, video or floorplan links. Normally live on Zoopla within the hour. Manual uploaders only. |
| `zoopla_set_listing_status` | write | Publish, hide or delete a listing, or mark it under offer, sold, let agreed or let. Manual uploaders only. |
| `zoopla_upgrade_to_premium` | write | Make a listing Premium for 12 months, using one credit, with 2 highlights. Needs 3 photos and a 200 character description. |
| `zoopla_feature_listing` | write | Upgrade a listing to Weekly Featured Property, using one credit. |

## List listings

MCP tool: `zoopla_list_listings`

Access: read.

Lists the listings of one department as ZooplaPro shows them. Each item has the upload method (manual or feed), which tells you whether the write tools can change it. Pages hold up to 100 listings; pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `department` | enum | yes | residential_sales, residential_lettings, commercial_sales, commercial_lettings or overseas. |
| `site_status` | enum | no | public, private or all. Default: public. |
| `limit` | integer | no | 1 to 100. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_list_listings",
    "arguments": {
      "department": "residential_sales"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listings": [
      {
        "listing_id": "67251984",
        "address": "14 Elm Road, Bristol BS7 8AB",
        "price": 375000,
        "site_status": "public",
        "listing_status": "for_sale",
        "upload_method": "manual",
        "premium": false
      },
      {
        "listing_id": "67251990",
        "address": "22 Park Street, Bath BA1 2EX",
        "price": 350000,
        "site_status": "public",
        "listing_status": "for_sale",
        "upload_method": "manual",
        "premium": true
      },
      {
        "listing_id": "67252011",
        "address": "3 Mill Lane, Bristol BS6 5JD",
        "price": 325000,
        "site_status": "public",
        "listing_status": "for_sale",
        "upload_method": "manual",
        "premium": false
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Get listing

MCP tool: `zoopla_get_listing`

Access: read.

Returns one listing with the fields you see when you edit it in ZooplaPro. Use it before update_listing so your agent changes only what you asked for.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `listing_id` | string | yes | Listing ID from list_listings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_get_listing",
    "arguments": {
      "listing_id": "listing_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67251984",
    "department": "residential_sales",
    "address": "14 Elm Road, Bristol BS7 8AB",
    "price": 375000,
    "site_status": "public",
    "listing_status": "for_sale",
    "upload_method": "manual",
    "details": {
      "bedrooms": 3,
      "bathrooms": 1,
      "receptions": 2,
      "property_type": "terraced",
      "tenure": "freehold"
    },
    "full_description": "A bright three bedroom terraced house close to the park, with a south facing garden and off street parking.",
    "features": [
      "South facing garden",
      "Off street parking"
    ],
    "photo_urls": [
      "https://example.com/photos/elm-road-1.jpg",
      "https://example.com/photos/elm-road-2.jpg",
      "https://example.com/photos/elm-road-3.jpg"
    ],
    "floorplan_urls": []
  },
  "isError": false
}
```

## Get listing performance

MCP tool: `zoopla_get_listing_performance`

Access: read.

Returns the listing performance report you generate from the ZooplaPro Dashboard for one property. Daily page views run oldest first, and the same chart marks price changes and Featured Properties upgrades. The share link gives the vendor or landlord a live snapshot that Zoopla updates daily. The tool only reads and sends nothing to the vendor.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `listing_id` | string | yes | Listing ID from list_listings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_get_listing_performance",
    "arguments": {
      "listing_id": "67252011"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67252011",
    "address": "3 Mill Lane, Bristol BS6 5JD",
    "from": "2026-10-05",
    "to": "2026-10-11",
    "page_views": {
      "total": 321,
      "daily": [
        41,
        38,
        52,
        47,
        60,
        44,
        39
      ]
    },
    "price_changes": [],
    "featured_upgrades": [],
    "similar_listings": {
      "average_page_views": 388
    },
    "share_url": "https://www.zoopla.co.uk/pro/example-report/3f9c2a"
  },
  "isError": false
}
```

## Get performance overview

MCP tool: `zoopla_get_performance_overview`

Access: read.

Returns the headline numbers of the ZooplaPro Dashboard for a date range: listings live per department, lead counts by type and the number of Premium Listings in use. Use list_leads for the individual leads behind the counts.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | no | Start of the date range. Default: 7 days ago. |
| `to` | date | no | End of the date range. Default: today. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_get_performance_overview",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "from": "2026-10-05",
    "to": "2026-10-11",
    "listings_live": {
      "residential_sales": 18,
      "residential_lettings": 11
    },
    "leads": {
      "sales_email": 24,
      "lettings_email": 19,
      "valuation_email": 6,
      "phone": 11,
      "total": 60
    },
    "premium_listings_in_use": 4
  },
  "isError": false
}
```

## List leads

MCP tool: `zoopla_list_leads`

Access: read.

Returns the leads of the ZooplaPro Leads report for a date range, newest first. Email leads have the enquirer's message and the listing; phone leads have the call time, the caller's number and whether it was answered or missed. Totals count all leads in the range, not only this page. Set listing_id to see one property.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `type` | enum | no | for_sale_email, to_rent_email, valuation_email, phone or all. Default: all. |
| `listing_id` | string | no | Only leads for this listing. |
| `from` | date | no | Start of the date range. Default: 7 days ago. |
| `to` | date | no | End of the date range. Default: today. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_list_leads",
    "arguments": {
      "type": "phone",
      "from": "2026-10-05",
      "to": "2026-10-11"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "from": "2026-10-05",
    "to": "2026-10-11",
    "totals": {
      "sales_email": 24,
      "lettings_email": 19,
      "valuation_email": 6,
      "phone": 11,
      "total": 60
    },
    "leads": [
      {
        "lead_id": "l_90c1",
        "type": "sales_email",
        "received_at": "2026-10-10T16:42:00+01:00",
        "listing_id": "67251984",
        "address": "14 Elm Road, Bristol BS7 8AB",
        "name": "Sam",
        "message": "Is the garden south facing, and can we view on Saturday?"
      },
      {
        "lead_id": "l_90b7",
        "type": "phone",
        "received_at": "2026-10-10T11:05:00+01:00",
        "listing_id": "67251990",
        "address": "22 Park Street, Bath BA1 2EX",
        "caller_number": "07700 900123",
        "result": "answered"
      }
    ],
    "next_cursor": "eyJvZmZzZXQiOjIwfQ"
  },
  "isError": false
}
```

## Get Featured Properties report

MCP tool: `zoopla_get_featured_properties_report`

Access: read.

Returns the Featured Property report of ZooplaPro for a date range, one row per Featured listing. It is available when your package includes Featured Property. Use get_listing_performance for the full report of a single property.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | no | Start of the date range. Default: 7 days ago. |
| `to` | date | no | End of the date range. Default: today. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_get_featured_properties_report",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "from": "2026-10-05",
    "to": "2026-10-11",
    "listings": [
      {
        "listing_id": "67251990",
        "address": "22 Park Street, Bath BA1 2EX",
        "featured_from": "2026-10-06",
        "featured_until": "2026-10-13",
        "page_views": 412
      }
    ]
  },
  "isError": false
}
```

## Get upgrade credits

MCP tool: `zoopla_get_upgrade_credits`

Access: read.

Returns the upgrade credits of your account and the listings that use them. Check it before upgrade_to_premium or feature_listing, because each upgrade uses one credit.

### Parameters

No parameters.

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_get_upgrade_credits",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "premium_listings": {
      "credits_left": 3,
      "used_by": [
        "67251990"
      ]
    },
    "weekly_featured": {
      "credits_left": 2,
      "used_by": []
    }
  },
  "isError": false
}
```

## Create listing

MCP tool: `zoopla_create_listing`

Access: write.

Creates a listing and saves it as Private, so it is not on Zoopla and reaches no one. Publish it with set_listing_status, which asks for your OK. Because nothing goes public and set_listing_status can delete it, create_listing runs without asking first. Use copy_from_listing_id to start from an existing or deleted listing, like Create similar in ZooplaPro.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `department` | enum | yes | residential_sales, residential_lettings, commercial_sales, commercial_lettings or overseas. |
| `address` | object | yes | Street, town and postcode. |
| `price` | integer | yes | Sale price or rent in pounds, numbers only. |
| `details` | object | yes | Bedrooms, bathrooms, receptions, property type, tenure, council tax band and other required fields. |
| `full_description` | string | yes | Full description shown on the listing. |
| `photo_urls` | string[] | no | Photos in display order. |
| `copy_from_listing_id` | string | no | Start from an existing or deleted listing, like Create similar. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_create_listing",
    "arguments": {
      "department": "residential_sales",
      "address": "address",
      "price": 1,
      "details": "details",
      "full_description": "full description"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67252040",
    "department": "residential_sales",
    "address": "9 Orchard Close, Bristol BS9 3QE",
    "price": 410000,
    "site_status": "private",
    "listing_status": "for_sale"
  },
  "isError": false
}
```

## Update listing

MCP tool: `zoopla_update_listing`

Access: write. Confirm: waits for the user's OK before it runs.

Changes the fields you pass on one listing and leaves the others as they are. Edits on a public listing normally go live on Zoopla within 1 hour, and a price change appears as a mark in the listing performance chart. Listings sent by a property software feed cannot be changed here. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `listing_id` | string | yes | Listing ID from list_listings. |
| `fields` | object | yes | Any of price, price_modifier, full_description, features, photo_urls, video_urls, floorplan_urls. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_update_listing",
    "arguments": {
      "listing_id": "listing_8c41d2",
      "fields": "fields"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67251990",
    "address": "22 Park Street, Bath BA1 2EX",
    "price_before": 350000,
    "price": 340000,
    "live_on_zoopla": "within 1 hour"
  },
  "isError": false
}
```

## Set listing status

MCP tool: `zoopla_set_listing_status`

Access: write. Confirm: waits for the user's OK before it runs.

Changes the site status or the listing status of one listing, or both. Listing status shows the buyer or tenant what stage the property is at. Changes normally go live on Zoopla within 1 hour. Listings sent by a property software feed cannot be changed here. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `listing_id` | string | yes | Listing ID from list_listings. |
| `site_status` | enum | no | public, private or deleted. |
| `listing_status` | enum | no | for_sale, sale_under_offer, sold, to_rent, let_agreed or let. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_set_listing_status",
    "arguments": {
      "listing_id": "67251984",
      "listing_status": "sale_under_offer"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67251984",
    "department": "residential_sales",
    "address": "14 Elm Road, Bristol BS7 8AB",
    "site_status": "public",
    "listing_status": "sale_under_offer",
    "live_on_zoopla": "within 1 hour",
    "url": "https://www.zoopla.co.uk/for-sale/details/67251984/"
  },
  "isError": false
}
```

## Upgrade to Premium Listing

MCP tool: `zoopla_upgrade_to_premium`

Access: write. Confirm: waits for the user's OK before it runs.

Upgrades one listing to Premium, which lasts 12 months or until the listing is removed. It uses one Premium Listings credit and fails if the listing has fewer than 3 photos or a full description under 200 characters. Pick the 2 highlights from the Premium Listings highlights chart. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `listing_id` | string | yes | Listing ID from list_listings. |
| `highlight_ids` | string[] | no | Up to 2 highlights from the Premium Listings highlights chart. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_upgrade_to_premium",
    "arguments": {
      "listing_id": "67252040",
      "highlight_ids": [
        "garden",
        "garage"
      ]
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67251984",
    "premium": true,
    "premium_until": "2027-10-11",
    "highlights": [
      "garden",
      "parking"
    ],
    "credits_left": 2
  },
  "isError": false
}
```

## Feature listing for a week

MCP tool: `zoopla_feature_listing`

Access: write. Confirm: waits for the user's OK before it runs.

Upgrades one listing to Weekly Featured Property for a week and uses one Weekly Featured Property credit. It works when your package includes Featured Property. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `listing_id` | string | yes | Listing ID from list_listings. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zoopla_feature_listing",
    "arguments": {
      "listing_id": "listing_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "listing_id": "67252011",
    "featured_from": "2026-10-12",
    "featured_until": "2026-10-19",
    "credits_left": 1
  },
  "isError": false
}
```
