# Foundit Job Scraper — India, Singapore, Malaysia & Indonesia (`haketa/foundit-scraper`) Actor

Scrape jobs from Foundit (formerly Monster) across India, Singapore, Malaysia and Indonesia in one run. Search by keyword and export title, company, salary, location, experience, skills, industry and apply link as clean JSON, CSV or Excel for recruiting and market research.

- **URL**: https://apify.com/haketa/foundit-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (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 $2.00 / 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?

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

## Foundit Job Scraper — India, Singapore, Malaysia & Indonesia

Collect job listings from **Foundit** (formerly Monster) across **India, Singapore, Malaysia and Indonesia** as clean, structured data. Search by keyword and get every matching job back with **title, company, salary, location, experience, skills, industry and apply link** — ready to export as JSON, CSV or Excel.

Built for **recruiters, staffing agencies, job seekers, HR‑tech products and labor‑market analysts** who need APAC hiring data across multiple countries without copying listings by hand.

***

### ✨ Why use this scraper

- **Four countries, one run** — scrape India, Singapore, Malaysia and Indonesia together, with a fair share of results from each portal.
- **Full job records** — company, location, experience range, skills, industry, function, employment type and apply link on every job.
- **Structured salary** — minimum/maximum salary and currency where the employer publishes it, plus the display text.
- **Skills & taxonomy** — the exact skills each role asks for, plus industry and job function tags.
- **Search by any keyword** — job title, skill or free text.
- **Clean, typed output** — numbers as numbers, skills as arrays — ready for spreadsheets, databases and BI tools.
- **Export anywhere** — JSON, CSV, Excel, HTML or via the Apify API and integrations.

***

### 🚀 Quick start

1. Enter one or more **search keywords** (for example `software engineer`, `accountant`, `sales`).
2. Pick the **countries** to include (India, Singapore, Malaysia, Indonesia).
3. Set **Maximum jobs** and click **Start**.

Each job comes back as one clean record, tagged with its portal country.

***

### 📥 Input

| Field | Type | Description |
|---|---|---|
| **Search keywords** (`searchQueries`) | array | Keywords or titles to search. Empty = most recent jobs. |
| **Countries** (`countries`) | array | Any of `IN`, `SG`, `MY`, `ID`. Default: all four. |
| **Sort** (`sort`) | integer | `1` = relevance, `2` = most recent. |
| **Maximum jobs** (`maxItems`) | integer | Cap across all countries and keywords (split fairly per country). |
| **Max pages per keyword** (`maxPagesPerSearch`) | integer | Result pages per keyword per country (~50 jobs per page). |
| **Concurrency** (`maxConcurrency`) | integer | Country portals scraped in parallel. |
| **Proxy configuration** (`proxyConfiguration`) | object | Residential proxy (required); pinned to each country automatically. |

#### Example 1 — one role, all four countries

```json
{
  "searchQueries": ["software engineer"],
  "countries": ["IN", "SG", "MY", "ID"],
  "maxItems": 400
}
```

#### Example 2 — several roles, Singapore & Malaysia only

```json
{
  "searchQueries": ["data analyst", "product manager"],
  "countries": ["SG", "MY"],
  "maxItems": 600
}
```

#### Example 3 — most recent jobs in India

```json
{
  "searchQueries": ["accountant"],
  "countries": ["IN"],
  "sort": 2,
  "maxItems": 500
}
```

***

### 📤 Output

Each job is one dataset item. Example:

```json
{
  "jobId": 39148711,
  "title": "Software Engineer Lead (C++)",
  "company": "Michael Page International",
  "portalCountry": "Singapore",
  "portalCountryCode": "SG",
  "locations": "Singapore",
  "url": "https://www.foundit.sg/job/software-engineer-lead-c-...-39148711",
  "applyUrl": "https://...",
  "experienceMin": 3,
  "experienceMax": 5,
  "experienceText": "3-5 Years",
  "salaryMin": 42000,
  "salaryMax": 54000,
  "salaryMonthlyMin": 3500,
  "salaryMonthlyMax": 4500,
  "currency": "SGD",
  "salaryText": "42,000-54,000 SGD",
  "salaryHidden": false,
  "skills": ["C++ development", "Software Architecture", "Troubleshooting"],
  "industries": ["IT - Software"],
  "functions": ["Software Engineering"],
  "jobTypes": ["Permanent"],
  "employmentTypes": ["Full Time"],
  "recruiterName": "…",
  "companyProfileUrl": "https://www.foundit.sg/company/...",
  "totalApplicants": 12,
  "isUrgentlyHiring": false,
  "quickApply": true,
  "freshness": "…",
  "postedDate": "2026-08-20T09:00:00Z",
  "searchQuery": "software engineer",
  "scrapedAt": "2026-08-27T10:00:00.000Z"
}
```

#### Field reference

**Job**

| Field | Description |
|---|---|
| `jobId` | Foundit job ID (unique per country). |
| `title` | Job title. |
| `url` | Job page URL on the country portal. |
| `applyUrl` | Application link (often the employer's site). |
| `portalCountry`, `portalCountryCode` | Which Foundit portal the job came from. |
| `searchQuery` | The keyword this job came from. |

**Company & recruiter**

| Field | Description |
|---|---|
| `company` | Hiring company. |
| `companyProfileUrl` | Company profile page. |
| `recruiterName` | Recruiter/poster name. |
| `totalApplicants` | Applicant count (when available). |

**Compensation & experience**

| Field | Description |
|---|---|
| `salaryMin`, `salaryMax` | Annual salary bounds (when published). |
| `salaryMonthlyMin`, `salaryMonthlyMax` | Monthly salary bounds. |
| `currency` | Salary currency (INR, SGD, MYR, IDR). |
| `salaryText` | Salary as shown (present only when disclosed). |
| `salaryHidden` | Whether the employer hid the salary. |
| `experienceMin`, `experienceMax` | Required experience, in years. |
| `experienceText` | Experience as shown (e.g. "3-5 Years"). |

**Location & taxonomy**

| Field | Description |
|---|---|
| `locations` | Job location(s). |
| `skills` | Skills the role asks for. |
| `industries`, `functions` | Industry and job function. |
| `jobTypes`, `employmentTypes` | Permanent/contract, full/part‑time. |

**Dates & flags**

| Field | Description |
|---|---|
| `postedDate`, `updatedDate` | Posting and update timestamps. |
| `freshness` | Freshness label. |
| `isUrgentlyHiring`, `quickApply`, `walkInVenue` | Listing flags. |

***

### 💡 Use cases

- **Recruiters & staffing** — monitor demand for roles and skills across four APAC markets in one place.
- **Job seekers** — track new postings for your role across India, Singapore, Malaysia and Indonesia.
- **Salary & market analysts** — aggregate published salary ranges by role, experience and country.
- **HR‑tech & job boards** — enrich or seed a jobs database with fresh, multi‑country listings.
- **Company & hiring intelligence** — see which companies are hiring, for what, and where.
- **Researchers & data teams** — build clean datasets of the APAC labor market.

***

### 🎯 Tips for best results

- **Cast a wide net** — add several related keywords to cover a whole segment.
- **Pick your countries** — include only the portals you need; results are split fairly across them.
- **Sort by most recent** — set `sort` to `2` to track brand‑new postings.
- **Filter after export** — pull broadly, then slice by `salaryMin`, `experienceMin`, `skills`, `industries` or `portalCountry`.
- **Salary is optional data** — many APAC employers don't publish it, so `salaryText` appears on a share of jobs.

***

### 📈 Scaling up

- Add **more keywords** to widen coverage across the market.
- Include **all four countries** to build a regional dataset in one run.
- **Schedule** recurring runs to track how salaries, demand and hiring evolve.

***

### 🔌 Run it your way

- **Apify Console** — enter keywords, pick countries, click Start.
- **API** — start runs and pull the dataset programmatically.
- **Scheduler** — refresh the jobs feed on a schedule.
- **Integrations** — push results to Google Sheets, Zapier, Make, webhooks, S3 and more.

***

### ❓ FAQ

**Which countries are covered?**
India, Singapore, Malaysia and Indonesia — pick any combination.

**Do I need an account or API key?**
No. Just enter keywords and click Start.

**Are salaries included?**
Yes, when the employer publishes them — as structured `salaryMin`/`salaryMax` plus `currency` and display text. Many APAC listings hide salary, so it appears on a portion of jobs.

**Do I get skills and experience?**
Yes — `skills` lists the technologies/skills asked for, and `experienceMin`/`experienceMax` give the required years.

**Why do results come evenly from each country?**
When you scrape several countries, the maximum is split fairly across them so every portal is represented.

**In what format is the data?**
Structured JSON by default, exportable to CSV, Excel, HTML and more.

**Can I run it on a schedule?**
Yes — use the Apify Scheduler, or start runs through the Apify API and its integrations.

***

### ⚖️ Legal & responsible use

This tool collects **publicly available** job‑posting information for legitimate business use such as recruitment, market research and salary analysis. You are responsible for how you use the data and for complying with all applicable laws and regulations, the website's terms, and data‑protection rules. Do not use the output to infringe intellectual‑property rights or for any unlawful purpose. This scraper is not affiliated with, endorsed by, or connected to Foundit; all trademarks belong to their respective owners.

***

#### Tags

`foundit` · `foundit scraper` · `monster jobs` · `india jobs` · `singapore jobs` · `malaysia jobs` · `indonesia jobs` · `apac jobs` · `job scraper` · `salary data` · `recruitment` · `hr tech` · `talent sourcing` · `job listings` · `labor market`

# Actor input Schema

## `searchQueries` (type: `array`):

Job keywords or titles to search (e.g. software engineer, accountant, sales, nurse). Leave empty to collect the most recent jobs.

## `countries` (type: `array`):

Which Foundit country portals to scrape.

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

Result order.

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

Stop after collecting this many jobs across all countries and keywords.

## `maxPagesPerSearch` (type: `integer`):

Maximum result pages per keyword per country (each page returns ~50 jobs).

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

How many country portals to scrape in parallel.

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

Residential proxy is required — the actor pins it to each country automatically. Leave as the default.

## Actor input object example

```json
{
  "searchQueries": [
    "data analyst",
    "marketing",
    "finance"
  ],
  "countries": [
    "IN",
    "SG",
    "MY",
    "ID"
  ],
  "sort": "1",
  "maxItems": 200,
  "maxPagesPerSearch": 100,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQueries": [
        "software engineer"
    ],
    "countries": [
        "IN",
        "SG",
        "MY",
        "ID"
    ],
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/foundit-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 = {
    "searchQueries": ["software engineer"],
    "countries": [
        "IN",
        "SG",
        "MY",
        "ID",
    ],
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/foundit-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 '{
  "searchQueries": [
    "software engineer"
  ],
  "countries": [
    "IN",
    "SG",
    "MY",
    "ID"
  ],
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call haketa/foundit-scraper --silent --output-dataset

```

## MCP server setup

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