# Caterer Scraper - UK Hospitality Jobs & Companies (`studio-amba/caterer-scraper`) Actor

Scrape UK hospitality and catering job listings from Caterer.com by keyword and location. Extract job titles, companies, salaries, locations, posted dates, and apply links. No login or cookies required.

- **URL**: https://apify.com/studio-amba/caterer-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does Caterer Scraper do?

**Caterer Scraper** extracts job listings from [Caterer.com](https://www.caterer.com), the UK's leading hospitality job board with thousands of live vacancies in kitchens, hotels, restaurants, bars, and catering companies. Give it a keyword and (optionally) a location, and it returns structured data for every matching job: title, company, salary (when disclosed), location, postcode, description snippet, posting date, expiry date, and a direct link to the advert. It reads the site's own server-rendered search data, so there is no login, no cookies, and no browser automation required.

Run it on the Apify platform to get UK hospitality job market data via API, schedule recurring scrapes, and pipe results into tools like Zapier, Make, Google Sheets, Airtable, and Slack.

### How to scrape Caterer data

1. Go to the Caterer Scraper on the Apify Store.
2. Click **Try for free** to open the actor in the Apify Console.
3. Enter a search query (e.g. "chef", "sous chef", "kitchen porter", "hotel manager", "barista").
4. Optionally enter a UK location (e.g. "london", "manchester", "birmingham", "edinburgh"). Leave it empty to search the whole UK.
5. Set the maximum number of results you want (default: 50).
6. Leave the proxy configuration on GB (the default) for the most reliable results.
7. Click **Start** and wait for the run to finish.
8. Download your data as JSON, CSV, Excel, or HTML from the Output tab, or pull it via the Apify API.

### Why use Caterer Scraper?

- **Hospitality salary benchmarking** — where employers disclose pay, compare rates across roles, cities, and venue types, and track how kitchen and front-of-house wages shift over time.
- **Recruitment intelligence** — see which hotel groups, restaurant chains, and catering agencies are hiring, for what roles, and where. Spot hiring trends before your competitors do.
- **Labour market analysis** — understand demand across the UK hospitality sector. Which cities have the most chef vacancies? Which roles are hardest to fill?
- **Lead generation** — find hospitality employers and recruitment agencies actively hiring to target with B2B services, suppliers, tools, or staffing solutions.
- **Job aggregation** — feed structured UK hospitality listings into your own job board, career site, or candidate-alert system.
- **Academic and policy research** — clean, structured data for labour economics, wage studies, and workforce reports on the hospitality sector.

### About Caterer.com

Caterer.com is the UK's best-known hospitality recruitment platform, part of the StepStone group (the same network as Totaljobs and IrishJobs.ie). It focuses exclusively on hospitality and catering roles across thousands of employers. Key characteristics:

- **Coverage**: Nationwide UK, from London to regional towns, plus some remote and live-in roles.
- **Roles**: Chefs at every level (head, sous, pastry, commis), kitchen staff, waiting and bar staff, hotel management, housekeeping, catering operations, and more.
- **Salary data**: Many adverts show a concrete figure or range with a pay period (e.g. "£17 per hour", "£30,000 - £35,000 per annum"); some show "Competitive" or nothing.
- **Work patterns**: Full-time, part-time, contract, temporary, seasonal, and permanent roles.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | string | No | Job keyword to search for. Defaults to `chef` if empty. |
| `location` | string | No | UK location to filter by (e.g. `london`). Leave empty to search the whole UK. |
| `maxResults` | integer | No | Maximum number of listings to scrape. Default `50`. |
| `proxyConfiguration` | object | No | Apify proxy settings. Defaults to GB proxies. |

#### Example input

```json
{
  "searchQuery": "sous chef",
  "location": "london",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "GB"
  }
}
````

### Output

Each job listing is a flat JSON object with the following fields:

| Field | Type | Example |
|-------|------|---------|
| `jobId` | number | `107604788` |
| `jobTitle` | string | `Chef` |
| `company` | string | `Abbeywood Estate` |
| `companyUrl` | string | `https://www.caterer.com/jobs/abbeywood-estate?cmpId=1460325&cmp=1` |
| `companyLogo` | string | `https://www.caterer.com/CompanyLogos/8e3dda14-...png` |
| `location` | string | `Ruloe, Northwich (CW8), CW8 2HW` |
| `postCode` | string | `CW8 2HW` |
| `salary` | string | `£17 per hour` |
| `remoteOption` | string | `null` |
| `skills` | array | `null` |
| `descriptionSnippet` | string | `Hours circa 7:30am - 3:30pm Sunday to Thursday Inclusive Rate of Pay £17.00ph` |
| `sponsored` | boolean | `false` |
| `postedDate` | string | `2026-06-29T12:09:46.8Z` |
| `expiryDate` | string | `2026-07-27T13:28:26.943Z` |
| `url` | string | `https://www.caterer.com/job/chef/abbeywood-estate-job107604788` |
| `scrapedAt` | string | `2026-07-10T09:32:54.779Z` |

#### Example output

```json
{
  "jobId": 107604788,
  "jobTitle": "Chef",
  "company": "Abbeywood Estate",
  "companyUrl": "https://www.caterer.com/jobs/abbeywood-estate?cmpId=1460325&cmp=1",
  "companyLogo": null,
  "location": "Ruloe, Northwich (CW8), CW8 2HW",
  "postCode": "CW8 2HW",
  "salary": "£17 per hour",
  "remoteOption": null,
  "skills": null,
  "descriptionSnippet": "Hours circa 7:30am - 3:30pm Sunday to Thursday Inclusive Rate of Pay £17.00ph",
  "sponsored": false,
  "postedDate": "2026-06-29T12:09:46.8Z",
  "expiryDate": "2026-07-27T13:28:26.943Z",
  "url": "https://www.caterer.com/job/chef/abbeywood-estate-job107604788",
  "scrapedAt": "2026-07-10T09:32:54.779Z"
}
```

### Cost estimate

This actor is billed on Apify's Pay Per Result model. The site's search returns 25 jobs per page, so scraping is fast and lightweight — a typical run of a few hundred listings finishes in well under a minute of compute. You pay per job returned plus a small per-run start fee, so a run that returns 500 jobs costs roughly the price of 500 results. Check the actor's pricing tab for the exact current rate.

### Limitations and known issues

- **Search results only** — the actor reads the listing data embedded in the search pages (title, company, salary, location, snippet, dates, links). It does not open each advert to pull the full job description body. The `descriptionSnippet` field gives you the summary shown on the results page.
- **Salary as advertised** — some UK listings show "Competitive" or no figure, in which case the `salary` field carries the advertised text or is `null`. Where a figure is given, it is exactly what the employer entered (an amount or range with a pay period).
- **Sponsored jobs** — a small number of sponsored listings repeat across pages. The actor deduplicates by `jobId`, so you never get the same job twice.
- **UK focus** — Caterer.com is a UK job board. Use GB proxies (the default) for the most reliable results.
- **Result ceiling** — deep result sets are paginated; very large `maxResults` values will walk many pages. Keep `maxResults` reasonable for the query you actually need.

### Related scrapers

- **IrishJobs Scraper** — Ireland's leading job board, same structured output.
- **Reed Scraper** — the UK's largest general job board, with salary ranges and sectors.
- **NoFluffJobs Scraper** — European tech jobs with mandatory salary ranges.
- Browse the Studio AMBA profile on the Apify Store for more European job and marketplace scrapers.

### FAQ

**Do I need a Caterer.com account or API key?**
No. This actor reads the public search results. There is no login, no cookies, and no API key required.

**Can I filter by salary, contract type, or region?**
The current version filters by keyword and location. Salary, location, postcode, and posting date are returned on every result so you can filter them yourself after scraping.

**Is scraping Caterer.com legal?**
This actor collects publicly available job listing data. You are responsible for using the data in line with the site's terms and applicable law. Do not use it to send unsolicited communications in breach of regulations.

# Actor input Schema

## `searchQuery` (type: `string`):

Job keyword to search for (e.g. 'chef', 'sous chef', 'kitchen porter', 'hotel manager', 'barista'). Defaults to 'chef' if empty.

## `location` (type: `string`):

UK location to filter by (e.g. 'london', 'manchester', 'birmingham', 'edinburgh'). Leave empty to search across the whole UK.

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

Maximum number of job listings to scrape.

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

Proxy settings. Caterer.com is a UK site -- use GB-based proxies for best results.

## Actor input object example

```json
{
  "searchQuery": "chef",
  "location": "london",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# 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 = {
    "searchQuery": "chef",
    "location": "london",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/caterer-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 = {
    "searchQuery": "chef",
    "location": "london",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GB",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/caterer-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 '{
  "searchQuery": "chef",
  "location": "london",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call studio-amba/caterer-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Caterer Scraper - UK Hospitality Jobs & Companies",
        "description": "Scrape UK hospitality and catering job listings from Caterer.com by keyword and location. Extract job titles, companies, salaries, locations, posted dates, and apply links. No login or cookies required.",
        "version": "0.1",
        "x-build-id": "qw9w5gQUPfSpMbuKd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~caterer-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-caterer-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~caterer-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-caterer-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~caterer-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-caterer-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Job keyword to search for (e.g. 'chef', 'sous chef', 'kitchen porter', 'hotel manager', 'barista'). Defaults to 'chef' if empty."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "UK location to filter by (e.g. 'london', 'manchester', 'birmingham', 'edinburgh'). Leave empty to search across the whole UK."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of job listings to scrape.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Caterer.com is a UK site -- use GB-based proxies for best results."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
