# HiringCafe Jobs Scraper - Search Jobs by Keyword or URL (`confidential_gnat/hiringcafe-jobs-scraper`) Actor

Scrapes job listings from HiringCafe (hiringcafe.com): title, company, location, salary, workplace type, seniority, requirements, full description and apply link. Search by keyword, search URL or job URL.

- **URL**: https://apify.com/confidential_gnat/hiringcafe-jobs-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 results

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## HiringCafe Jobs Scraper - Search Jobs by Keyword or URL

**Scrape job listings from HiringCafe (hiringcafe.com)**: title, company, location, salary, workplace type, seniority, requirements, full job description and apply link. Search by **keyword**, paste a HiringCafe **search URL** or a single **job URL**, press Start and export the results as JSON, CSV or Excel, or call the scraper as an **API**.

**Target website:** [hiringcafe.com](https://hiringcafe.com)

### ✨ Features of this HiringCafe jobs scraper

- **Job data extraction** — structured job records with company, location, compensation, seniority, requirements summary, skills and the apply link.
- **Full job descriptions** — the complete description as HTML and plain text, switchable with one input toggle.
- **Pagination support** — keeps paging through results until your limit is reached.
- **Proxy support** — runs through Apify residential proxies.
- **Incremental runs** — set a cache project name and scheduled runs return only jobs you have not scraped before.
- **Keyword and URL search** — keywords, search URLs with filters already applied, and direct job URLs.
- **Captcha bypass** — the captcha check is handled by the scraper using an undetectable browser, and the session is reused between runs.
- **No browser required** — fast, low-cost runs.

### 🚀 How to scrape HiringCafe jobs in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Fill in the **Input** fields (a keyword, a search URL or a job URL is required).
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 HiringCafe jobs scraper pricing

This actor uses **pay-per-result** billing: you pay per job saved to the dataset.

- New Apify accounts include **$5 of free monthly credit**.
- It does not run a browser, so it costs significantly less to run than browser-based scrapers.

### 🔧 HiringCafe jobs scraper input configuration

![HiringCafe jobs scraper input form with the main fields numbered 1 to 5](https://i.postimg.cc/2S42QrV2/image.png)

1. **Search keywords** — one job title or skill per line, for example `nursing`. Each keyword is searched separately.
2. **Search or job URLs** — paste HiringCafe search URLs (filters kept as they are) or single job URLs.
3. **Scrape full job description** — keep it ticked to get the complete description for every job, or untick it for faster runs.
4. **Cache project name** — use the same name on every scheduled run to get only new jobs.
5. **Max items per search** — the maximum number of unique jobs saved for each keyword or search URL.

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| Search keywords | array | — | `["nursing"]` | Job titles or skills to search for. Each keyword is searched separately. |
| Search or job URLs | array | — | — | HiringCafe search URLs (filters kept as they are) or single job URLs. |
| Cache project name | string | — | — | Reuse the same name on each run to get only new jobs. Already-seen jobs are skipped, not charged, and not counted in Max items. |
| Scrape full job description | boolean | — | `true` | Fetch the full description for every job. Job URLs always include it. |
| Max items per search | integer | — | `5` | Maximum unique jobs saved for each keyword or search URL. |
| Max concurrency | integer | — | `5` | How many requests run in parallel. |
| Proxy configuration | object | — | Apify residential, US | Residential proxies are needed for this website. |

**Supported URL types:**

- Search: `https://hiringcafe.com/classic?searchState=%7B%22searchQuery%22%3A%22nurse%22%7D`
- Job: `https://hiringcafe.com/viewjob/simplr___kidspeace___14389`

### 📦 HiringCafe jobs scraper output data

Each record is a JSON object with the keys `id`, `url`, `applyUrl`, `title`, `coreJobTitle`, `companyName`, `companyWebsite`, `companyTagline`, `companySectorAndIndustry`, `location`, `coordinates`, `workplaceType`, `commitment`, `seniorityLevel`, `roleType`, `jobCategory`, `salaryMin`, `salaryMax`, `salaryPeriod`, `salaryCurrency`, `postedAt`, `requirementsSummary`, `technicalTools`, `licensesOrCertifications`, `visaSponsorship`, `source`, `isExpired`, `descriptionHtml`, `description` and `scrapedAt`, plus `changeType` (`new`) when a cache project name is set. There is one **Overview** view: a compact table with the most useful fields.

**Output at a glance:**

| Job | Company | Location | Type | Level |
| --- | ------- | -------- | ---- | ----- |
| [Typescript Engineer](https://hiringcafe.com/viewjob/betterteam___turing___typescript-engine) | Turing | Seattle, Washington, US | Remote | Mid Level |
| [Nursing Technician - Nursing Secretary](https://hiringcafe.com/viewjob/workday___conehealth-wd12-cone_health-careers___nursing-technician---nursing-secretary_jr153613) | Conehealth | Greensboro, North Carolina, US | Onsite | No Prior Experience |

**Sample output (raw JSON):**

```json
{
    "id": "workday___conehealth-wd12-cone_health-careers___nursing-technician---nursing-secretary_jr153613",
    "url": "https://hiringcafe.com/viewjob/workday___conehealth-wd12-cone_health-careers___nursing-technician---nursing-secretary_jr153613",
    "applyUrl": "https://conehealth.wd12.myworkdayjobs.com/cone_health-careers/job/Wesley-Long-Hospital/Nursing-Technician---Nursing-Secretary_JR153613",
    "title": "Nursing Technician - Nursing Secretary",
    "coreJobTitle": "Nursing Technician - Nursing Secretary",
    "companyName": "Conehealth",
    "companyWebsite": null,
    "companyTagline": "A healthcare organization focused on collaborative work, employee growth, and community recognition.",
    "companySectorAndIndustry": "Healthcare",
    "location": "Greensboro, North Carolina, United States",
    "coordinates": { "lat": 36.0726, "lng": -79.792 },
    "workplaceType": "Onsite",
    "commitment": ["Part Time"],
    "seniorityLevel": "No Prior Experience Required",
    "roleType": "Individual Contributor",
    "jobCategory": "Healthcare Services - Nursing",
    "salaryMin": null,
    "salaryMax": null,
    "salaryPeriod": null,
    "salaryCurrency": "USD",
    "postedAt": "2026-08-14T00:00:00.000Z",
    "requirementsSummary": "High school diploma or equivalent; state-required North Carolina DHHR certification, nurse aide certification, and BLS/CPR certification. No experience required.",
    "technicalTools": ["telephone"],
    "licensesOrCertifications": ["nurse aide", "bls", "cpr"],
    "visaSponsorship": false,
    "source": "workday",
    "isExpired": false,
    "descriptionHtml": "<p>…</p>",
    "description": "…",
    "scrapedAt": "2026-10-11T14:35:52.176Z"
}
```

### 🐍 How to scrape HiringCafe with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("confidential_gnat/hiringcafe-jobs-scraper").call(run_input={
    "keywords": ["nursing"],
    "maxItems": 5,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('confidential_gnat/hiringcafe-jobs-scraper').call({
    keywords: ['nursing'],
    maxItems: 5,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/confidential_gnat~hiringcafe-jobs-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["nursing"], "maxItems": 5}'
```

### 💡 What you can use HiringCafe job data for

- Building job boards and aggregators with fresh listings
- Tracking hiring demand for a skill, title or industry over time
- Salary and compensation benchmarking
- Lead generation from companies that are actively hiring
- Recruiting research on seniority, licences and remote or onsite mix

Recruiters, HR analysts, job-board operators and market researchers across technology, healthcare and many other industries typically use this data.

### ⚠️ Limitations of the HiringCafe jobs scraper

- **Direct job URLs** — the site returns only the description for a single job URL, so fields like company, location and salary stay `null`. Use a keyword or search URL to get the full record.
- **Missing compensation** — most listings do not publish a salary, so `salaryMin` and `salaryMax` are often `null`.

### ❓ Frequently asked questions

#### Can I scrape HiringCafe legally?

The actor only collects job data that is already publicly visible on hiringcafe.com — no login, paywall or private content is accessed. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn*), but you are responsible for complying with the site's Terms of Service and applicable laws such as GDPR and CCPA if personal data is involved.

#### What data does the HiringCafe scraper return?

Title, company, location, coordinates, workplace type, commitment, seniority, compensation, requirements summary, skills, licences, visa sponsorship and the apply link. With **Scrape full job description** on, you also get the description as HTML and plain text.

#### How many jobs can I scrape from one search?

`maxItems` limits unique jobs for each keyword or search URL, not for the whole run. Searches can match hundreds of thousands of jobs, so set a limit that fits your use.

#### Do I need a proxy to scrape hiringcafe.com?

Yes. The input defaults to Apify residential proxies in the US, which this website needs to run reliably.

#### How do I scrape HiringCafe with Python?

Use the Python example above: call the actor with `apify-client` and iterate over the dataset items.

#### Can I run this HiringCafe scraper on a schedule?

Yes, use Apify Schedules to run it daily or weekly. Set the same **Cache project name** on every run and each run returns only jobs not seen before, so you are not charged twice for the same job.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

#### Why are salary fields empty for some jobs?

Employers on HiringCafe often do not publish compensation, so the actor returns `null` rather than guessing.

### 🔗 Other actors you may find useful

| Actor | Description |
| ----- | ----------- |
| [💼 Dice Jobs Scraper](https://apify.com/confidential_gnat/dice-jobs-scraper) | Scrapes tech job listings from Dice by keyword, search URL or job URL. |
| [📧 Decision Maker Email Finder](https://apify.com/confidential_gnat/decision-maker-email-finder) | Finds founders, executives and department heads at any company website. |
| [🏢 BBB Business Info and Emails Scraper](https://apify.com/confidential_gnat/bbb-business-scraper) | Scrapes Better Business Bureau businesses: contacts, rating and reviews. |
| [📰 Google News AI Scraper](https://apify.com/confidential_gnat/google-news-ai-scraper) | Searches Google News by keyword with optional full text and AI summaries. |
| [📊 Sentiment Analysis Using Jev](https://apify.com/confidential_gnat/sentiment-analysis) | Classifies text as positive, negative, neutral or mixed, or into custom labels. |

### 💬 Support & contact

If you encounter any issues or have questions, please [open an issue](https://apify.com/confidential_gnat/hiringcafe-jobs-scraper/issues/open) or reach out via the [Apify Community Forum](https://community.apify.com/).

You can also find more of our actors on the [Actor Flow](https://apify.com/confidential_gnat) page.

# Actor input Schema

## `keywords` (type: `array`):

Job titles or skills to search for, for example nurse, typescript developer. Each keyword is searched separately.

## `startUrls` (type: `array`):

HiringCafe search result URLs (with filters already applied) or single job URLs, for example https://hiringcafe.com/viewjob/simplr___kidspeace___14389.

## `scrapeDetails` (type: `boolean`):

Fetch the full job description for every job. Turn off for faster runs with the summary only. Job URLs always include the description.

## `cacheProjectName` (type: `string`):

Use the same name on each scheduled run to get only new jobs. Jobs already scraped under this name are skipped and not charged, and they do not count towards Max items. Each record gets changeType: new.

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

Maximum unique jobs saved for each keyword or search URL.

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

Residential proxies are needed for this website.

## Actor input object example

```json
{
  "keywords": [
    "nursing"
  ],
  "startUrls": [],
  "scrapeDetails": true,
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "keywords": [
        "nursing"
    ],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/hiringcafe-jobs-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 = {
    "keywords": ["nursing"],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/hiringcafe-jobs-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 '{
  "keywords": [
    "nursing"
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call confidential_gnat/hiringcafe-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/hiringcafe-jobs-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/FYmSsxpO19c7rFj8h/builds/ASzcJ3UviAoLTNs2e/openapi.json
