# Breezy HR Jobs Scraper: Any Company's Breezy Careers Page (`jtpalms/breezy-jobs`) Actor

Get every open job from any company's Breezy HR careers site through its public JSON feed: title, department, location, remote or hybrid, employment type, salary when shown, publish date and description. Filter by keyword and location, and schedule it to get only new jobs. USD 1.50 per 1,000 jobs.

- **URL**: https://apify.com/jtpalms/breezy-jobs.md
- **Developed by:** [JT Palms](https://apify.com/jtpalms) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 job listings

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

## Breezy HR Jobs Scraper: every open job from any company on Breezy HR

Give it a list of companies that hire with Breezy HR and get back every open job as clean rows: title, department, locations, remote or hybrid, employment type, salary when shown, publish date, job and apply links and the description as plain text. It reads the public JSON feed that Breezy's own job widget uses on company websites, so there is no browser, no proxy and no blocking. A company's jobs take well under a second.

**USD 1.50 per 1,000 jobs.** Companies that cannot be found are reported free.

### What people use it for

- **Sales signals from hiring.** Breezy HR is popular with small and mid-sized businesses, agencies and manufacturers. Pull the open jobs of your target accounts every week, filter by department or keyword, and send new roles to your CRM, Clay or Slack.
- **Job boards and newsletters.** Fill a local, remote or niche job board straight from the source, with salary where the company shows it and a direct apply link.
- **Recruiting market research.** Compare hiring and pay across companies by role, location and workplace type.
- **Job alerts.** Schedule it with **Only new jobs** turned on and receive only postings that appeared since the last run.

### Sample output

A real row (description trimmed):

```json
{
  "source": "breezy",
  "company": "blenderbox",
  "companyName": "Blenderbox",
  "jobId": "54b80fa53f6d",
  "title": "UX Strategist",
  "department": null,
  "team": null,
  "location": "United States",
  "locations": ["United States"],
  "workplaceType": "remote",
  "isRemote": true,
  "employmentType": "full_time",
  "compensation": {
    "min": 110000,
    "max": 150000,
    "currency": "USD",
    "interval": "year",
    "summary": "$110,000 - $150,000 / year"
  },
  "postedAt": "2026-01-23T20:53:20.504Z",
  "updatedAt": null,
  "jobUrl": "https://blenderbox.breezy.hr/p/54b80fa53f6d-ux-strategist",
  "applyUrl": "https://blenderbox.breezy.hr/p/54b80fa53f6d-ux-strategist/apply",
  "descriptionText": "Blenderbox is seeking a UX Strategist to lead experience strategy for complex, policy-driven digital projects. ...",
  "scrapedAt": "2026-09-29T03:20:19.277Z"
}
```

Real runs: Blenderbox returned 10 jobs (all remote, 5 with a salary) and Bold+ 8, each in under a second.

### How to use it

1. Add companies to **Companies**, one per line. Any of these work:
   - a company name: `blenderbox`
   - a careers site URL: `https://blenderbox.breezy.hr`
   - a job URL on it: `https://bold.breezy.hr/p/2d3309664253-bespoke-assembly`
2. Optionally narrow the results:
   - **Title keywords**: `engineer`, `AI`, `/product (manager|owner)/`
   - **Locations**: `New York`, `United States`, `Remote`
   - **Remote jobs only**
   - **Departments**: `Engineering`, `Production`
   - **Posted within (days)**: `7`
   - **Max jobs per company**: newest first
3. Click **Start**, then export as CSV, JSON or Excel, or read the dataset through the Apify API.

**Finding the company name.** It is the part before `.breezy.hr` in the careers site address. If the company shows its jobs on its own website, **Career Page Jobs Scraper** finds the Breezy name by itself.

#### Job alerts on a schedule

1. Turn on **Only new jobs** and set your filters.
2. Save the input as a task and add a schedule (daily or weekly).
3. Connect the results to email, Slack, Google Sheets or a webhook in the task's **Integrations** tab.

The first run returns all matching jobs. Every later run returns only jobs that were not delivered before.

### Input

| Field | What it does |
|---|---|
| `companies` | Company names or careers site URLs. Required. |
| `keywords` | Keep jobs whose title matches any keyword. Words match at their start (`engineer` finds "Engineering"); keywords of 3 letters or fewer must be a whole word. `/regex/` is supported. |
| `locations` | Keep jobs whose location contains any of these texts (city, state and country all count). |
| `remoteOnly` | Keep only jobs that can be done remotely. |
| `departments` | Keep jobs whose department contains any of these texts. |
| `postedWithinDays` | Keep jobs published in the last N days. `0` = any date. |
| `maxJobsPerCompany` | Newest jobs first, at most this many per company. `0` = no limit. |
| `onlyNewJobs` | Output only jobs not delivered by an earlier run (see FAQ). |
| `includeDescription` | Add the description as plain text, up to 5,000 characters. Default on. |
| `maxConcurrency` | Companies processed in parallel. Default 5. |

### Output fields

| Field | Notes |
|---|---|
| `company`, `companyName` | Breezy company name and the company's display name. |
| `jobId`, `title` | Breezy position ID and title. |
| `department` | The job's department, when set. `team` is always null. |
| `location`, `locations` | Primary location, and every location of the job. |
| `workplaceType`, `isRemote` | `remote` or `hybrid` from the job's remote setting in Breezy; null for on-site jobs unless the location says so. |
| `employmentType` | `full_time`, `part_time`, `contract`, `temporary`, `internship` or null. |
| `compensation` | When the company shows a salary: `min`, `max`, `currency` and `interval` read from the text, and `summary` as the company wrote it. |
| `postedAt`, `updatedAt` | Publish date, ISO 8601 in UTC. `updatedAt` is null. |
| `jobUrl`, `applyUrl` | The job page and the application form on Breezy. |
| `descriptionText` | Plain text, HTML removed, capped at 5,000 characters. |
| `error` | Only on rows for companies that could not be read. These rows are free. |

A `SUMMARY` record in the run's key-value store lists every company with its number of open jobs, matches, new jobs and errors.

### Pricing

| What | Price |
|---|---|
| Job listing in the results | USD 0.0015 (USD 1.50 per 1,000) |
| Company not found or wrong URL | Free |

Example: 50 companies with 20 open jobs each is 1,000 jobs, USD 1.50. With **Only new jobs** on a daily schedule you pay only for new postings, usually a few cents a day.

Set a maximum cost per run in the run options and the actor stops cleanly when it gets there; everything saved so far stays in the dataset.

### Limits

- **The actor identifies itself.** Every request carries the user agent `Mozilla/5.0 (compatible; breezy-jobs/1.0; +https://apify.com/JTPalms/breezy-jobs)`, with plain request headers. It never pretends to be a browser. Some sites block bots; a blocked request is reported as an error, not hidden.
- Only jobs the company publishes on its Breezy careers site.
- Salary is free text in Breezy. Amounts, currency and period are read when they are clear (a bare `$` counts as the local dollar of the job's country); the original text is always kept in `summary`.
- Some small companies keep very old postings open; `postedAt` shows it, and **Posted within (days)** filters them out.

### Related actors

- [Career Site Jobs: ATS Job Postings API for Greenhouse, Lever](https://apify.com/JTPalms/ats-jobs-index): Job postings from 17,000+ company career sites, read from the official job-board APIs of Greenhouse, Ashby, Lever, Workable, Teamtailor...
- [Career Page Jobs Scraper: Auto-Detects the Job Board (ATS)](https://apify.com/JTPalms/career-page-jobs): Give company websites or careers pages and get every open job.
- [Hiring Signals: Companies Hiring by Role, Team & Location](https://apify.com/JTPalms/hiring-signals): Find companies hiring right now, one row per company: open roles by team, seniority and location, roles posted in the last 7 and 30...
- [Workable Jobs Scraper: Any Company's Workable Careers Page](https://apify.com/JTPalms/workable-jobs): Get every open job from any company's Workable careers page through Workable's public jobs widget feed: title, department, location,...

### FAQ

**What does it read?** Only the public JSON feed of a Breezy careers site (`<company>.breezy.hr/json`), the same feed Breezy's own "embed your jobs" widget reads on company websites. It does not load job pages, collects no personal data, and never logs in or submits anything. If you republish jobs, link to `jobUrl` or `applyUrl` so candidates apply with the company.

**How does Only new jobs work?** The actor keeps, per company, the IDs of the jobs it has already delivered, in a key-value store named `breezy-jobs-monitor` in your own Apify account. Each run outputs only matching jobs whose ID is not in that list, then adds them. Jobs left out only by **Max jobs per company** are marked as seen too, so they do not come back later. Jobs cut off by your cost limit stay new for the next run. Closed jobs are dropped from the list automatically. To start over, delete the store in **Storage**.

**Are there sister actors?** Yes. Greenhouse, Lever, Ashby, Workable, Recruitee and Personio Jobs Scrapers give the same row format, and Career Page Jobs Scraper finds the right one from a company's website.

**Something missing or wrong?** Open an issue with the company name and what you expected.

**Is this an official Breezy HR product?** No. It is an independent tool that reads Breezy HR's public job feed. It is not affiliated with or endorsed by Breezy HR.

# Actor input Schema

## `companies` (type: `array`):

Breezy HR company names (blenderbox) or careers site URLs (https://blenderbox.breezy.hr). The company name is the part before .breezy.hr in the URL.

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

Keep jobs whose title matches any of these. A keyword matches at the start of a word, so engineer also finds Engineering. Keywords of 3 letters or fewer (AI, QA, SRE) must be a whole word. Wrap in slashes for a regular expression, for example /product (manager|owner)/.

## `locations` (type: `array`):

Keep jobs whose location contains any of these texts, for example New York, United States or Remote.

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

Keep only jobs that can be done remotely (remote workplace type, or a location or title that says remote).

## `departments` (type: `array`):

Keep jobs whose department contains any of these texts, for example Engineering or Sales.

## `postedWithinDays` (type: `integer`):

Keep jobs published in the last N days. 0 means any date.

## `maxJobsPerCompany` (type: `integer`):

Newest jobs first. 0 means no limit. Caps the cost on very large boards.

## `onlyNewJobs` (type: `boolean`):

Remember which jobs were already delivered for each company (in the key-value store breezy-jobs-monitor in your account) and output only jobs that are new since the last run. The first run outputs all matching jobs. Turn on for scheduled job alerts.

## `includeDescription` (type: `boolean`):

Add the job description as plain text (HTML removed, up to 5,000 characters).

## `maxConcurrency` (type: `integer`):

How many companies to process at the same time.

## Actor input object example

```json
{
  "companies": [
    "blenderbox",
    "https://bold.breezy.hr"
  ],
  "remoteOnly": false,
  "postedWithinDays": 0,
  "maxJobsPerCompany": 50,
  "onlyNewJobs": false,
  "includeDescription": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

All output rows in the default dataset (JSON, CSV, Excel via the format parameter).

## `summary` (type: `string`):

Counts and per-input status for this run.

# 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 = {
    "companies": [
        "blenderbox",
        "https://bold.breezy.hr"
    ],
    "maxJobsPerCompany": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("jtpalms/breezy-jobs").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 = {
    "companies": [
        "blenderbox",
        "https://bold.breezy.hr",
    ],
    "maxJobsPerCompany": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("jtpalms/breezy-jobs").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 '{
  "companies": [
    "blenderbox",
    "https://bold.breezy.hr"
  ],
  "maxJobsPerCompany": 50
}' |
apify call jtpalms/breezy-jobs --silent --output-dataset

```

## MCP server setup

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

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/3BbJHY4cSEIMWOH7R/builds/aRtj25ts3CjIbvEuS/openapi.json
