# Caterer Jobs Search Scraper (`alexist/caterer-jobs-search-scraper`) Actor

Scrape job search results from Caterer.com with precision. Extract 32+ fields including job titles, salary, location, company details, posting dates, and more — perfect for recruiters, market researchers, and hospitality platforms.

- **URL**: https://apify.com/alexist/caterer-jobs-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Caterer.com Jobs Search Scraper: Extract UK Catering Jobs Data

---

### What Is Caterer.com?

Caterer.com is the UK's leading job board dedicated to hospitality and catering professionals. It aggregates thousands of active vacancies across management, chefs, waitstaff, and support roles from hotels, restaurants, event caterers, and contract food service companies. Collecting job listing data manually from search results is repetitive and error-prone — the **Caterer.com Jobs Search Scraper** automates this, turning search results into clean, structured datasets ready for analysis.

---

### Overview

The **Caterer.com Jobs Search Scraper** extracts job listings directly from Caterer.com search result pages, capturing comprehensive job and company data in a single operation. It is designed for:

- **Recruitment agencies** monitoring market activity and competitor postings
- **Salary benchmarking professionals** building compensation datasets
- **Job aggregators and platforms** feeding content into multi-source boards
- **Market researchers** analyzing hospitality hiring trends in the UK
- **HR teams** tracking available talent and skill demand

Key strengths include the ability to scrape search result pages directly (not just individual job listings), configurable item limits, and robust error handling that lets you process large batches without interruptions.

---

### Input Format

The scraper accepts a JSON configuration with the following parameters:

```json
{
  "urls": [
    "https://www.caterer.com/jobs/management?searchOrigin=Resultlist_top-search&whatType=skillAutosuggest"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
````

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | List of Caterer.com search result URLs to scrape (e.g., filtered by role, location, or keyword) |
| `ignore_url_failures` | Boolean | If `true`, continues scraping remaining URLs if one fails. If `false`, stops on first error. Default: `true` |
| `max_items_per_url` | Integer | Maximum number of job listings to extract per URL. Default: `20`. Useful for controlling data volume and cost |

**Example URLs:**

- Management roles: `https://www.caterer.com/jobs/management`
- Chefs: `https://www.caterer.com/jobs/chefs`
- By location: `https://www.caterer.com/jobs?location=London`

> **Tip:** Use filtered search URLs to target specific roles, locations, or experience levels. The scraper captures all results visible on the page up to your `max_items_per_url` limit.

***

### Output Format

**Sample output**

```json
{
  "id": 107672518,
  "title": "Area Support Manager",
  "labels": [],
  "url": "/job/area-support-manager/impact-food-group-job107672518",
  "company_id": 489033,
  "company_name": "Impact Food Group",
  "company_url": "https://www.caterer.com/jobs/impact-food-group?cmpId=489033&cmp=1",
  "company_logo_url": "https://www.caterer.com/CompanyLogos/eaba4829f2484c0db02ca4dbb9f004e2.png",
  "date_posted": "2026-07-10T14:56:48.703Z",
  "location": "Oxford (OX1)",
  "is_anonymous": false,
  "salary": "£38000.00 to £40000.00 per year  Great Benefits plus car allowance £38",
  "post_code": "OX1",
  "partnership": {
    "is_partnership_job": false,
    "show_partnership_label": false,
    "is_backfilled": false,
    "source_site_friendly_name": "",
    "is_cross_posted": false
  },
  "unified_salary": null,
  "work_from_home": "",
  "meta_data": {
    "position_on_page": 1,
    "position_absolute": 1
  },
  "harmonised_id": "a7271b7f-14b6-49b3-bd53-6d3edcad914a",
  "job_posting_sequence": 1,
  "period_posted_date": "2026-07-10T14:56:48.703Z",
  "publish_from_date": "2026-07-10T14:56:48.703Z",
  "publish_to_date": "2026-08-21T14:56:48.703Z",
  "has_future_posting": false,
  "fingerprint_count": 1,
  "section": "main",
  "top_labels": [
    {
      "label": "PREMIUM",
      "type": "PREMIUM"
    }
  ],
  "skills": [],
  "text_snippet": "Welcome to Impact Food Group (IFG). We one of England’s fastest-growing school food providers, serving around one million students every day across more than 1,500 schools. We are dedicated to delivering high-quality, nutritious meals that support student wellbeing and enjoyment. Our brands include Innovate, Cucina, Chapter One (Independent Schools), Hutchison, and Dolce, reflecting our breadth of experience and reach across the school catering sector. Are you an experienced Contract Catering Operations Support Manager who still likes to be involved with Food? Looking to make a real difference? Be part of a growing business with a powerful social impact mission. We’re not going to bore you with a long list of empty adjectives, we want one simple thing: awesome people to help us feed more children better food. Job Title: Business Support Manager (BSM)",
  "cv_to_job_score": null,
  "is_highlighted": false,
  "is_sponsored": false,
  "travel_time": null,
  "unified_travel_time": null,
  "is_top_job": false,
  "is_traffic_from_partner": false,
  "from_url": "https://www.caterer.com/jobs/management?searchOrigin=Resultlist_top-search&whatType=skillAutosuggest"
}
```

Each scraped listing returns 32+ structured fields:

#### Job Core Data

| Field | Meaning |
|---|---|
| `ID` | Unique identifier assigned to the job listing by Caterer.com |
| `Title` | Job title as posted (e.g., "Executive Chef", "Restaurant Manager") |
| `Labels` | Categorical tags or labels assigned to the role |
| `Top Labels` | Most prominent or relevant labels for quick filtering |
| `URL` | Direct link to the full job posting |
| `Text Snippet` | Brief summary or excerpt of the job description |
| `Section` | Job category or department (e.g., "Management", "Chefs", "Front of House") |

#### Company Information

| Field | Meaning |
|---|---|
| `Company ID` | Unique identifier for the employer in Caterer.com's system |
| `Company Name` | Official name of the hiring company or organization |
| `Company URL` | Link to the company's profile or website |
| `Company Logo URL` | Direct URL to the company's logo image |

#### Location & Work Details

| Field | Meaning |
|---|---|
| `Location` | City, region, or area where the role is based |
| `Post Code` | UK postal code of the job location |
| `Work From Home` | Indicates remote or hybrid working availability |
| `Travel Time` | Estimated commute time from specified reference point |
| `Unified Travel Time` | Standardized travel time metric for comparison |
| `Is Anonymous` | Whether the employer name is hidden in the listing |

#### Compensation & Terms

| Field | Meaning |
|---|---|
| `Salary` | Stated salary range or hourly rate (e.g., "£25,000 - £35,000") |
| `Unified Salary` | Normalized salary figure for cross-listing comparison |

#### Posting & Timeline

| Field | Meaning |
|---|---|
| `Date Posted` | When the listing was published |
| `Period Posted Date` | Date range the listing has been active |
| `Publish From Date` | When the listing became publicly visible |
| `Publish To Date` | When the listing is scheduled to expire |
| `Has Future Posting` | Whether the role is scheduled to open in the future |
| `Job Posting Sequence` | Order or sequence number of the posting |

#### Engagement & Visibility

| Field | Meaning |
|---|---|
| `Is Highlighted` | Whether the job has paid highlighting/featured status |
| `Is Sponsored` | Whether the listing is sponsored or promoted |
| `Is Top Job` | Whether Caterer.com has ranked it as a "top" role |
| `Is Traffic From Partner` | Whether traffic metrics come from a partner integration |
| `CV To Job Score` | Relevance or match score between candidate CVs and the role |
| `Fingerprint Count` | Number of candidate applications or views tracked |

#### Additional Metadata

| Field | Meaning |
|---|---|
| `Meta Data` | Additional structured metadata or custom fields |
| `Harmonised ID` | Industry-standard identifier for data matching across platforms |
| `Partnership` | Whether the listing involves a recruitment partner |
| `Skills` | Extracted skill tags or requirements (e.g., "food safety", "team management") |

***

### How to Use

1. **Select your search criteria** — Visit Caterer.com and apply filters (role type, location, experience level, etc.). Copy the resulting search URL.

2. **Add URLs to configuration** — Paste one or more search result URLs into the `urls` array in your input JSON.

3. **Set limits** — Define `max_items_per_url` (e.g., `20`, `50`, or `100`) to control the number of listings extracted per URL.

4. **Enable error tolerance** — Keep `ignore_url_failures: true` for batch runs to skip any problematic URLs without interrupting the full dataset.

5. **Run the scraper** — Launch the job and monitor progress in the run log.

6. **Download results** — Export as JSON, CSV, or Excel for import into spreadsheets, databases, or analytics tools.

**Best practices:**

- Use specific search URLs (filtered by role or location) to get highly relevant data.
- Test with a small `max_items_per_url` (e.g., `20`) first, then scale up.
- Combine multiple URLs in one run to collect diverse datasets efficiently.

***

### Use Cases & Business Value

- **Talent acquisition:** Monitor competitor job postings and hiring volume in real-time
- **Salary research:** Build compensation benchmarks across hospitality roles and regions
- **Trend analysis:** Track which skills, locations, and company types are hiring most
- **Job aggregation:** Feed Caterer.com listings into your own multi-board job portal
- **Market intelligence:** Identify new players entering the hospitality sector

By automating search result collection, you eliminate hours of manual copying and clicking, while gaining structured data perfect for spreadsheets, dashboards, and machine learning models.

***

### Conclusion

The **Caterer.com Jobs Search Scraper** is an efficient, reliable tool for anyone needing UK hospitality job data at scale. Whether you're a recruiter tracking talent supply, a researcher analyzing the catering market, or a platform aggregating listings, this scraper delivers the job search intelligence you need — fast and reliably.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.caterer.com/jobs/management?searchOrigin=Resultlist_top-search&whatType=skillAutosuggest"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.caterer.com/jobs/management?searchOrigin=Resultlist_top-search&whatType=skillAutosuggest"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/caterer-jobs-search-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 = {
    "urls": ["https://www.caterer.com/jobs/management?searchOrigin=Resultlist_top-search&whatType=skillAutosuggest"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/caterer-jobs-search-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 '{
  "urls": [
    "https://www.caterer.com/jobs/management?searchOrigin=Resultlist_top-search&whatType=skillAutosuggest"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call alexist/caterer-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Caterer Jobs Search Scraper",
        "description": "Scrape job search results from Caterer.com with precision. Extract 32+ fields including job titles, salary, location, company details, posting dates, and more — perfect for recruiters, market researchers, and hospitality platforms.",
        "version": "0.0",
        "x-build-id": "C8AzI8NjW1ZFG1lJV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alexist~caterer-jobs-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alexist-caterer-jobs-search-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/alexist~caterer-jobs-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alexist-caterer-jobs-search-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/alexist~caterer-jobs-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alexist-caterer-jobs-search-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": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
