# Kalibrr Job Scraper — Philippines (`unfenced-group/kalibrr-scraper`) Actor

Scrape job listings from Kalibrr.com — the Philippines' leading tech-first hiring platform with 900+ active companies. Returns title, company, location, salary range, work setup (on-site/remote/hybrid), experience level, skills and job description.

- **URL**: https://apify.com/unfenced-group/kalibrr-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 7 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.59 / 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/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

## Kalibrr Job Scraper — Philippines

![Kalibrr Job Scraper — Philippines](https://api.apify.com/v2/key-value-stores/lJlifu6C8YQfZMPKE/records/kalibrr-scraper)

Extract structured job listings from [Kalibrr.com](https://www.kalibrr.com), the Philippines' leading hiring platform serving employers across the country and Southeast Asia. Returns full job data including descriptions, salary ranges, skills, and work arrangements — no API key or proxy required.

***

### Why this scraper?

#### 🇵🇭 Philippines' top job board

Captures all 900+ active vacancies across every sector on the country's primary digital hiring platform, covering Metro Manila, Cebu, Davao, and beyond.

#### 📍 Powerful built-in filters

Filter by keyword, city, job function (IT and Software, Accounting, Healthcare, etc.), work arrangement (WFH, hybrid), and posting age — server-side, so you only pay for what you need.

#### 📚 Rich structured output

Each listing includes company details, skills, perks, salary (when published), education level, work experience requirements, and application deadlines. Enable `enrichDetail` for 11 additional fields from Kalibrr's detail API.

#### 📌 Smart repost detection

Built-in cross-run deduplication with a 90-day fingerprint cache. Schedule daily runs to receive only new listings — no duplicates.

#### 🔗 Direct URL scraping

`startUrls` mode lets you scrape a specific list of Kalibrr job URLs directly via the detail API, bypassing search entirely.

***

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `searchQuery` | string | `"developer"` | Job keywords to search for. Accepts a single keyword ('developer'), a comma-separated list ('nurse, doctor'), or a JSON array. Leave empty to retrieve all active jobs. |
| `location` | string | (empty) | Filter by city, e.g. 'Makati', 'Cebu City', 'Manila', 'Jakarta'. Leave empty for all locations. |
| `country` | string | (empty) | Filter results by country. Kalibrr has listings in Philippines and Indonesia. Use 'Philippines' or 'Indonesia'. Leave empty for all countries. |
| `jobFunction` | string | (empty) | Filter by job function, e.g. 'IT and Software', 'Accounting and Finance', 'Customer Service', 'Healthcare'. Leave empty for all. |
| `tenure` | string | (empty) | Filter by employment type. |
| `isRemote` | boolean | `false` | When enabled, returns only work-from-home job listings. |
| `isHybrid` | boolean | `false` | When enabled, returns only hybrid job listings. |
| `isOpenToFreshGrads` | boolean | `false` | When enabled, returns only jobs open to fresh graduates. |
| `daysOld` | integer | `0` | Return only jobs posted within this many days. Set 0 to disable and return all available jobs. |
| `skipReposts` | boolean | `false` | Skip jobs already seen in previous runs (90-day fingerprint cache). Ideal for daily scheduling. |
| `outputMode` | string | `"full"` | Full: all 30+ fields including descriptions, perks, qualifications. Compact: 20 core fields optimised for AI agents and MCP workflows. |
| `enrichDetail` | boolean | `false` | When enabled, fetches /api/jobs/{id} for each result to add extra fields: dutiesText, educationFields, preferredCourses, licenses, monthsWorkExperience, minAge, maxAge, sex, videoUrls, acceptWillingToRelocate, updatedAt. Doubles the number of API requests. |
| `startUrls` | array | (empty) | Optional list of specific Kalibrr job page URLs to scrape directly, bypassing search. |
| `fetchDetails` | boolean | `false` | Fetch full job details from individual listing pages. |
| `maxItems` | integer | `100` | Maximum number of job listings to return. Controls spend precisely. |

***

### Output schema

#### Always present

| Field | Type | Description |
|---|---|---|
| `id` | string | Unique job ID assigned by Kalibrr. |
| `url` | string | Canonical URL of the job posting. |
| `title` | string | Job title as published. |
| `company` | string | null | Hiring company name. |
| `companyWebsite` | string | null | Company website URL. |
| `industry` | string | null | Industry sector of the company. |
| `verifiedBusiness` | boolean | null | Whether the company is verified by Kalibrr. |
| `city` | string | null | City of the role. |
| `region` | string | null | Region, e.g. `"National Capital Region"`, `"Central Visayas"`. |
| `country` | string | Country of the role, e.g. `"Philippines"`. |
| `jobFunction` | string | null | Job function category, e.g. `"IT and Software"`. |
| `tenure` | string | null | Employment type, e.g. `"Full time"`, `"Part time"`, `"Contract"`. |
| `workExperience` | number | null | Minimum years of work experience required. |
| `educationLevel` | string | null | Minimum education level required. |
| `isRemote` | boolean | Whether the role is fully remote. |
| `isHybrid` | boolean | Whether the role is hybrid. |
| `isOpenToFreshGrads` | boolean | Whether the role is open to fresh graduates. |
| `numberOfOpenings` | number | null | Number of open vacancies. |
| `responseRate` | number | null | Employer's response rate (0–1 scale). |
| `skills` | string\[] | Required skills as listed on the posting. |
| `perks` | string\[] | Benefits/perks offered (e.g. `"Medical Insurance"`, `"Paid Leave"`, `"Performance Bonus"`). |
| `salaryMin` | number | null | Minimum salary (null if employer chose not to publish). |
| `salaryMax` | number | null | Maximum salary (null if not published). |
| `salaryCurrency` | string | null | Salary currency code, e.g. `"PHP"`. |
| `salaryInterval` | string | null | Pay frequency, e.g. `"monthly"`, `"annually"`. |
| `applyUrl` | string | Application URL (redirect or job URL). |
| `publishDate` | string | null | Publication date in `YYYY-MM-DD` (Philippines time). |
| `publishDateISO` | string | null | Publication date in ISO 8601 format. |
| `closingDate` | string | null | Application deadline in `YYYY-MM-DD`. |
| `descriptionHtml` | string | null | Full job description as HTML. |
| `descriptionText` | string | null | Full description as plain text. |
| `descriptionMarkdown` | string | null | Full description converted to Markdown. |
| `qualificationsHtml` | string | null | Qualifications section as HTML. |
| `qualificationsText` | string | null | Qualifications as plain text. |
| `contentHash` | string | 16-char MD5 fingerprint for change detection. |
| `source` | string | Always `"kalibrr.com"`. |
| `scrapedAt` | string | ISO timestamp of retrieval. |
| `isRepost` | boolean | `true` if this job was seen in a previous run. |
| `originalPublishDate` | string | null | Date of first appearance when `isRepost` is `true`. |
| `originalUrl` | string | null | Original URL when `isRepost` is `true`. |
| `changeStatus` | string | Always `"NEW"` on first encounter. |

#### Detail-enriched fields (`enrichDetail: true` or `startUrls` mode)

These fields are `null` in standard search mode. They are populated when `enrichDetail: true` (adds one `/api/jobs/{id}` call per result) or automatically when using `startUrls` (detail API is used natively).

| Field | Type | Description |
|---|---|---|
| `dutiesText` | string | null | Additional duties/responsibilities section as plain text. |
| `educationFields` | string | null | Specific field of study required, e.g. `"Engineering"`. |
| `preferredCourses` | string\[] | null | Preferred academic courses, e.g. `["Nursing", "Medical Technology"]`. |
| `licenses` | string | null | Professional licenses required. |
| `monthsWorkExperience` | number | null | Minimum work experience in months (more granular than `workExperience`). |
| `minAge` | number | null | Minimum age requirement. |
| `maxAge` | number | null | Maximum age requirement. |
| `sex` | string | null | Gender preference if specified. |
| `videoUrls` | string\[] | null | Video content URLs attached to the listing. |
| `acceptWillingToRelocate` | boolean | null | Whether the employer accepts candidates willing to relocate. |
| `updatedAt` | string | null | ISO timestamp of when the listing was last modified. |

#### Example record

```json
{
  "id": "265013",
  "url": "https://www.kalibrr.com/c/awsys-i/jobs/265013/site-reliability-engineer",
  "title": "Site Reliability Engineer",
  "company": "Advanced World Systems, Inc. / Advanced World Solutions, Inc. (AWS)",
  "companyWebsite": "http://www.awsys-i.com/",
  "industry": "Information Technology / IT",
  "verifiedBusiness": true,
  "city": "Cebu City",
  "region": "Central Visayas",
  "country": "Philippines",
  "jobFunction": "IT and Software",
  "tenure": "Full time",
  "workExperience": 3,
  "educationLevel": "Bachelor",
  "isRemote": false,
  "isHybrid": false,
  "isOpenToFreshGrads": false,
  "numberOfOpenings": 1,
  "responseRate": 0.82,
  "skills": ["Linux Server", "Linux", "Computer System Administration"],
  "perks": ["Medical Insurance", "Paid Leave", "Performance Bonus", "Life Insurance", "Retirement Plan"],
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "salaryInterval": null,
  "applyUrl": "https://www.kalibrr.com/c/awsys-i/jobs/265013/site-reliability-engineer",
  "publishDate": "2026-04-18",
  "publishDateISO": "2026-04-18T02:15:32.000Z",
  "closingDate": "2026-06-18",
  "descriptionHtml": "<p>We are looking for a Site Reliability Engineer...</p>",
  "descriptionText": "We are looking for a Site Reliability Engineer...",
  "descriptionMarkdown": "We are looking for a Site Reliability Engineer...",
  "qualificationsHtml": "<ul><li>3+ years Linux experience</li></ul>",
  "qualificationsText": "3+ years Linux experience",
  "dutiesText": null,
  "educationFields": null,
  "preferredCourses": null,
  "licenses": null,
  "monthsWorkExperience": 36,
  "minAge": null,
  "maxAge": null,
  "sex": null,
  "videoUrls": null,
  "acceptWillingToRelocate": true,
  "updatedAt": "2026-04-20T07:12:44.123456+00:00",
  "contentHash": "a3f2d1b4c9e8f701",
  "source": "kalibrr.com",
  "scrapedAt": "2026-05-03T10:30:00.000Z",
  "isRepost": false,
  "originalPublishDate": null,
  "originalUrl": null,
  "changeStatus": "NEW"
}
```

***

### Examples

**Search for IT jobs in Manila:**

```json
{
  "keywords": "developer",
  "location": "Manila",
  "maxResults": 100
}
```

**Remote jobs in any function:**

```json
{
  "isRemote": true,
  "maxResults": 200
}
```

**Filter by job function:**

```json
{
  "jobFunction": "IT and Software",
  "location": "Cebu City",
  "maxResults": 100
}
```

**Fresh graduate opportunities:**

```json
{
  "isOpenToFreshGrads": true,
  "daysOld": 30,
  "maxResults": 100
}
```

**Daily feed — new jobs only (schedule this daily):**

```json
{
  "daysOld": 1,
  "skipReposts": true,
  "maxResults": 500
}
```

**Full enrichment with detail API fields:**

```json
{
  "keywords": "nurse",
  "enrichDetail": true,
  "maxResults": 50
}
```

**Scrape specific job URLs directly:**

```json
{
  "startUrls": [
    { "url": "https://www.kalibrr.com/c/awsys-i/jobs/265013/site-reliability-engineer" }
  ]
}
```

***

### 💰 Pricing

**$1.99 per 1,000 results** — you only pay for successfully retrieved listings. Failed retries and filtered reposts are never charged. With `enrichDetail: true`, pricing is approximately $3.49 per 1,000 (two API calls per result).

| Results | Standard | With enrichDetail |
|---|---|---|
| 100 | ~$0.20 | ~$0.35 |
| 1,000 | ~$1.99 | ~$3.49 |
| 10,000 | ~$19.90 | ~$34.90 |

Use the **Max results** cap in the input to control your spend exactly.

***

### Performance

| Run type | Results | Approx. time |
|---|---|---|
| Keyword search | 100 | ~30 sec |
| Full catalogue | 964 | ~4 min |
| Daily feed (new only) | 50–150 | ~1 min |
| Enriched (enrichDetail=true) | 100 | ~60 sec |

***

### Known limitations

- Salary information is only published by a subset of employers; most listings return `null` salary fields.
- Skills and perks arrays may be empty for listings that don't use Kalibrr's structured fields.
- Contact persons and recruiter details are intentionally excluded (PII policy).
- Job count reflects live active listings at time of run (~964 as of May 2026).

***

### Technical details

- **Source:** kalibrr.com — Philippines' primary digital hiring platform
  - Search: `GET /kjs/job_board/search` (paginated, all core fields)
  - Detail: `GET /api/jobs/{id}` (enrichDetail mode and startUrls)
- **Memory:** 512 MB
- **Repost storage:** KeyValueStore `kalibrr-job-dedup`, 90-day TTL
- **Retry:** Automatic retry on network errors, exponential backoff, 3 attempts per request

***

### Additional services

Need a custom actor, additional filters, scheduled runs, or integration support?.nl]\(mailto:info@unfencedgroup.nl) — we build on request.

***

### Related scrapers

Other scrapers in our **Jobs — East & Southeast Asia** collection:

- [Daijob.com Scraper](https://apify.com/unfenced-group/daijob-scraper)
- [Rikunabi NEXT Scraper](https://apify.com/unfenced-group/rikunabi-scraper)
- [Glints Job Scraper 🌏](https://apify.com/unfenced-group/glints-scraper)
- [MyNavi Tenshoku Job Scraper](https://apify.com/unfenced-group/mynavi-scraper)
- [Doda.jp Job Scraper](https://apify.com/unfenced-group/doda-scraper)

***

### Run it on a schedule

This actor is built for repeat use. Set it to run daily, weekly, or hourly, and the data keeps flowing without you touching it.

- **Schedule runs** — open the actor, go to Schedules, and pick a cadence. Each run only charges you for the results it returns.
- **Connect it to your stack** — push results straight to Google Sheets, Slack, a webhook, or your database using Apify Integrations. No glue code needed.
- **Pull results via API** — every run writes a clean dataset you can fetch with one API call, ready for whatever you build on top of it.

Set it once and it runs on its own.

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

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

Job keywords to search for. Accepts a single keyword ('developer'), a comma-separated list ('nurse, doctor'), or a JSON array. Leave empty to retrieve all active jobs.

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

Filter by city, e.g. 'Makati', 'Cebu City', 'Manila', 'Jakarta'. Leave empty for all locations.

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

Filter results by country. Kalibrr has listings in Philippines and Indonesia. Use 'Philippines' or 'Indonesia'. Leave empty for all countries.

## `jobFunction` (type: `string`):

Filter by job function, e.g. 'IT and Software', 'Accounting and Finance', 'Customer Service', 'Healthcare'. Leave empty for all.

## `tenure` (type: `string`):

Filter by employment type.

## `isRemote` (type: `boolean`):

When enabled, returns only work-from-home job listings.

## `isHybrid` (type: `boolean`):

When enabled, returns only hybrid job listings.

## `isOpenToFreshGrads` (type: `boolean`):

When enabled, returns only jobs open to fresh graduates.

## `daysOld` (type: `integer`):

Return only jobs posted within this many days. Set 0 to disable and return all available jobs.

## `skipReposts` (type: `boolean`):

Skip jobs already seen in previous runs (90-day fingerprint cache). Ideal for daily scheduling.

## `outputMode` (type: `string`):

Full: all 30+ fields including descriptions, perks, qualifications. Compact: 20 core fields optimised for AI agents and MCP workflows.

## `enrichDetail` (type: `boolean`):

When enabled, fetches /api/jobs/{id} for each result to add extra fields: dutiesText, educationFields, preferredCourses, licenses, monthsWorkExperience, minAge, maxAge, sex, videoUrls, acceptWillingToRelocate, updatedAt. Doubles the number of API requests.

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

Optional list of specific Kalibrr job page URLs to scrape directly, bypassing search.

## `fetchDetails` (type: `boolean`):

Fetch full job details from individual listing pages.

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

Maximum number of job listings to return. Controls spend precisely.

## Actor input object example

```json
{
  "searchQuery": "developer",
  "location": "",
  "country": "",
  "jobFunction": "",
  "tenure": "",
  "isRemote": false,
  "isHybrid": false,
  "isOpenToFreshGrads": false,
  "skipReposts": false,
  "outputMode": "full",
  "enrichDetail": false,
  "startUrls": [],
  "fetchDetails": false,
  "maxItems": 100
}
```

# 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 = {
    "searchQuery": "developer",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/kalibrr-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 = {
    "searchQuery": "developer",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/kalibrr-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 '{
  "searchQuery": "developer",
  "maxItems": 100
}' |
apify call unfenced-group/kalibrr-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/kalibrr-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cMzb3Cs41hAeWUEwo/builds/MSsn9BrFiGsoBv9yC/openapi.json
