# Breezy HR Jobs Scraper (`jobscrawler/breezy-hr-jobs-scraper`) Actor

Read real active jobs from public Breezy HR company feeds and matching full-description detail pages. Supports bounded concurrency, source filters, actual compensation fields and rich source-preserving output. No paid vendor API key.

- **URL**: https://apify.com/jobscrawler/breezy-hr-jobs-scraper.md
- **Developed by:** [Jobs Scraper](https://apify.com/jobscrawler) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 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.

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

### What does Breezy HR Jobs Scraper do?

Extract real public jobs from company career boards hosted by [Breezy HR](https://breezy.hr). This Actor does not substitute another provider, generate sample jobs, or turn page navigation into records. No paid vendor API key is required. The default is [a verified public source](https://univers.breezy.hr/), with an output limit of 10 actual listings. Results change as employers publish or remove vacancies.

### How does extraction work?

The Actor reads the company board’s public /json feed, filters available source location, department, country, remote flags and posting dates, then retrieves full JobPosting JSON-LD from matching public /p/ detail pages. Descriptions are required and source URLs/IDs must agree. Detail requests use bounded concurrency, capped at four. Search queries are matched against actual title, description, employer and department text, not metadata key names. A query appearing only in a full description is supported; an earlier title mismatch does not discard that listing.

### What data can be extracted?

| Field | Type | Meaning |
| --- | --- | --- |
| jobId, jobUrl | string | Actual source identity and canonical public listing URL |
| title | string | Source-provided job/project title |
| companyName | string | Published employer or project company |
| location | string | Available source location labels, not the requested search location |
| description, descriptionHtml | string | Full public description and original markup when available |
| jobType, salary | string | Native contract labels and available compensation data |
| skills | array | Explicit source skill labels when available |
| remote | boolean | Source remote availability; hybrid can count as remote availability |
| datePosted | string | Source publication date |
| rawData | object | Rich original public fields and matching list/detail records |

The existing 21-field normalized contract is retained. Unknown, null, blank and empty-container values are omitted; genuine zero and false values remain. No currency, employer, rate, date or location is guessed. Description markup is untrusted source content; sanitize it before rendering in your own application. A listing URL is not evidence that an application was submitted.

These simplified records were observed in a real local run on 2026-10-23. They are documentation, not fallback rows inserted into future runs; listings can change. The actual dataset also contained full descriptions and rich source fields.

```json
[
  {
    "title": "AI Business Consultant Intern",
    "companyName": "Univers",
    "jobUrl": "https://univers.breezy.hr/p/6299ce691d5b01-ai-business-consultant-intern"
  },
  {
    "title": "AI Engineer",
    "companyName": "Univers",
    "jobUrl": "https://univers.breezy.hr/p/5e3cd0dda3ac01-ai-engineer"
  }
]
```

### How to run the Actor

1. Open the Input tab and keep the default source or provide an official public board/search URL.
2. Set maxItems, normally 10, and optional searchQuery, keyword or location values.
3. Run and inspect the actual dataset together with RUN_SUMMARY and SOURCE_METADATA.
4. Download JSON, HTML, CSV or Excel, or use the API tab for integrations.

### Input, source URLs and filtering

maxItems defaults to 10, with a range of 1–1000. searchQuery takes priority over the legacy keyword shortcut. startUrl overrides startUrls; otherwise the configured public default is used. Multiple sources share an output cap. Native board location, department, country and recognized remote URL filters take priority over corresponding shortcuts. Location/country checks use actual source values. remoteOnly means at least one explicit source location permits remote work, including hybrid; it does not assert fully remote work. publishedAfter accepts an ISO date. Feed ordering is retained; the Actor does not claim a date sort that it has not implemented. Public /p/ job URLs are also supported.

Only public HTTPS routes and GET requests are supported here. Leave requestBody empty. Account, application-submission, consent and private-contact actions are not performed. The example company is a real configurable default, not a claim that it represents every employer using Breezy HR.

### Diagnostics and verification

RUN_SUMMARY records actual output counts and status. SOURCE_METADATA contains source/detail request evidence, durations, bytes, status and explicitly configured proxy usage without credentials. ERROR_DIAGNOSTIC stays outside the dataset. Zero usable results fail the run, and inaccessible details are not replaced with navigation titles or synthetic descriptions. Sparse filters may legitimately produce fewer records. Not every possible native filter combination or production deployment has been verified by a local default test.

Test locally using apify run. Local storage is not automatically uploaded to Apify Console. Deployment requires authorized apify push access and a separate production run with the same input. Never remove maintenance based only on a local test or a successful empty crawler.

### Costs, limitations and support

Public source reads do not need a paid vendor key, but Apify execution, storage and optional proxies can incur costs. Proxy fallback must be explicitly configured; no CAPTCHA, login requirement or source access control is bypassed. Consult current Store/platform pricing instead of relying on a fixed per-run estimate. Use public data responsibly under source terms and applicable law; avoid unnecessary personal-data collection. This Actor is not affiliated with Breezy HR or the employers listed. Use the Issues tab with a sanitized input, source URL and run ID for support. Do not include credentials.

# Actor input Schema

## `startUrl` (type: `string`):

Optional official public source search/board or detail URL. Overrides startUrls. Account and application actions are not supported.

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

Official public source URLs. Defaults are verified real sources; multiple sources share the global output cap.

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

Maximum records to output.

## `keyword` (type: `string`):

Optional case-insensitive title or description filter.

## `searchQuery` (type: `string`):

Optional text query matched against actual title, full description, employer and department; never metadata key names.

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

Optional case-insensitive source location label filter. Native board location parameter takes precedence.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds.

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

Bounded parallel HTTP source requests; pagination within each source remains ordered.

## `maxPages` (type: `integer`):

Maximum pagination requests per source. Stops sooner when maxItems is reached.

## `maxRetries` (type: `integer`):

Retries network failures and transient HTTP errors with backoff. Does not retry denied requests.

## `requestMethod` (type: `string`):

These public source routes support GET only.

## `requestBody` (type: `object`):

Leave empty; no POST body is used by this source.

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

Explicitly configured custom or Apify proxy fallback after a blocked direct request. Off by default.

## `department` (type: `string`):

Optional case-insensitive source department filter; a native board department URL parameter takes precedence.

## `country` (type: `string`):

Optional exact source country name or ISO identifier.

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

Require an explicit remote-enabled source location. Includes hybrid; does not mean fully remote.

## `publishedAfter` (type: `string`):

Optional ISO date or timestamp, checked against the actual published_date.

## Actor input object example

```json
{
  "startUrl": "https://univers.breezy.hr/",
  "startUrls": [
    {
      "url": "https://univers.breezy.hr/"
    }
  ],
  "maxItems": 10,
  "keyword": "engineer",
  "searchQuery": "engineer",
  "location": "",
  "requestTimeoutSecs": 30,
  "maxConcurrency": 4,
  "maxPages": 20,
  "maxRetries": 2,
  "requestMethod": "GET",
  "requestBody": {},
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "department": "",
  "country": "",
  "remoteOnly": false,
  "publishedAfter": ""
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing extracted public records.

## `runSummary` (type: `string`):

Run status and output counts.

## `diagnostics` (type: `string`):

Source metadata and sanitized errors.

# 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 = {
    "startUrl": "https://univers.breezy.hr/",
    "startUrls": [
        {
            "url": "https://univers.breezy.hr/"
        }
    ],
    "maxItems": 10,
    "keyword": "engineer",
    "searchQuery": "engineer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("jobscrawler/breezy-hr-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 = {
    "startUrl": "https://univers.breezy.hr/",
    "startUrls": [{ "url": "https://univers.breezy.hr/" }],
    "maxItems": 10,
    "keyword": "engineer",
    "searchQuery": "engineer",
}

# Run the Actor and wait for it to finish
run = client.actor("jobscrawler/breezy-hr-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 '{
  "startUrl": "https://univers.breezy.hr/",
  "startUrls": [
    {
      "url": "https://univers.breezy.hr/"
    }
  ],
  "maxItems": 10,
  "keyword": "engineer",
  "searchQuery": "engineer"
}' |
apify call jobscrawler/breezy-hr-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jobscrawler/breezy-hr-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/LhdAeKnw7u14aElde/builds/CYo6zP07nJghaST3P/openapi.json
