# Rightmove Estate Agents Scraper (`keklik/rightmove-agents-scraper`) Actor

Rightmove agents scraper: export UK estate and letting agent branches by town, county or postcode, with phone numbers, address, services and optional live stock counts.

- **URL**: https://apify.com/keklik/rightmove-agents-scraper.md
- **Developed by:** [Keklik Technologies](https://apify.com/keklik) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 agent branches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Rightmove Estate Agents Scraper

This **Rightmove scraper** exports **UK estate and letting agent branches** from [Rightmove](https://www.rightmove.co.uk), the UK's largest property portal. Type a town, county or postcode district and get every agent branch there as clean data: **name, phone numbers, address, postcode, services, logo** and, if you want it, the full branch profile with **live stock counts, coordinates and registered company name**. To try it, enter `Manchester` in **Locations** and press **Start**. **No Rightmove account, login or cookies needed.**

### 🔎 What data can you extract from Rightmove?

Every agent branch comes back as one row with these fields:

| Group | Fields |
|---|---|
| Branch | Branch ID, display name ("Abatoria, Wapping"), brand, branch name, Rightmove page link, logo, short summary |
| Contact | Direct phone line, sales phone, lettings phone, full address, postcode, link to the branch's Rightmove enquiry form |
| Classification | Does sales (yes/no), does lettings (yes/no), company type, company ID, brand ID |
| Search | The location you searched that returned the branch |

Turn on **Fetch full branch details** to add a `details` block to every branch:

| Detail | What it tells you |
|---|---|
| Company name and trading name | The registered company behind the branch |
| Latitude and longitude | Where the branch is, ready for a map |
| Services | Sales, lettings, commercial, build to rent, overseas and new homes |
| For sale and to let | How many properties the branch lists right now, with a link to those listings |
| Recently sold and recently let | Recent deals: address, price, status, bedrooms, bathrooms and property type |
| Descriptions | The branch's full description, plus its separate sales and lettings descriptions |
| Affiliations | Industry bodies the branch belongs to, such as NAEA and ARLA |
| Testimonials and network | Number of customer testimonials and of other branches in the same network |

### 🎯 Use cases

- **B2B lead generation.** Build prospect lists of estate and letting agents to sell to: PropTech and CRM vendors, property photographers, EPC assessors, conveyancers, surveyors, mortgage brokers and marketing agencies. Every branch comes with phone numbers, address and postcode.
- **Market mapping and competitor analysis.** See who operates where. Map every branch in a town, county or postcode district, compare independents with corporate chains, and spot areas with few agents.
- **Ranking agents by activity.** With full details on, see how many properties each branch has for sale and to let right now, plus its recent sold and let deals, and sort the busiest branches to the top.
- **Agent directories.** Feed a directory, comparison site or CRM with UK agents, their logos, addresses, services and affiliations.
- **Account-based outreach.** Find every branch of one agent group, for example a national brand, in the areas you cover.

### 🧭 How to scrape Rightmove estate agents

1. Open **Rightmove Estate Agents Scraper** in Apify Console and go to the **Input** tab.
2. Add one or more places to **Locations**, such as `Manchester`, `Surrey` or `SW11`. Or paste a "Find an agent" search URL or an agent branch page from rightmove.co.uk into **Rightmove estate agent URLs**.
3. Pick a **Search radius** and an **Agent type** if you only want sales or lettings agents. Add an **Agent name filter** such as `Foxtons` to get one brand's branches.
4. Tick **Fetch full branch details** if you want stock counts, coordinates and the rest of the branch profile.
5. Set **Max results** to cap the run, or leave it empty to collect every branch.
6. Press **Start**. When the run finishes, open the **Output** tab and export the data as JSON, CSV or Excel, or fetch it with the Apify API.

### ⚙️ Input

You need at least one location or one Rightmove URL.

| Field in the form | What it does |
|---|---|
| **Locations** | Towns, cities, counties or postcode districts, such as `Manchester`, `Surrey` or `SW11`. Each one is matched to the closest Rightmove location. |
| **Rightmove estate agent URLs** | "Find an agent" search URLs copied from rightmove.co.uk, or single agent branch pages. Use them instead of, or as well as, Locations. |
| **Search radius** | How far around each location to look: this area only (default), or ¼, ½, 1, 3, 5, 10, 15, 20, 30 or 40 miles. Applies to Locations only. |
| **Agent type** | All agents (default), sales agents only, or lettings agents only. |
| **Agent name filter** | Only return branches of agents whose name matches, such as `Foxtons`. Applies to Locations only. |
| **Fetch full branch details** | Adds the full branch profile to every branch. Takes longer and is billed as an add-on per branch. Off by default. |
| **Max results** | Stop after this many unique branches in total. Empty means every branch found. |
| **Proxy configuration** | The default setting works for most runs. You can also use your own proxies. |

Lettings agents within 5 miles of two places, with full details, capped at 200 branches:

```json
{
    "locations": ["SW11", "Leeds"],
    "radius": "5",
    "agentType": "LETTINGS",
    "fetchBranchDetails": true,
    "maxResults": 200
}
```

All Foxtons branches in London:

```json
{
    "locations": ["London"],
    "brandName": "Foxtons"
}
```

One branch from its Rightmove page:

```json
{
    "startUrls": [
        { "url": "https://www.rightmove.co.uk/estate-agents/agent/Abatoria/Wapping-33248.html" }
    ],
    "fetchBranchDetails": true
}
```

### 📦 Output

One row per agent branch. Here is a real result with **Fetch full branch details** on, shortened for reading (the descriptions and the recently sold and let lists come back in full):

```json
{
  "id": 33248,
  "name": "Abatoria, Wapping",
  "brand": "Abatoria",
  "branch": "Wapping",
  "url": "https://www.rightmove.co.uk/estate-agents/agent/Abatoria/Wapping-33248.html",
  "phone": "020 7488 2020",
  "sales_phone": "020 3873 1685",
  "lettings_phone": "020 3873 1495",
  "address": "121, Wapping High Street, London, E1W 2NX",
  "postcode": "E1W 2NX",
  "sales": true,
  "lettings": true,
  "company_type": "iea",
  "company_id": 12776,
  "brand_id": 16220,
  "logo": "https://media.rightmove.co.uk/partner-logo/7304-LOGO-1765962762.png",
  "summary": "We specialize in selling and letting prime residential properties in Wapping, St Katherines Dock, Limehouse and Canary Wharf. ...",
  "contact_url": "https://www.rightmove.co.uk/estate-agents/contactBranch.html?branchId=33248",
  "search_location": "Wapping",
  "details": {
    "company_name": "Abatoria Limited",
    "trading_name": "Abatoria",
    "postcode": "E1W 2NX",
    "latitude": 51.50444444977448,
    "longitude": -0.0567209030739665,
    "services": {
      "sales": true,
      "lettings": true,
      "commercial": false,
      "build_to_rent": false,
      "overseas": false,
      "new_homes": false
    },
    "for_sale": {
      "count": 45,
      "url": "https://www.rightmove.co.uk/property-for-sale/find/Abatoria/Wapping.html?locationIdentifier=BRANCH%5E33248&includeSSTC=true&_includeSSTC=on"
    },
    "to_let": {
      "count": 22,
      "url": "https://www.rightmove.co.uk/property-to-rent/find/Abatoria/Wapping.html?locationIdentifier=BRANCH%5E33248&propertyStatus=all&includeLetAgreed=true&_includeLetAgreed=on"
    },
    "recently_sold": [
      {
        "id": 172549703,
        "address": "Copperfield Road, London, E3",
        "price": "£585,000",
        "status": "UNDER OFFER",
        "bedrooms": 2,
        "bathrooms": 2,
        "type": "Apartment"
      }
    ],
    "recently_let": [
      {
        "id": 93807912,
        "address": "8 Dereham Place,  Shoreditch, EC2A",
        "price": "£762 pw",
        "status": "UNDER OFFER",
        "bedrooms": 2,
        "bathrooms": 2,
        "type": "Apartment"
      }
    ],
    "description": "We specialize in selling and letting prime residential properties in Wapping, St Katherines Dock, Limehouse and Canary Wharf. ...",
    "affiliations": [
      "National Association of Estate Agents",
      "Association of Residential Letting Agents"
    ],
    "testimonials": 0,
    "network_branches": 0
  }
}
```

Without full details the row is the same minus the `details` block. Good to know about the data:

- **One row per branch.** A branch is returned once, even if it shows up in several of your locations. A branch that does both sales and lettings is a single row with both phone numbers.
- **`phone` vs `sales_phone` and `lettings_phone`.** `phone` is the branch's own direct line. The sales and lettings numbers are the ones Rightmove shows for each service, and they can differ.
- **Company types.** `iea` is an independent estate agent, `ila` an independent letting agent, `corporate` a chain or corporate agent, `commercial` a commercial property agent and `buildtorent` a build-to-rent operator. A few branches carry other Rightmove codes, such as `overseas`.
- **Pasted branch pages** have an empty `search_location` and `brand_id`.

Results export to **JSON, CSV, Excel, XML and HTML**. In CSV and Excel the nested fields become columns such as `details.for_sale.count` and `details.services.new_homes`.

### 💷 How much does it cost to scrape Rightmove?

The scraper uses pay-per-event pricing, so you only pay for the branches you get:

- **$0.75 per 1,000 agent branches** on the Apify Free plan.&#x20;
- Bronze, Silver and Gold Apify plans pay less: $0.70, $0.60 and $0.50 per 1,000 branches.&#x20;
- **Fetch full branch details** is an add-on: $0.75 per 1,000 branches on the Free plan, and $0.70, $0.60 and $0.50 on Bronze, Silver and Gold.&#x20;
- The add-on is only charged for branches whose full profile was actually added.

For example, London has around 3,600 agent branches. On the Bronze plan, all of them cost about $2.50, or about $5 with full details.  Use **Max results** to cap what a run can spend.

Runs on the Apify Free plan stop at **100 agent branches per run**. Any paid Apify plan removes that limit.

### 🔌 Integrations and API

Everything the scraper does is available through the [Apify API](https://docs.apify.com/api/v2), so you can run it from your own code or a pipeline. Get your API token from **Apify Console → Settings → API & Integrations**.

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("kekliktech/rightmove-agents-scraper").call(run_input={
    "locations": ["Manchester"],
    "agentType": "LETTINGS",
    "maxResults": 100,
})

for agent in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(agent["name"], agent["phone"], agent["postcode"])
```

Node.js (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('kekliktech/rightmove-agents-scraper').call({
    locations: ['Manchester'],
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

More ways to use the data:

- **Schedules.** Refresh your agent list every week or month with [Apify Schedules](https://docs.apify.com/platform/schedules).
- **Webhooks.** Get notified, or trigger your own system, when a run finishes, from the **Integrations** tab.
- **Make, Zapier and Google Sheets.** Send new branches straight to a spreadsheet or CRM with Apify's ready-made integrations.
- **AI agents.** Let Claude, ChatGPT or any MCP client run this scraper through the [Apify MCP server](https://mcp.apify.com).

### ❓ FAQ

#### Is it legal to scrape Rightmove?

The scraper only collects information that Rightmove shows publicly to every visitor: business listings of estate and letting agents. Branch phone numbers and addresses are business contact details, but some agents are sole traders, so the data can still count as personal data. If you store or contact agents in the UK or EU, follow UK GDPR and PECR, have a legitimate reason, and offer an opt-out. Check with a lawyer if you are unsure.

#### Do I need a Rightmove account?

No. The scraper needs no Rightmove account, login or cookies.

#### Can I get agent email addresses or websites?

No. Rightmove does not publish agent email addresses or websites, so they are not in the data. To reach a branch, use its phone numbers or its `contact_url`, which opens the branch's enquiry form on Rightmove.

#### How do I get every agent in a city or county?

Enter it in **Locations**, for example `Surrey` or `London`, and leave **Max results** empty. To widen the area around a town or postcode, set **Search radius**.

#### How do I find only lettings agents, or all branches of one brand?

Set **Agent type** to lettings agents only (or sales agents only). For one brand, put its name in **Agent name filter**, for example `Foxtons`, and add the area in **Locations**.

#### Why did some inputs fail?

- **A location returned nothing.** Each location is matched to the closest Rightmove location. If no match is found, it is skipped and the run log says so. Try a town, city, county or postcode district instead, or run the search on rightmove.co.uk and paste its URL. Check `search_location` and `address` on your first run to confirm you got the area you meant.
- **The run stopped straight away.** Every pasted URL must be a Rightmove estate agents page. If one isn't, the run stops and its status message names the URL.
- **The run failed with no results.** None of your locations or URLs could be loaded. The status message explains why. For URLs, copy the address straight from your browser after running the search on rightmove.co.uk.
- **A branch has no `details`.** Its full profile could not be loaded, so the branch is returned without it and the add-on is not charged.

#### Why is a phone number empty?

Rightmove doesn't show every number for every branch. A branch that only does sales normally has no lettings phone.

#### Do the filters apply to pasted URLs?

**Search radius** and **Agent name filter** only apply to Locations, because a pasted search URL keeps its own settings. **Agent type** applies to search results from both, but a pasted single branch page is always returned.

### 🔗 Related scrapers

- [Rightmove Property Scraper](https://apify.com/kekliktech/rightmove-scraper): the property listings themselves, to see what each agent has on the market.
- [Zillow Property Listings Scraper](https://apify.com/kekliktech/zillow-property-listings-scraper): the same kind of property data for the US market.
- [Instagram Profile Scraper](https://apify.com/kekliktech/instagram-profile-scraper): check the Instagram presence of the agencies on your list.

### 💬 Support

Found a bug, or need a field that isn't here? Open an issue in the **Issues** tab and we'll get back to you. You can also reach us by email at <support@kekliktech.com> or on [WhatsApp](https://wa.me/447916692476).

Need data from another property site, or a scraper built for your workflow? We build custom scrapers on request.

# Actor input Schema

## `locations` (type: `array`):

Towns, cities, counties or postcode districts to find agents in, such as "Manchester", "Surrey" or "SW11". Each one is matched to the closest Rightmove location. Add at least one location or one URL below.

## `startUrls` (type: `array`):

Optional. Paste "Find an agent" search URLs copied from rightmove.co.uk, or single agent branch pages. Use them instead of, or as well as, Locations.

## `radius` (type: `string`):

How far around each location to look. Applies to Locations only, because pasted search URLs keep their own radius.

## `agentType` (type: `string`):

Keep every branch, or only those that handle sales or lettings. A pasted single branch page is always returned.

## `brandName` (type: `string`):

Optional. Only return branches of agents whose name matches, such as "Foxtons". Applies to Locations only.

## `fetchBranchDetails` (type: `boolean`):

Add the full branch profile to every branch: registered company name, coordinates, number of properties for sale and to let right now, recently sold and let properties, full descriptions and industry affiliations. Takes longer and is billed as an add-on per branch.

## `maxResults` (type: `integer`):

Stop after this many unique agent branches in total. Leave empty to collect every branch found. Runs on the Apify Free plan stop at 100 branches.

## `proxyConfiguration` (type: `object`):

Proxies to route requests through. The default setting works for most runs. You can also use your own proxy URLs.

## Actor input object example

```json
{
  "locations": [
    "Manchester"
  ],
  "radius": "0",
  "agentType": "ALL",
  "fetchBranchDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `agents` (type: `string`):

Every agent branch found, with phone numbers, address, postcode, services and, if switched on, the full branch details.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "Manchester"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("keklik/rightmove-agents-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": ["Manchester"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("keklik/rightmove-agents-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Manchester"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call keklik/rightmove-agents-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,keklik/rightmove-agents-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xtLdNPquPklanPfzr/builds/y7irvwHjUztcJ8N8Y/openapi.json
