# Hcareers Hospitality Jobs Scraper (`crawlerbros/hcareers-scraper`) Actor

Scrape Hcareers - the leading job board for the hotel, resort, restaurant and hospitality industry. Search by keyword/location/state, browse by 28 job categories, filter by employment type and remote-only, or fetch specific job URLs.

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

## Pricing

from $3.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

# README

## Hcareers Hospitality Jobs Scraper

Scrape [Hcareers](https://www.hcareers.com) — the leading job board for the hotel, resort, restaurant and broader hospitality industry. Search by keyword, location, or US state/Canadian province, browse by 26 hospitality job categories, filter by employment type and remote-only, or fetch specific job posting URLs directly. HTTP-only against public `hcareers.com` pages. No auth, no proxy, no cookies.

### What this actor does

- **Two modes:** `search` (keyword / location / state / category browsing) and `byUrls` (fetch specific job posting URLs)
- **Full category coverage:** 26 hospitality job categories (Chefs/Kitchen, Front Desk & Guest Services, Housekeeping, Revenue Management, Spa, Technology/IT, etc.)
- **Geographic coverage:** all 47 supported US states/territories + 3 Canadian provinces, plus free-text location search
- **Remote-only browsing** via Hcareers' dedicated remote-jobs listing
- **Employment-type filter** (full-time / part-time), matched against each listing's badges
- **Full job descriptions:** optionally visits each job's detail page for the complete description, structured location, parent brand, and posting/expiry dates
- **Empty fields are omitted**

### Output per job

- `title`, `jobUrl`, `jobId`
- `employer`, `employerLogoUrl`, `brand`, `brandLogoUrl` (parent hospitality group, when the property is managed by one)
- `location`, `locationCity`, `locationState`, `locationPostalCode`, `locationCountry`
- `category` (when filtering by category)
- `employmentType`, `employmentTypeBadges[]`
- `compensationRaw` (as advertised, e.g. `"$18.00 to $21.00 per hour"`), `compensationAmount`, `salaryCurrency`, `salaryPeriod` (when a structured amount is available)
- `description` (full plain-text job description), `photoUrl`, `industry`
- `datePosted`, `closingDate` — ISO 8601 (from detail page); `postedRelative` (e.g. `"6 days ago"`, from listing)
- `recordType: "job"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` / `byUrls` |
| `keywords` | string | `chef` | Free-text search terms |
| `location` | string | – | City/region/landmark |
| `state` | select | – | US state or Canadian province |
| `category` | select | – | One of 26 hospitality job categories |
| `remoteOnly` | bool | `false` | Only remote-eligible positions |
| `employmentTypes` | array (enum) | – | `Full-Time` / `Part-Time` |
| `jobUrls` | array | – | Direct job URLs (mode=byUrls) |
| `fetchFullDescription` | bool | `true` | Visit detail page for full description/location/brand/dates |
| `maxItems` | int | `24` | Hard cap (1–1000) |

#### Example: kitchen jobs in California, full-time

```json
{
  "mode": "search",
  "category": "chefs-kitchen",
  "state": "CA",
  "employmentTypes": ["Full-Time"],
  "maxItems": 50
}
```

#### Example: remote hospitality roles

```json
{
  "mode": "search",
  "remoteOnly": true,
  "maxItems": 50
}
```

#### Example: fetch specific job postings

```json
{
  "mode": "byUrls",
  "jobUrls": ["https://www.hcareers.com/jobs/4239412-bell-person"]
}
```

### Use cases

- **Hospitality recruitment intelligence** — track hiring trends across hotel brands, resorts and restaurant groups
- **Compensation benchmarking** — aggregate advertised pay ranges by category, state, or brand
- **Franchise/brand research** — discover which properties a hospitality group is actively hiring for
- **Career discovery** — build a filtered job feed for a specific category (e.g. Spa, Revenue Management) or region
- **Remote hospitality roles** — surface the (relatively rare) remote-eligible positions in the industry

### FAQ

**Does this require an Hcareers account?** No — all listings and job detail pages scraped are publicly accessible without login.

**Why do some jobs show a `brand` field and others don't?** Many hotels are managed by a parent hospitality group (e.g. a Marriott franchisee); Hcareers surfaces this as "A property of: ...". Independent properties omit this field.

**Why is `compensationAmount` sometimes missing?** Hcareers frequently advertises pay as a free-text range (e.g. `"$18.00 to $21.00 per hour"`) rather than a single structured number. In that case only `compensationRaw` is populated.

**Can I combine `category`, `state`, and `keywords`?** Yes — all filters combine with AND logic.

**How fresh is the data?** Hcareers lists new roles continuously; `datePosted`/`closingDate` reflect each employer's own posting dates, and `postedRelative` reflects the listing page's relative-time label.

# Actor input Schema

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

What to fetch.

## `keywords` (type: `string`):

Free-text search terms (job title, skill, employer/brand name). Leave empty to browse by category/state only.

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

City, region, or landmark to search near (e.g. `New York, NY`, `Miami Beach`).

## `state` (type: `string`):

Restrict to a US state or Canadian province.

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

Restrict to a specific hospitality job category.

## `remoteOnly` (type: `boolean`):

Only include remote-eligible positions.

## `employmentTypes` (type: `array`):

Filter to one or more employment types (matched client-side against each listing's badges).

## `jobUrls` (type: `array`):

Direct Hcareers job posting URLs to fetch, e.g. `https://www.hcareers.com/jobs/4239412-bell-person`.

## `fetchFullDescription` (type: `boolean`):

Visit each job's detail page to include the full description, structured location, brand and posting/expiry dates. Slower but much richer output. Always on for mode=byUrls.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": "chef",
  "remoteOnly": false,
  "employmentTypes": [],
  "jobUrls": [],
  "fetchFullDescription": true,
  "maxItems": 24
}
```

# Actor output Schema

## `jobs` (type: `string`):

Dataset containing all scraped job postings.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "mode": "search",
    "keywords": "chef",
    "remoteOnly": false,
    "employmentTypes": [],
    "jobUrls": [],
    "fetchFullDescription": true,
    "maxItems": 24
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/hcareers-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "keywords": "chef",
    "remoteOnly": False,
    "employmentTypes": [],
    "jobUrls": [],
    "fetchFullDescription": True,
    "maxItems": 24,
}

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

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

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

```

## CLI example

```bash
echo '{
  "mode": "search",
  "keywords": "chef",
  "remoteOnly": false,
  "employmentTypes": [],
  "jobUrls": [],
  "fetchFullDescription": true,
  "maxItems": 24
}' |
apify call crawlerbros/hcareers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/hcareers-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1wgGNfeQU7TdOJTzH/builds/jDSt3rRFWjHWj9AjJ/openapi.json
