# Hospitality Jobs Aggregator — Hcareers, Hosco, Caterer & More (`jungle_synthesizer/hospitality-jobs-aggregator-hcareers-hosco-caterer-scraper`) Actor

Scrape hospitality job listings from Hcareers, Hospitality Online, and CatererGlobal in one run. Returns normalized job records with hospitality-specific fields including tip eligibility, housing, family-rate perks, cuisine specialty, and brand-tier scoring.

- **URL**: https://apify.com/jungle\_synthesizer/hospitality-jobs-aggregator-hcareers-hosco-caterer-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Hospitality Jobs Aggregator — Hcareers, Hosco, Caterer & More

Scrapes hospitality job listings from Hcareers, Hospitality Online, and CatererGlobal in one run. Returns normalized records with fields that are specific to the industry — tip eligibility, housing, family-rate benefits, cuisine specialty, and a brand-tier score that signals career trajectory.

The three source boards together cover tens of thousands of active hotel and restaurant postings across the US, UK, and MENA. Running them separately and reconciling the output is how most people waste a Tuesday morning.

### What It Returns

Each record contains the job listing data you'd expect, plus several fields that generic scrapers don't bother with.

| Field | Type | Description |
|-------|------|-------------|
| `source_board` | string | `hcareers` \| `hospitalityonline` \| `catererglobal` |
| `job_id` | string | Board-specific job identifier |
| `posted_date` | string | Posting date or relative time as shown on the board |
| `job_title` | string | Job title as listed |
| `title_category` | string | Normalized category: `housekeeping` \| `f&b` \| `front-office` \| `culinary` \| `engineering` \| `sales-marketing` \| `revenue` \| `gm` \| `corporate` \| `spa` \| `event` |
| `seniority_level` | string | `entry` \| `line` \| `supervisor` \| `manager` \| `director` \| `executive` \| `gm` \| `vp` |
| `employment_type` | string | `full-time` \| `part-time` \| `seasonal` \| `contract` \| `internship` |
| `employer_name` | string | Top-level management company or employer (e.g., Aimbridge, Davidson) |
| `employer_brand` | string | Hotel brand or property name (e.g., JW Marriott, Ritz-Carlton) |
| `property_name` | string | Specific property |
| `property_city` | string | City |
| `property_state_province` | string | State or province |
| `property_country` | string | Country |
| `property_postcode` | string | Postal code |
| `is_remote` | boolean | Whether the role is remote |
| `is_corporate_office_role` | boolean | Corporate HQ vs. property-level role |
| `salary_min` | number | Minimum advertised salary |
| `salary_max` | number | Maximum advertised salary |
| `salary_currency` | string | ISO 4217 currency code |
| `salary_period` | string | `hourly` \| `monthly` \| `annual` |
| `tip_eligible` | boolean | Inferred from role type and geography (servers, bartenders, front desk in US/UK/AU) |
| `service_charge_share` | boolean | Whether a service-charge pool is mentioned |
| `benefits` | string | Comma-separated: `bonus` / `401k` / `housing` / `meals` / `family-rate` / `dental` / `vision` / `pto` |
| `housing_provided` | boolean | Employer housing offered — common at remote resorts |
| `meals_provided` | boolean | Complimentary meals mentioned |
| `family_and_friends_rate` | boolean | The iconic hotel-employee discount rate |
| `visa_sponsorship` | boolean | H2B / E3 / Tier 2 visa sponsorship available |
| `language_requirements` | string | Comma-separated languages required |
| `cuisine_specialty` | string | For chef/F&B roles: Italian, French, Japanese, etc. |
| `certifications_required` | string | Comma-separated: CHA / ServSafe / TIPS / etc. |
| `description` | string | Full job description text |
| `apply_url` | string | Direct application link |
| `apply_email` | string | Application email if provided |
| `composite_employer_score` | integer | 1–10 brand-tier score. Ritz-Carlton/Four Seasons = 10, major brands = 7–8, select-service = 4–5, independent = 1–2. Signals career trajectory. |

### Input

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `sources` | array | No | all three | Which boards to scrape. Options: `hcareers`, `hospitalityonline`, `catererglobal` |
| `maxItems` | integer | Yes | 10 | Maximum job records to return across all selected sources |

#### Example Input

```json
{
  "sources": ["hcareers", "hospitalityonline"],
  "maxItems": 500
}
````

To scrape all three boards:

```json
{
  "maxItems": 1000
}
```

### Use Cases

**Hospitality recruiters** — Aimbridge, Hersha, Highgate, and similar management companies recruit across properties simultaneously. A single aggregated pull across boards saves hours of manual cross-referencing, and the normalized schema means analysis starts immediately.

**Career services departments** — Cornell SHA, ECPI, Glion, and similar institutions advise students on the labor market. The `composite_employer_score` and `seniority_level` fields give a structured view of where entry-level demand actually is right now.

**Corporate rate negotiators** — Knowing GM tenure and property-level hiring activity at a target hotel is a surprisingly useful signal before rate negotiations. Hotels actively replacing leadership tend to be more flexible.

**Hospitality recruitment agencies** — Renard, Marshall+Sterling, and similar firms source across multiple boards daily. Running this actor on a schedule and feeding results into a CRM cuts the manual sourcing loop significantly.

**Compensation benchmarking** — The salary fields, when present, combined with `property_country`, `employment_type`, and `title_category`, give a reasonable regional compensation picture. The hospitality industry discloses salary less often than it should, which makes the cases where it does more valuable.

### Source Coverage

| Board | Geography | Focus | Notes |
|-------|-----------|-------|-------|
| Hcareers | US | Full-service hotels, casino resorts, management companies | 4,000+ active listings at any time |
| Hospitality Online | US | Similar to Hcareers — sister site with overlapping but not identical inventory | 7,000+ active listings |
| CatererGlobal | UK / MENA / Global | UK hospitality and Gulf region properties (Jumeirah, FRHI) | Accessed via Apify cloud IPs |

Hcareers and Hospitality Online share infrastructure and a similar card structure. CatererGlobal is a separate ASP.NET-based platform focused on UK and international luxury markets.

### Notes on Specific Fields

**`tip_eligible`** — Inferred, not extracted. US front-of-house and F\&B roles are marked `true` by default. This is an approximation; individual employers vary.

**`family_and_friends_rate`** — The most iconic hospitality employee perk. Inferred from role type combined with whether the employer is a recognizable brand. Present in the description when explicitly stated.

**`composite_employer_score`** — A deterministic lookup against a brand table, not a live rating. Ritz-Carlton and Four Seasons anchor at 10; select-service brands sit at 4–6; independents default to 2. The intent is career-trajectory signaling, not brand quality assessment.

**`employer_name` vs `employer_brand`** — Many hotel properties are operated by management companies (Aimbridge, Interstate, Davidson) rather than the brand owner. Where the listing shows "A property of: \[Parent Company]", the actor splits these correctly: `employer_name` is the management company, `employer_brand` is the property/hotel brand.

### Technical Notes

The actor uses Cheerio-based HTML parsing across all three sources. No JavaScript rendering required for the primary sources. Hcareers and Hospitality Online share identical page structure; the actor uses a single handler for each with minor URL differences.

CatererGlobal is served via Akamai CDN and is accessible from Apify cloud egress IPs. Local dev runs may show connection failures that do not occur in the cloud.

Memory usage is low — 512 MB default is sufficient for runs up to several thousand records. For bulk pulls (10,000+ records), increase `maxItems` and allow the actor to paginate through all available pages. Each source has 80–200+ pages of listings at typical page sizes.

### Example Output Record

```json
{
  "source_board": "hcareers",
  "job_id": "4289627",
  "posted_date": "3 days ago",
  "job_title": "Front Desk Supervisor",
  "title_category": "front-office",
  "seniority_level": "supervisor",
  "employment_type": "Full-Time",
  "employer_name": "Island Hospitality Management",
  "employer_brand": "Residence Inn by Marriott New Rochelle",
  "property_name": "Residence Inn by Marriott New Rochelle",
  "property_city": "New Rochelle",
  "property_state_province": "NY",
  "property_country": "US",
  "salary_min": 22,
  "salary_max": 26,
  "salary_currency": "USD",
  "salary_period": "hourly",
  "tip_eligible": false,
  "family_and_friends_rate": true,
  "benefits": "401k,health,dental,vision,pto",
  "composite_employer_score": 6,
  "apply_url": "https://recruiting.paylocity.com/..."
}
```

***

Built by [OrbTop](https://orbtop.com) — hospitality data infrastructure.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `sources` (type: `array`):

Job boards to include. Options: hcareers, hospitalityonline, catererglobal. Leave empty to scrape all three.

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

Maximum number of job records to return across all selected sources.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "sources": [
    "hcareers",
    "hospitalityonline",
    "catererglobal"
  ],
  "maxItems": 10
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "sources": [
        "hcareers",
        "hospitalityonline",
        "catererglobal"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/hospitality-jobs-aggregator-hcareers-hosco-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "sources": [
        "hcareers",
        "hospitalityonline",
        "catererglobal",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/hospitality-jobs-aggregator-hcareers-hosco-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "sources": [
    "hcareers",
    "hospitalityonline",
    "catererglobal"
  ],
  "maxItems": 10
}' |
apify call jungle_synthesizer/hospitality-jobs-aggregator-hcareers-hosco-caterer-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hospitality Jobs Aggregator — Hcareers, Hosco, Caterer & More",
        "description": "Scrape hospitality job listings from Hcareers, Hospitality Online, and CatererGlobal in one run. Returns normalized job records with hospitality-specific fields including tip eligibility, housing, family-rate perks, cuisine specialty, and brand-tier scoring.",
        "version": "0.1",
        "x-build-id": "CtOTKBp9CSeaTruYw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~hospitality-jobs-aggregator-hcareers-hosco-caterer-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-hospitality-jobs-aggregator-hcareers-hosco-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/jungle_synthesizer~hospitality-jobs-aggregator-hcareers-hosco-caterer-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-hospitality-jobs-aggregator-hcareers-hosco-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/jungle_synthesizer~hospitality-jobs-aggregator-hcareers-hosco-caterer-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-hospitality-jobs-aggregator-hcareers-hosco-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",
                "required": [
                    "maxItems"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "sources": {
                        "title": "Sources to Scrape",
                        "type": "array",
                        "description": "Job boards to include. Options: hcareers, hospitalityonline, catererglobal. Leave empty to scrape all three.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of job records to return across all selected sources.",
                        "default": 10
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
