# Rated People Scraper \[$1💰] | Tradespeople | UK Leads (`ahmed_jasarevic/ratedpeople-scraper`) Actor

Build a UK tradespeople database from Rated People. Extract plumbers, electricians, builders, roofers and 200+ trades with ratings, verified review texts, work area and trust badges for lead generation, market research and reputation monitoring.

- **URL**: https://apify.com/ahmed\_jasarevic/ratedpeople-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 companies

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

## Rated People Scraper - UK Tradespeople Database, Trade Leads & Reviews

Extract a clean UK tradespeople database from ratedpeople.com - company name, trade, rating, review count, full review texts, work area and trust badges for plumbers, electricians, builders, roofers and 200+ other trades. Build trade leads and UK home improvement market data that Google Maps cannot give you, at $0.001 per company record.

### Main Use Cases

- **UK trade lead generation** - build targeted B2B lead lists of plumbers, electricians, builders, roofers and other tradespeople for tools, materials, insurance, finance and software suppliers.
- **Tradesmen data for CRM enrichment** - enrich prospect lists with ratings, review volume and service-area coverage from a rated directory.
- **UK home improvement market research** - compare tradesperson density, ratings and review counts across UK towns and trades.
- **Tradesman reputation monitoring** - track a company's rating, review count and recent review texts over time.
- **Tradesperson review analysis** - collect verified homeowner review texts for trust research and lead scoring.

### How It Works

This Actor is a lightweight CheerioCrawler (plain HTTP + HTML parsing, no browser) that reads ratedpeople.com's server-rendered Next.js pages directly. You pick one or more **trades** (and optionally **locations**), the crawler works through listing pages and profile pages, and it returns one structured record per tradesperson in the main dataset plus one row per review in a separate run-scoped **reviews** dataset. Cloudflare protection is handled automatically by the built-in free Jina Reader (no API key required), so no proxy or anti-bot configuration is needed.

### Build UK Tradesmen Lead Databases Without an Official API

Rated People has no public JSON API for this data - the only reliable surface is the site's own server-rendered HTML, which this Actor parses directly. You get structured lead data (company name, trade, town, rating, review count, work area, trust badges, profile URL) on demand instead of buying one-off data lists or paying per-lead subscription charges.

### Collect Tradesperson Reviews for Reputation & Trust Research

With `scrapeReviews` on (default), every review text on a profile is saved to a separate run-scoped **reviews** dataset - one row per review, including reviewer first name, postcode, verified flag and date. Use it to research what customers say about UK tradespeople, spot review patterns, or score leads by review sentiment and volume.

### Explore Every UK Town Automatically

Rated People does not paginate listings: each `/local-{trade}/{region}/{town}` page returns only ~18 traders. With `exploreLocations` on (default), the crawler follows the site's deeper location pages (region -> district -> town) across the whole country until your item limit is reached - so one run can cover far more than a single town page.

### Input

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `trades` | array | No | `["plumbers"]` | Trade slugs in the site's URL format, e.g. `plumbers`, `electricians`, `builders`, `roofers`, `bathroom-fitter`, `carpenters-joiners`, `gas-heating-engineer`, `handyperson`, `painter-and-decorator`, `tilers`, `tree-surgeons` (200+ available). |
| `locations` | array | No | `[]` (nationwide) | UK location paths, e.g. `west-midlands/birmingham`, `greater-manchester/manchester`, `berkshire/reading`. Empty = nationwide listing for each trade. |
| `startUrls` | array | No | `[]` | Paste full listing URLs directly, e.g. `https://www.ratedpeople.com/local-plumbers/west-midlands/birmingham`. Used in addition to trades x locations. |
| `exploreLocations` | boolean | No | `true` | Listings show ~18 traders and are not paginated. On: crawler follows deeper location pages (region -> district -> town) to keep finding new traders until `maxItems`. Off: only the exact locations entered. |
| `fetchFullProfile` | boolean | No | `true` | Visit each profile page for aggregate rating, review count, review texts (-> `reviews` dataset), work area, badges and trades/skills. Off = fast listing-only scrape (name, trade, description, latest review). |
| `scrapeReviews` | boolean | No | `true` | Save each profile's review texts to a separate run-scoped reviews dataset (one row per review). Off = company data only, no review texts. |
| `maxReviewsPerProfile` | integer | No | `10` | Cap on review texts kept per profile (1-50). Only applies when `scrapeReviews` is on. |
| `maxItems` | integer | No | `50` | Maximum number of tradesperson records to return (1-500). Free-plan runs are capped at 10 items. |

### Output

The run produces **two separate datasets**:

#### Main dataset - company records

One record per tradesperson with these fields:

| Field | Description |
| --- | --- |
| `companyName` | Trading name of the tradesperson/company |
| `primaryTrade` | Main trade (e.g. "Bathroom fitter") |
| `town` | Registered town/city from the profile header |
| `profileUrl` | Canonical Rated People profile URL |
| `ratingLabel` | Aggregate rating label ("Excellent", "Very good", "Good", "Average", "Poor") |
| `ratingOutOf5` | Rating label mapped to 0-5 (Excellent=5 ... Poor=1) |
| `reviewCount` | Number of ratings shown on the profile |
| `badges` | Trust signals (e.g. "ID checked", "50+ ratings") |
| `workArea` | Service-area coverage text (e.g. "Covers 8 local areas near Wigan") |
| `trades` / `skills` | All trades and specific skills the profile lists |
| `description` | Company's own description |
| `latestReview` | Most recent homeowner review (from the listing page) |
| `searchTrade` / `searchLocation` | Echo of the search inputs used |
| `scrapedAt` | Run timestamp (ISO 8601) |

#### Reviews dataset - one row per review

A dedicated run-scoped dataset (alias `reviews`, defined in `.actor/actor.json`). Every run gets its own fresh reviews store - find it on the run's Output tab, Storage tab, in the run log, or in the run's key-value store under `reviews-dataset` (`{ datasetId, datasetName, datasetUrl }`).

| Field | Description |
| --- | --- |
| `profileUrl` | Link back to the company record in the main dataset |
| `companyName` | Company the review belongs to |
| `primaryTrade` | Main trade of the reviewed company |
| `town` | Town of the reviewed company |
| `ratingOutOf5` | Company's aggregate rating at scrape time |
| `reviewCount` | Company's review count at scrape time |
| `reviewer` | Reviewer first name |
| `postcode` | Reviewer postcode (if shown) |
| `verified` | Whether the reviewer was marked "Verified" |
| `text` | Full review text |
| `date` | Review date (`datetime` attribute) |
| `scrapedAt` | Run timestamp (ISO 8601) |

You can download each dataset in JSON, HTML, CSV or Excel, or export it to your database.

### Example Input

```json
{
    "trades": ["plumbers", "electricians"],
    "locations": ["west-midlands/birmingham", "greater-manchester/manchester"],
    "fetchFullProfile": true,
    "scrapeReviews": true,
    "maxReviewsPerProfile": 10,
    "maxItems": 100,
    "exploreLocations": true
}
```

### Example Output

Company record (main dataset):

```json
{
    "companyName": "ASF plumbing services",
    "primaryTrade": "Bathroom fitter",
    "town": "Wigan",
    "profileUrl": "https://www.ratedpeople.com/profile/asf-plumbing-services",
    "ratingLabel": "Excellent",
    "ratingOutOf5": 5,
    "reviewCount": 75,
    "badges": ["ID checked", "50+ ratings"],
    "workArea": "Covers 8 local areas near Wigan",
    "trades": ["Bathroom fitter"],
    "skills": ["Bath Resurfacing", "Bathroom Design", "Bathroom Installation"],
    "description": "We are a friendly specialist bathroom company with over 20 years experience...",
    "searchTrade": "plumbers",
    "searchLocation": "",
    "scrapedAt": "2026-09-18T09:00:00.000Z"
}
```

Review row (reviews dataset):

```json
{
    "profileUrl": "https://www.ratedpeople.com/profile/asf-plumbing-services",
    "companyName": "ASF plumbing services",
    "primaryTrade": "Bathroom fitter",
    "town": "Wigan",
    "ratingOutOf5": 5,
    "reviewCount": 75,
    "reviewer": "Dee",
    "postcode": "BL2",
    "verified": true,
    "text": "We are delighted with our new bathroom refurbishment...",
    "date": "2026-07-28",
    "scrapedAt": "2026-09-18T09:00:00.000Z"
}
```

### Integrations & Automation

- **Apify API** - call the Actor from any app or script via `https://api.apify.com/v2/acts/ahmed_jasarevic~ratedpeople-scraper/run-sync-get-dataset-items`.
- **Schedule it** - create a scheduled run in Apify Console for recurring reputation monitoring (daily rating/review-count tracking, weekly lead list refreshes) - scheduled runs keep your UK tradespeople data current without manual restarts.
- **Webhooks** - trigger downstream pipelines (CRM import, Slack/email alerts, database sync) when a run finishes.
- **Export** - JSON, CSV, Excel or direct database export from the dataset.

**Pricing model:** pay-per-event - $0.001 per company record, $0.001 per review text row (only when `scrapeReviews` is on), $0.00005 per actor start. 1,000 company leads (no reviews) = $1.00; 500 leads + 2,400 reviews = $2.90. No external API fees - the Jina Reader's free tier is built in.

### Related Actors

Sibling actors from the same developer, covering the other major UK trades directories:

- [Checkatrade Scraper - UK Trades Leads](https://apify.com/ahmed_jasarevic/checkatrade-scraper) - vetted UK tradespeople data from Checkatrade (rating out of 10, phone, review count).
- [Bark.com Scraper - UK/US Service Providers](https://apify.com/ahmed_jasarevic/bark-sellers-scraper) - service professional profiles and reviews from Bark.com.

Authoritative related actors in the same topic cluster:

- [Checkatrade Scraper - UK Tradespeople, Reviews & Leads](https://apify.com/trev0n/checkatrade-scraper) - the most-used UK tradespeople scraper on Apify.
- [Bark.com Scraper - UK Service Professionals](https://apify.com/jungle_synthesizer/bark-com-service-pros-scraper) - UK and Ireland service professional data.
- [Google Maps Business Extractor](https://apify.com/leadsbrary/google-maps-business-extractor) - the go-to local business lead generator for cross-platform coverage.

### FAQ

#### Why use this actor instead of the official Rated People API?

Rated People does not publish a public JSON API for tradesperson data - the server-rendered HTML is the only reliable surface, and this Actor parses it directly. The official platform itself is a paid-lead marketplace for tradespeople (subscription plus pay-per-lead costs), not a data API - you cannot export structured tradesperson lists from it. This Actor turns the public directory into a structured UK tradespeople database for a flat $0.001 per company record instead.

#### What are the best ways to find a vetted plumber in the UK?

Homeowner-facing options include Rated People, Checkatrade, MyBuilder and Bark (all verify that reviews come from real jobs), plus government-backed scheme registers such as TrustMark, Gas Safe (mandatory for gas work) and WaterSafe. This Actor lets you do the same vetting research at scale: extract aggregate ratings, verified review texts and trust badges for any trade and town in the UK and score traders yourself.

#### How much do plumbers charge in the UK?

2026 UK guides put typical plumber rates at GBP 45-75 per hour nationally (higher in London, around GBP 65-105/hr), day rates around GBP 200-350, and emergency call-outs from roughly GBP 100-150. Rates vary by region and trade - if you are building pricing or market research on a larger scale, a country-wide tradesperson dataset (ratings, review counts, work areas) is a useful layer on top of published rate guides.

#### How can I generate tradesmen leads in the UK?

Home improvement lead generation usually combines a Google Business Profile, review collection, local SEO and paid ads. Trade directories like Rated People charge per lead and share leads between competitors. A structured tradesperson dataset (name, trade, town, rating, review count, work area) is the B2B alternative - it lets suppliers, insurers, software and materials companies build their own outreach lists instead of paying per-lead fees.

#### Are Rated People reviews trustworthy?

Rated People states that only homeowners who found a tradesperson through the site can leave a rating and review, and that tradespeople are vetted and monitored - so reviews are job-based rather than open. The Actor captures the aggregate rating label, review count, verified-review flags and trust badges, and saves the review texts for your own judgement.

#### How does Rated People work for homeowners and tradespeople?

Homeowners post a job for free and receive quotes from local tradespeople; tradespeople pay a subscription plus a small fee per lead to contact homeowners (up to three tradespeople can buy the same lead). Profiles carry ratings, reviews and work galleries. This Actor reads the same public listing and profile pages and returns them as structured data.

#### What are the alternatives to scraping ratedpeople.com?

At the site level: Checkatrade, MyBuilder, Bark, FreeIndex, TrustMark, Which? Trusted Trader, plus newer directories like FindTrade and MyApproved. On Apify, see the [Checkatrade Scraper](https://apify.com/ahmed_jasarevic/checkatrade-scraper) and [Bark.com Scraper](https://apify.com/ahmed_jasarevic/bark-sellers-scraper) for the same quality of data from other UK directory platforms.

### Competitive Positioning

Verified against the two other ratedpeople.com scrapers on the Apify Store (checked 2026-09-19):

| Capability | ScrapersDelight rated-people-scraper | CrawlerBros rated-people-scraper | This actor |
| --- | --- | --- | --- |
| Price per company record | $0.004 | $0.00433 (+ $0.005 per start) | **$0.001, no per-run start fee beyond $0.00005** |
| Full review texts | Not in listing description | Not in listing description | **Yes - separate run-scoped reviews dataset** |
| Anti-bot handling | `proxyConfiguration` (bring your own proxy) | Not specified | **Free Jina Reader built in, no API key, no config** |
| Mandatory input fields | None listed | `mode` required | **None - runs on defaults** |

### SEO Keywords

rated people scraper, rated people api, rated people alternatives, uk tradespeople database, uk tradesmen data, uk trade leads, local plumbers near me, local electricians near me, local builders near me, roofers near me, find local tradesmen, plumbers directory uk, electricians directory uk, builders directory uk, trade lead generation uk, home improvement leads uk, uk home improvement market data, tradesman reviews, rated people review data, reputation monitoring uk trades, vetted tradespeople data, checkatrade alternative, gas safe heating engineer data, painter and decorator data, handyman data

### For AI Agents & LLM Apps

**Purpose:** returns structured UK tradesperson records (main dataset) and, optionally, one row per review text (separate `reviews` dataset) from ratedpeople.com, filtered by trade and UK location.

**Minimal working input:**

```json
{
    "trades": ["plumbers"],
    "maxItems": 10
}
```

**Variant with review texts:**

```json
{
    "trades": ["plumbers", "electricians"],
    "locations": ["west-midlands/birmingham"],
    "scrapeReviews": true,
    "maxReviewsPerProfile": 10,
    "maxItems": 20
}
```

**Output field list (main dataset):** `companyName`, `primaryTrade`, `town`, `profileUrl`, `ratingLabel`, `ratingOutOf5`, `reviewCount`, `badges`, `workArea`, `trades`, `skills`, `description`, `latestReview`, `searchTrade`, `searchLocation`, `scrapedAt`.

**Output field list (reviews dataset):** `profileUrl`, `companyName`, `primaryTrade`, `town`, `ratingOutOf5`, `reviewCount`, `reviewer`, `postcode`, `verified`, `text`, `date`, `scrapedAt`.

**Behaviors an agent should know:**

- **Reviews live in a separate dataset.** When `scrapeReviews` is true, review texts are pushed to a run-scoped dataset aliased `reviews` (with the default dataset holding company records). The reviews dataset ID/URL is written to the run's key-value store under the key `reviews-dataset`.
- **`maxItems` caps company records (1-500), not reviews.** Each profile can add up to `maxReviewsPerProfile` review rows, so the reviews dataset can be larger than the main one. Free-plan runs are forcibly capped at 10 items.
- **`scrapeReviews: false`** skips review parsing entirely - no review texts and no per-review charges ($0.001/review) - while the main dataset still carries `ratingOutOf5` and `reviewCount`.
- **`exploreLocations` defaults to true** and makes the crawler discover deeper region/district/town pages (BFS) until `maxItems` is reached. Set it to false to stay strictly within the `locations` you provide.
- **`fetchFullProfile: false`** skips profile-page visits - cheaper/faster, but drops `ratingOutOf5`, `reviewCount`, `badges`, `workArea`, `trades`, `skills` and review texts (only `companyName`, `primaryTrade`, `profileUrl`, `description`, `latestReview` are returned).
- **If `locations` is empty, the nationwide listing for each trade is used.** `trades` defaults to `["plumbers"]` when omitted; the Actor exits if no trade and no `startUrl` is given.
- **Cloudflare is handled for you** via the built-in free Jina Reader (no key; ~20 req/min rate limit - set a free `JINA_API_KEY` env var to lift it). Blocked challenge pages are detected and reported, never returned as empty data.

**Billing:** pay-per-event - $0.001 per company record (main dataset), $0.001 per review row (reviews dataset, only when `scrapeReviews` is on), $0.00005 per actor start.

### Legal & Compliance Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Rated People Ltd** (ratedpeople.com). It accesses only publicly available listing and profile pages; it does not log in, bypass authentication, or fill CAPTCHAs itself (challenge-solving, when needed, is delegated to the third-party Jina Reader free service used by the actor). You are responsible for complying with Rated People's Terms of Service and applicable law. Records may contain personal data (sole-trader names, reviewer first names and postcodes), so UK GDPR and the Data Protection Act 2018 apply if you store or process them; company contact details should not be used for unsolicited commercial outreach in breach of PECR or other applicable rules. Use the data for legitimate research, lead generation and monitoring purposes only.

# Actor input Schema

## `trades` (type: `array`):

Trade categories to scrape, e.g. "plumbers", "electricians", "builders", "roofers". Use the site's URL slug (see README for the full list).

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

Optional UK locations to narrow results. Use the site's path format, e.g. "west-midlands/birmingham", "greater-manchester/manchester", "berkshire/reading". Leave empty for the nationwide listing of each trade.

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

Optional: paste full Rated People trade/location listing URLs directly, e.g. https://www.ratedpeople.com/local-plumbers/west-midlands/birmingham. Used in addition to trades x locations.

## `exploreLocations` (type: `boolean`):

Each listing page shows only ~18 tradespeople and the site has no pagination. When enabled, the crawler automatically follows the site's deeper location pages (region -> district -> town) to keep finding new traders until the item limit is reached.

## `fetchFullProfile` (type: `boolean`):

Visit each tradesperson's profile page to get the aggregate rating, review count, review texts (saved to the separate run-scoped reviews dataset), work area, badges and trades/skills. Turn off for a fast listing-only scrape (name, trade, description, latest review).

## `scrapeReviews` (type: `boolean`):

Extract review texts from each profile. When on, reviews are saved to a SEPARATE run-scoped 'reviews' dataset (one row per review; shown on the run's Storage tab and Output tab, ID stored in the run's key-value store under "reviews-dataset") so the main dataset stays clean company data. When off, no review texts are scraped at all.

## `maxReviewsPerProfile` (type: `integer`):

Maximum number of review texts to keep per profile (the profile page shows up to ~10 recent reviews). Only applies when 'Scrape reviews' is on. The review texts land in the separate run-scoped reviews dataset.

## `maxItems` (type: `integer`):

Maximum number of tradesperson records to return.

## Actor input object example

```json
{
  "trades": [
    "plumbers"
  ],
  "locations": [],
  "startUrls": [],
  "exploreLocations": true,
  "fetchFullProfile": true,
  "scrapeReviews": true,
  "maxReviewsPerProfile": 10,
  "maxItems": 50
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `reviews` (type: `string`):

No description

# 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 = {
    "trades": [
        "plumbers"
    ],
    "locations": [],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/ratedpeople-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 = {
    "trades": ["plumbers"],
    "locations": [],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/ratedpeople-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 '{
  "trades": [
    "plumbers"
  ],
  "locations": [],
  "startUrls": []
}' |
apify call ahmed_jasarevic/ratedpeople-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/ratedpeople-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/7UJ1BBYsnEIBwETTa/builds/krmbEdXXbnIHfZNBK/openapi.json
