# MyJobQuote UK Tradesperson Directory Scraper (`crawlerbros/myjobquote-scraper`) Actor

Scrape MyJobQuote.co.uk - the UK tradesperson marketplace. Browse verified builders, electricians, plumbers, handymen and 40+ other trades by county and town, or fetch full tradesperson profiles with ratings, reviews, coverage areas, and business details. No login required.

- **URL**: https://apify.com/crawlerbros/myjobquote-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Lead generation, Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## MyJobQuote Scraper

Scrape [MyJobQuote.co.uk](https://www.myjobquote.co.uk) — a UK marketplace connecting homeowners with vetted local tradespeople. Browse builders, electricians, plumbers, handymen, gardeners and 40+ other trades by county and town, or fetch a full tradesperson profile with ratings, reviews, coverage areas, and business details. No login or API key required.

### What this actor does

- **Two modes:** `directory` (browse tradespeople by trade + county/town) and `profile` (full lookup by URL)
- **44 trade categories** covering building, renovation, gardening, and home-maintenance trades across the UK
- **Verified business signals** — years established, join date, business type (sole trader / limited company), ID-checked badge
- **Empty fields are omitted**

### Output per tradesperson

**Directory mode:**

- `name`, `slug`, `url`
- `description`
- `rating`, `reviewCount`
- `imageUrl`
- `featuredReview` — `{ text, author }`
- `trade`, `county`, `town`

**Profile mode (adds):**

- `about` — full self-authored business description
- `coverageAreas[]` — nearby towns the tradesperson services
- `postalCode`
- `establishedYear`, `joinedDate` (when the business joined MyJobQuote)
- `basedIn`, `businessType` (Sole Trader / Limited Company / Partnership), `idChecked`

Every record also has `recordType: "myjobquote_tradesperson"` and `scrapedAt`.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `directory` | `directory` / `profile` |
| `trade` | select | `handyman` | One of 44 trade categories (mode=directory) |
| `county` | string | `london` | UK county/area slug (mode=directory) |
| `town` | string | – | Optional town within the county (mode=directory) |
| `profileUrls` | array | – | Tradesperson profile URLs or slugs (mode=profile) |
| `maxItems` | int | `20` | Hard cap on emitted records. Directory mode pages through MyJobQuote's own "load more trades" endpoint to go beyond the ~20 rendered on first load, up to however many the trade/county/town combination actually has; profile mode caps how many supplied URLs are fetched |

#### Example: browse handymen in London

```json
{
  "mode": "directory",
  "trade": "handyman",
  "county": "london"
}
```

#### Example: browse electricians in a specific town

```json
{
  "mode": "directory",
  "trade": "electrician",
  "county": "greater-manchester",
  "town": "manchester"
}
```

#### Example: full profile lookup

```json
{
  "mode": "profile",
  "profileUrls": [
    "https://www.myjobquote.co.uk/t/baraka-renovates",
    "dany-handyman-ltd"
  ]
}
```

### Finding county/town slugs

Visit [myjobquote.co.uk/all-trades](https://www.myjobquote.co.uk/all-trades), pick a trade, then a county and (optionally) a town from the directory pages — the URL path segments (`/<trade>/<county>/<town>`) are exactly the slugs to use as input.

### Use cases

- **Local-services lead generation** — build prospect lists of verified UK tradespeople by trade and region
- **Market research** — benchmark tradesperson density, ratings, and review volume by county
- **Competitive intelligence** — track business longevity (established year, join date) and verification status across a trade
- **Directory aggregation** — mirror UK home-improvement trade listings for a comparison site

### FAQ

**Do I need an account?**  No — every field comes from MyJobQuote's public, unauthenticated directory and profile pages.

**How many results can `directory` mode return?**  MyJobQuote's public county/town directory pages server-render ~20 tradespeople on first load; the actor automatically pages through the site's own public "load more trades" endpoint (no login required) to fetch further pages, up to `maxItems` or however many the trade/county/town combination genuinely has (a broad trade in a large county can return 100+; a niche trade in a small town may only have a handful). Narrow to a specific `town` for a more targeted result set for that area, or run multiple towns.

**Are phone numbers included?**  No — MyJobQuote is a lead-generation platform; contact details are only revealed after a homeowner submits a job request through their site, so no public phone/email field exists.

**What does `idChecked` mean?**  MyJobQuote displays an "ID checked" badge on profiles where the tradesperson has completed the platform's identity-verification step.

**Why do some tradespeople have no `rating`/`reviewCount`?**  Those fields are only emitted when the tradesperson has at least one published review — we never fabricate a `0` rating for unreviewed businesses.

**How fresh is the data?**  Real-time — every run re-fetches the live directory and profile pages.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `trade` (type: `string`):

Trade category to browse.

## `county` (type: `string`):

UK county or metropolitan area slug, e.g. `london`, `greater-manchester`, `west-yorkshire`, `essex`, `hampshire`. Use the same spelling shown on myjobquote.co.uk directory URLs.

## `town` (type: `string`):

Narrow to a specific town/city within the county, e.g. `manchester`, `croydon`. Leave blank to browse the whole county.

## `profileUrls` (type: `array`):

Full MyJobQuote tradesperson profile URLs or bare slugs, e.g. `https://www.myjobquote.co.uk/t/baraka-renovates` or `baraka-renovates`.

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

Hard cap on emitted records. In mode=directory, MyJobQuote server-renders ~20 tradespeople on first load and the actor pages through the site's own "load more trades" endpoint (no auth needed) to fetch more, up to however many the trade/county/town combination actually has. In mode=profile this simply caps how many of the supplied `profileUrls` are fetched.

## Actor input object example

```json
{
  "mode": "directory",
  "trade": "handyman",
  "county": "london",
  "profileUrls": [],
  "maxItems": 20
}
```

# Actor output Schema

## `tradespeople` (type: `string`):

Dataset containing all scraped MyJobQuote tradesperson records.

# 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 = {
    "mode": "directory",
    "trade": "handyman",
    "county": "london",
    "profileUrls": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/myjobquote-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 = {
    "mode": "directory",
    "trade": "handyman",
    "county": "london",
    "profileUrls": [],
    "maxItems": 20,
}

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

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

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

```

## CLI example

```bash
echo '{
  "mode": "directory",
  "trade": "handyman",
  "county": "london",
  "profileUrls": [],
  "maxItems": 20
}' |
apify call crawlerbros/myjobquote-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/myjobquote-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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