# Kalibrr Jobs Scraper (Philippines & Indonesia) - kalibrr.com (`asiajobs/kalibrr-jobs-scraper`) Actor

Extract job postings from Kalibrr, a top job board in the Philippines and Indonesia (lowongan kerja). Search by keyword, country, city, job function, job level and work-from-home, and get full descriptions, qualifications, salary, company, skills and apply links as clean JSON.

- **URL**: https://apify.com/asiajobs/kalibrr-jobs-scraper.md
- **Developed by:** [naphat zhaokun](https://apify.com/asiajobs) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Kalibrr Jobs Scraper (Philippines & Indonesia job listings / lowongan kerja)

Extract job postings from **[Kalibrr](https://www.kalibrr.com)**, a leading job board for the **Philippines** and **Indonesia**. Covers BPO, IT, sales, finance, government and remote (work from home / WFH) jobs. Get clean, structured JSON with the full job description, qualifications, salary in PHP or IDR, company, city, job level, benefits and the apply link.

### What you get

For every job posting:

| Field | Example |
|---|---|
| `title` | Junior Developer |
| `companyName`, `companyCode`, `companyId`, `companyWebsite`, `industry`, `verifiedCompany` | Hire Manila, hire-manila, Staffing / Recruiting, true |
| `location`, `city`, `region`, `country`, `address` | Makati, Metro Manila, Philippines |
| `tenure`, `workArrangement`, `isWorkFromHome`, `isHybrid` | Full time, Remote / Hybrid / On-site |
| `jobFunction`, `jobLevel`, `educationLevel`, `openToFreshGrads`, `numberOfOpenings` | IT and Software, Entry Level / Junior, Bachelor's degree |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryInterval` | 70000, 85000, PHP, month (when the employer shows it) |
| `description`, `qualifications` | full text (plus `descriptionHtml`, `qualificationsHtml`) |
| `skills`, `benefits`, `benefitsOther` | Bookkeeping; Medical / Health Insurance, Work from Home (when the employer tagged them) |
| `licenses`, `latitude`, `longitude` | job page only: **currently empty** on Apify (see the note below) |
| `postedAt`, `createdAt`, `applicationDeadline`, `isExpired`, `isFeatured` | ISO dates |
| `id`, `url`, `applyUrl`, `companyLogoUrl`, `scrapedAt` | |

### Use cases

- **Recruiters & HR tech**: see who is hiring in Manila, Cebu, Jakarta or Surabaya, for which roles and seniority.
- **Salary & labor-market research**: salary ranges (PHP / IDR) and demand by job function, city and level.
- **Sales lead generation**: companies that are hiring = companies that are growing, including BPO and outsourcing firms.
- **Job aggregators & AI job agents**: feed fresh Philippine and Indonesian listings (trabaho, lowongan kerja) into your own product.

### How to use

1. **Search by keyword** — set `keyword`, e.g. `developer`, `call center`, `accounting`, `akuntansi`. Leave it empty to list all jobs.
2. **Pick a country** — `Philippines`, `Indonesia` or both. Optionally add `locations` (cities such as `Makati`, `Taguig`, `Cebu City`, `Jakarta`, `Bandung`).
3. **Filter** by `jobFunction` (e.g. IT and Software), `jobLevel` (internship to director), `tenure` (full time, part time, freelance, contractual), and `workFromHome`, `hybrid` or `freshGrads`.
4. Choose a `sort` (relevance, newest, highest salary, expiry), set `maxItems` and run. Export as JSON, CSV, Excel, or use the API.

The description, qualifications, salary, skills, benefits and address come from the search results. With `includeDetails` on, the actor also tries each job page for licenses, map coordinates and the salary in its original currency. **Note:** Kalibrr currently blocks job pages from Apify's cloud IPs (HTTP 403). When that happens the actor notices after 3 pages and keeps going with the search data, so `licenses`, `latitude` and `longitude` stay empty. Your run still finishes quickly.

#### Example input

```json
{
  "keyword": "developer",
  "country": "Philippines",
  "locations": ["Makati", "Taguig"],
  "jobFunction": "IT and Software",
  "sort": "freshness",
  "maxItems": 200,
  "includeDetails": true
}
```

### Pricing

**$3 per 1,000 jobs** ($0.003 per job saved to the dataset), plus a tiny $0.00005 start fee per run. Platform usage (compute, proxy, storage) is included, so there are no surprise costs, and failed requests or empty searches cost only the start fee. Examples: 100 jobs cost $0.30, 10,000 jobs cost $30. The Apify free plan's $5 monthly credit covers about 1,600 jobs.

### Tips

- Run it on a schedule (daily) with `sort: "freshness"` and compare `id`s to get only **new** postings.
- Salary is only present when the employer chose to show it. When the job page is loaded, it is always in the job's own currency (PHP or IDR, sometimes USD for remote roles).
- When it comes from the search results only, Kalibrr converts the salary to the visitor's local currency. That case is marked with `salaryConverted: true`, and `salaryOriginalCurrency` gives the employer's currency.
- `applyUrl` is the employer's external application page when they use one, otherwise the Kalibrr job page.
- Use the Apify API or integrations (Google Sheets, Slack, Make, Zapier, n8n) to send new jobs anywhere.

### Notes

This actor reads publicly available job postings only. It does not log in, and it does not collect personal data about job seekers or recruiters. Please use the data in line with applicable laws (including the Philippine Data Privacy Act and Indonesia's PDP Law) and Kalibrr's terms.

Questions or a field you need? Open an issue on the actor page — fixes usually ship within a day.

# Actor input Schema

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

Search jobs by keyword (English, Filipino or Indonesian), e.g. 'developer', 'marketing', 'akuntansi'. Leave empty to list all jobs.

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

Country of the job.

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

Optional city names as Kalibrr writes them, e.g. 'Makati', 'Taguig', 'Cebu City', 'Jakarta', 'Surabaya', 'Bandung'. Jobs in any of these cities are returned.

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

Optional Kalibrr job function (category).

## `jobLevel` (type: `string`):

Optional seniority level.

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

Optional employment type.

## `workFromHome` (type: `boolean`):

Only remote / work-from-home (WFH) jobs.

## `hybrid` (type: `boolean`):

Only hybrid jobs.

## `freshGrads` (type: `boolean`):

Only jobs open to fresh grads.

## `sort` (type: `string`):

Sort order for the job list.

## `includeDetails` (type: `boolean`):

Try each job page for licenses, map coordinates and the salary in its original currency (PHP/IDR). Kalibrr currently blocks job pages from cloud IPs, so these stay empty; the actor switches to search data only after 3 pages. Description, qualifications, salary, skills, benefits and address come from search data and are always included.

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

Maximum number of jobs to return.

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

Proxy settings. Kalibrr works best WITHOUT a proxy (the default); only change this if you know you need one.

## Actor input object example

```json
{
  "keyword": "marketing",
  "country": "Philippines",
  "jobFunction": "any",
  "jobLevel": "any",
  "tenure": "any",
  "workFromHome": false,
  "hybrid": false,
  "freshGrads": false,
  "sort": "relevance",
  "includeDetails": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped job postings (dataset items).

# 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 = {
    "keyword": "marketing"
};

// Run the Actor and wait for it to finish
const run = await client.actor("asiajobs/kalibrr-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 = { "keyword": "marketing" }

# Run the Actor and wait for it to finish
run = client.actor("asiajobs/kalibrr-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 '{
  "keyword": "marketing"
}' |
apify call asiajobs/kalibrr-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,asiajobs/kalibrr-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/pSER0U406wTXgjG8D/builds/qc6Lf285fVuNNedIK/openapi.json
