# Yell Scraper - UK Business Phones, Addresses, Emails & Reviews (`scrapersdelight/yell-business-scraper`) Actor

Scrape Yell.com, the UK business directory: name, phone, website, address, postcode, category, rating and review count by trade and town or Yell URL. Add business details (coordinates, hours, services, payment, socials), reviews and emails from each business's site. Monitor mode, past 250 a search.

- **URL**: https://apify.com/scrapersdelight/yell-business-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 businesses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### What does Yell Scraper do?

**Yell Scraper** turns a [Yell.com](https://www.yell.com) search - the UK's business directory, formerly Yellow Pages - into a clean list of UK businesses: name, phone, website, address and postcode (or the area a mobile trade serves), category, rating and review count, one row per business. Type a trade and a town (`plumbers` in `London`), a company name, or paste any Yell search or business page URL. Built for UK lead generation, sales prospecting, local SEO and market research.

- **📞 Phones on every row** - 999 of 1,000 businesses in a measured London run carried a phone, plus its +44 form.
- **🏠 Business details on demand** - full street address and postcode, coordinates, weekday opening hours, about text, services, payment methods, photos, Facebook / LinkedIn / X / Instagram links and credentials.
- **⭐ Every review** - author, date, star rating, title, text and the business's reply. All of them, not just the five on the page (26 of 26 for a 26-review business).
- **📧 Emails** - Yell publishes no email addresses, so the actor reads each business's own website and keeps addresses on its domain (or its gmail / btinternet inbox).
- **🔁 Monitor mode** - schedule it and get only businesses that are new since the last run.
- **🔎 Past Yell's 250-per-search limit** - Deep search re-reads a big search under every sort order and each of Yell's narrower categories (1,000 unique plumbers in London in one run).
- **No login, no cookies, no API key.**

### What data can you get from Yell?

| | | |
|---|---|---|
| 🏢 `name`, `listingId`, `url` | 📞 `phone`, `phoneInternational`, `phones` (with Tel / Mobile labels) | 🌐 `website`, `websiteDomain` |
| 📧 `email`, `emails`, `emailSourceUrl` | 🏠 `address`, `street`, `town`, `postcode` | 🚐 `areaServed` ("We serve London") |
| 📍 `latitude`, `longitude`, `distance` | 🗂️ `category`, `categories` | ⭐ `rating`, `reviewCount`, `reviews` |
| 🕒 `openingHours`, `openingHoursTable`, `openingHoursSummary` | 🧰 `services`, `sellingPoints`, `highlights` | 💳 `paymentMethods`, `prices` |
| 📝 `overview`, `description`, `strapline` | 🎓 `qualifications`, `accreditations`, `associations` | 🖼️ `logo`, `photos`, `videos` |
| 👍 `facebookUrl`, `linkedinUrl`, `twitterUrl`, `instagramUrl`, `socialLinks` | 📅 `yearsWithYell`, `yearEstablished` | 💰 `sponsored`, `enquiryUrl` |
| 🔍 `searchTerm`, `searchLocation`, `searchUrl` | 📊 `searchTotalResults`, `position` | ⏱️ `scrapedAt` |

### How to scrape Yell with Yell Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - it comes with monthly free credit.
2. Open **Yell Scraper** and type one or more trades (`plumbers`, `dentists`) and UK locations (`Leeds`, `M3 3NW`).
3. Optional: switch on **Business details**, **Reviews** or **Find emails**, set a sort order or a filter.
4. Set **Max businesses** and click **Start**.
5. Download the results as JSON, CSV, Excel or HTML, or send them to Google Sheets, a CRM or a webhook.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `searchTerms` | array | Trades or business types, e.g. `["plumbers"]`. Each runs in every location. **Required** unless you give `startUrls`. |
| `locations` | array | UK towns, cities, counties or postcodes. Empty = the whole UK. |
| `searchBy` | string | `keywords` (default) or `companyName` - Yell's company search, e.g. every Greggs in Leeds. |
| `startUrls` | array | Yell search URLs (`/ucs/UcsSearchAction.do?...` or `/s/plumbers-london.html`, with their sort and filters) or business pages (`/biz/...`). |
| `sortBy` | string | `relevance` (default), `distance`, `rating`, `mostReviewed`. |
| `onlyWith` | string | Yell's "only show" filter: `websites`, `reviews`, `photos`, `videos`. Default `any`. |
| `category` | string | One of Yell's narrower categories for a search, e.g. `Emergency Plumbers`. |
| `withPhoneOnly`, `withWebsiteOnly` | boolean | Skip businesses without a phone / website. |
| `minRating`, `minReviews` | number | Only businesses rated at least this / with at least this many ratings. |
| `skipSponsored` | boolean | Leave out paid placements. |
| `includeDetails` | boolean | Open each business page for the address, coordinates, hours, about text, services, payment methods, photos, socials and credentials. Default off. |
| `includeReviews` | boolean | Add the business's Yell reviews, newest first. Default off. |
| `maxReviewsPerBusiness` | integer | Reviews per business. Default 10; 0 = all. |
| `includeEmails` | boolean | Find emails on each business's own website. Default off. |
| `verifyEmailDomain` | boolean | Keep an email only when its domain has a mail server. Default on. |
| `monitorMode`, `monitorStoreName` | boolean, string | Deliver only businesses not delivered by an earlier run of the same search. |
| `maxResults` | integer | Most businesses for the run. Default 100. |
| `maxResultsPerSearch` | integer | Cap per term + location. 0 = none. |
| `deepSearch` | boolean | Go past Yell's 250 businesses per search. Default off. |
| `useUnblocker`, `proxyConfiguration` | boolean, object | Advanced routing; the defaults work. |

#### Input JSON

```json
{
  "searchTerms": ["plumbers", "electricians"],
  "locations": ["Leeds", "Bradford"],
  "maxResults": 200,
  "includeDetails": true,
  "includeEmails": true
}
```

#### Put a trade in the search box, the place in Locations

Yell matches trades and business types (`roofers`, `accountants`, `dog groomers`). Use **Search by: company name** for a brand or a named business. A full postcode (`M3 3NW`) works as a location, and so does a county (`West Yorkshire`); an empty location searches the whole UK.

#### More than 250 businesses

Yell serves 10 pages of 25 businesses per search, whatever total it shows (5,207 plumbers in London). Add more locations (postcode districts work well), or turn on **Deep search**, which reads the same search sorted by rating, by most reviewed and by distance, then under each of Yell's narrower categories, and delivers each business once.

#### Mobile trades show an area, not an address

Plumbers, electricians and other mobile trades usually show "We serve London" instead of premises: `areaServed` holds that area (91-96% of plumber and electrician rows). **Business details** adds the registered street address and postcode where the business page has one.

### ⬆️ Output

One row per business. A real row (accountants in Manchester, with details, reviews and emails; arrays shortened):

```json
{
  "listingId": "901535717",
  "name": "Animo Tax And Accountancy Limited",
  "url": "https://www.yell.com/biz/animo-tax-and-accountancy-limited-rochdale-901535717/",
  "category": "Accountants",
  "phone": "01706 751876",
  "phoneInternational": "+441706751876",
  "website": "http://www.hta.uk.com/",
  "email": "info@hta.uk.com",
  "address": "35 Princess Street, Rochdale, OL12 0HA",
  "postcode": "OL12 0HA",
  "latitude": 53.6229566,
  "longitude": -2.1542972,
  "rating": 5,
  "reviewCount": 2,
  "openingHours": ["Mo 09:00-17:30", "Tu 09:00-17:30"],
  "services": ["Accounts preparation", "Accountants", "Bookkeeping Services"],
  "yearsWithYell": "10+",
  "reviews": [{ "author": "JC-11", "date": "2017-05-23T06:34:43Z", "rating": 5, "title": "Highly recommended & very approachable" }],
  "searchTerm": "accountants",
  "searchLocation": "Manchester",
  "searchTotalResults": 733
}
```

#### Fields and how often they are filled

Measured on 14 October 2026. Results-card fields from 1,200 rows (plumbers in London, electricians in Bristol and Manchester); detail fields from 270 rows with **Business details** on (accountants in Manchester and Birmingham, solicitors in Bristol, plumbers in Glasgow).

| Field | Filled | Comes from |
|---|---|---|
| `name`, `listingId`, `url`, `category`, `logo` | 100% | results card |
| `phone` | 99.9-100% | results card |
| `website` | 57-81% of trades, 88% of the detail sample | results card |
| `areaServed` | 87-96% of mobile trades | results card |
| `rating` | 33-46% (the rest have no ratings yet, `reviewCount` 0) | results card |
| `openingHoursSummary` | 61-81% | results card |
| `address`, `postcode`, `latitude`, `longitude` | 79% | Business details |
| `description` | 77% | Business details |
| `openingHours` | 68% | Business details |
| `services` | 64% | Business details |
| `paymentMethods` | 61% | Business details |
| `facebookUrl` / `twitterUrl` / `linkedinUrl` / `instagramUrl` | 44% / 43% / 37% / 8% | Business details |
| `photos` | 39% | Business details |
| `associations` / `accreditations` / `qualifications` | 19% / 9% / 7% | Business details |
| `reviews` | 20% of businesses have at least one | Reviews |
| `email` | 40% of rows (24-50% by trade) | Find emails |

### Use cases

- 📞 **Cold-calling lists** - every plumber, roofer or accountant in a town, with direct numbers.
- 📧 **Email outreach** - emails from the businesses' own websites, with the page each came from.
- 🗺️ **Territory planning** - postcodes and coordinates to map competitors or customers.
- ⭐ **Local SEO and reputation audits** - ratings, review counts and full review text by trade and area.
- 🧾 **CRM enrichment** - add phone, website, address and hours to an existing UK company list.
- 🔔 **New-business alerts** - Monitor mode on a weekly schedule.

### How much does it cost to scrape Yell?

Pay per result, no start fee:

| Event | Price | When |
|---|---|---|
| Business | $0.0007 per business ($0.70 per 1,000) | every business row |
| Business details | $0.00002 per business | each business whose Yell page was read (Business details on) |
| Reviews | $0.0012 per business | each business delivered with at least one review (Reviews on) |
| Email found | $0.0012 per business | each business delivered with at least one email (Find emails on) |

| Run | Cost |
|---|---|
| 20 businesses (the prefilled demo) | $0.014 |
| 100 businesses | $0.07 |
| 1,000 businesses | $0.70 |
| 100 businesses with details | $0.072 |

A search that finds nothing costs nothing, and a business found by two of your searches is delivered and charged once.

### Integrations, API, scheduling & MCP

- **Schedule** a search daily or weekly in Apify Console and combine it with **Only new businesses**.
- **Integrations**: Google Sheets, Slack, Zapier, Make, n8n, Airbyte, or a webhook when the run finishes.
- **API**: run it from [Python](https://docs.apify.com/api/client/python) or [JavaScript](https://docs.apify.com/api/client/js) with the Apify client, or call the REST API; see the API tab.
- **MCP**: AI agents can call Yell Scraper through the [Apify MCP server](https://mcp.apify.com).

### More UK business scrapers

- [Checkatrade Scraper](https://apify.com/scrapersdelight/checkatrade-scraper) - vetted UK trades with ratings and phones.
- [TrustATrader Scraper](https://apify.com/scrapersdelight/trustatrader-uk-scraper) - UK tradespeople leads.
- [FreeIndex UK Scraper](https://apify.com/scrapersdelight/freeindex-uk-scraper) - another UK business directory.
- [Gas Safe Register Businesses](https://apify.com/scrapersdelight/gas-safe-businesses-scraper) - registered gas engineers.
- [UK Food Business Leads (FHRS)](https://apify.com/scrapersdelight/fhrs-food-hygiene-scraper) - new food businesses with hygiene ratings.
- More on [our profile](https://apify.com/scrapersdelight).

### Limits & empty runs

- **250 businesses per search** is Yell's own limit; use more locations or Deep search.
- **Yell limits how fast one connection can read** (about 30 pages per 5 minutes). Small runs go straight through; bigger runs with Business details or Reviews read one page per business and take longer.
- **No results** means Yell has no listings for that term and place (the run summary says so; nothing is charged).
- **Emails** depend on the business publishing one on its website: 24-50% of businesses in our runs.
- Yell re-orders paid listings between pages, so a business can appear on two pages; it is delivered and charged once.
- Every run writes a `RUN_SUMMARY` record: Yell's total per search, pages read, duplicates, filtered counts and errors.

### FAQ

#### How much does Yell Scraper cost?

$0.0007 per business, plus the add-ons you switch on. 1,000 businesses cost $0.70.

#### How many businesses can Yell Scraper get?

250 per search (Yell's limit), any number of searches per run, and more with Deep search - 1,000 unique plumbers in London in one measured run.

#### Does Yell Scraper get email addresses?

Yell itself publishes none. With **Find emails** on, the actor reads each business's website (homepage plus its contact / about page) and returns addresses on the business's domain or its own mailbox at a provider such as gmail.com or btinternet.com.

#### Can Yell Scraper get reviews?

Yes - every review on the business page, including the ones behind Yell's "Show all reviews" button, with the business's replies.

#### Can I schedule Yell Scraper and get only new businesses?

Yes. Turn on **Only new businesses** and add a schedule; each run delivers only businesses the same search has not delivered before.

#### Can I use Yell Scraper with the Apify API or Python?

Yes - through the Apify API and the Python and JavaScript clients (API tab), and through integrations such as Make, Zapier and n8n.

#### Can AI agents use Yell Scraper through MCP?

Yes, through the Apify MCP server.

#### Do I need a Yell account, login or API key for Yell Scraper?

No.

#### Why did my Yell Scraper run return no results?

Yell had no listings for that trade and place (try a broader term or location), or your filters (minimum rating, phone / website only) removed them. The `RUN_SUMMARY` record shows which.

#### Can I scrape a single Yell business page?

Yes - paste its `yell.com/biz/...` URL into Yell URLs.

#### Your feedback

Found a bug or need a field? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/yell-business-scraper/issues/open) - we read every one.

# Actor input Schema

## `searchTerms` (type: `array`):

What you would type into Yell, e.g. "plumbers", "dentists", "solicitors". Each is searched in every location below. With "Search by" set to company name, these are company names (e.g. "Greggs").

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

UK town, city, county or postcode, e.g. "London", "Leeds", "M3 3NW". Empty = the whole United Kingdom.

## `searchBy` (type: `string`):

Trade / keyword (Yell's normal search) or company name (Yell's company search, e.g. every Greggs in Leeds).

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

Optional. Yell search pages (yell.com/ucs/UcsSearchAction.do?keywords=...\&location=..., or yell.com/s/plumbers-london.html) keep their sort and filters and are paged automatically; a business page (yell.com/biz/...) returns that one business.

## `sortBy` (type: `string`):

Yell's result order. Distance sorts from the searched place.

## `onlyWith` (type: `string`):

Yell's "only show" filter (one at a time).

## `category` (type: `string`):

One of the narrower categories Yell offers for a search, e.g. "Emergency Plumbers" or "Boiler Service & Repair" for plumbers. Empty = all.

## `withPhoneOnly` (type: `boolean`):

Skip businesses without a phone number.

## `withWebsiteOnly` (type: `boolean`):

Skip businesses without a website.

## `minRating` (type: `number`):

Only businesses rated at least this (1-5). Businesses with no ratings are skipped when set. 0 = off.

## `minReviews` (type: `integer`):

Only businesses with at least this many Yell ratings. 0 = off.

## `skipSponsored` (type: `boolean`):

Leave out paid (sponsored) placements.

## `includeDetails` (type: `boolean`):

Open each business page for the full street address and postcode, coordinates, weekday opening hours, about text, full services list, payment methods, photos, social links and credentials.

## `includeReviews` (type: `boolean`):

Add the business's Yell reviews (author, date, rating, title, text, business reply), newest first.

## `maxReviewsPerBusiness` (type: `integer`):

Most reviews to add per business. 0 = all of them.

## `includeEmails` (type: `boolean`):

Yell publishes no email addresses. This reads each business's own website (homepage + its contact / about page) and keeps addresses on the business's domain or an ordinary mailbox provider (gmail.com, btinternet.com...).

## `verifyEmailDomain` (type: `boolean`):

Keep an email only when its domain has a mail server (MX record).

## `monitorMode` (type: `boolean`):

Deliver only businesses this search has not delivered in an earlier run (remembered in a named key-value store).

## `monitorStoreName` (type: `string`):

Name of the key-value store that remembers delivered businesses. Default: yell-business-monitor.

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

Most businesses for the whole run. Yell serves 250 per search (10 pages of 25); use more locations or Deep search for more.

## `maxResultsPerSearch` (type: `integer`):

Cap for each term + location pair. 0 = no per-search cap.

## `deepSearch` (type: `boolean`):

When Yell lists more than 250 businesses for a search, also read it sorted by rating, most reviewed and distance, and under each of Yell's narrower categories. Each adds up to 250 more; repeats are delivered once.

## `useUnblocker` (type: `boolean`):

When Yell refuses the direct and residential routes, read pages through Apify's Unblocker (kept within a per-run budget).

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

Optional. Requests go direct first, then through Apify's RESIDENTIAL proxy (UK) only when Yell refuses them. Add your own proxy URLs here to use them first.

## Actor input object example

```json
{
  "searchTerms": [
    "plumbers"
  ],
  "locations": [
    "London"
  ],
  "searchBy": "keywords",
  "sortBy": "relevance",
  "onlyWith": "any",
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "minRating": 0,
  "minReviews": 0,
  "skipSponsored": false,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerBusiness": 10,
  "includeEmails": false,
  "verifyEmailDomain": true,
  "monitorMode": false,
  "maxResults": 20,
  "maxResultsPerSearch": 0,
  "deepSearch": false,
  "useUnblocker": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per business.

## `summary` (type: `string`):

Per search: Yell's own result count, pages read, businesses delivered, duplicates and filtered counts, errors, and the route used.

# 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 = {
    "searchTerms": [
        "plumbers"
    ],
    "locations": [
        "London"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/yell-business-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 = {
    "searchTerms": ["plumbers"],
    "locations": ["London"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/yell-business-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 '{
  "searchTerms": [
    "plumbers"
  ],
  "locations": [
    "London"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/yell-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/yell-business-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/omU7lBA3BqMjpke0n/builds/ez0Jk9stvRbRICktq/openapi.json
