# Foundit Jobs Scraper 💼 (India & Southeast Asia) (`tagadanar/foundit-jobs-scraper`) Actor

Every job on Foundit (ex Monster India and APAC) for your search: salary, experience range, skills, industry, company and posting date. India, Singapore, Malaysia, Philippines, Indonesia. Filter by keyword, place, experience and age, or paste a URL. Optional full descriptions. No API key.

- **URL**: https://apify.com/tagadanar/foundit-jobs-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (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 $0.42 / 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.
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

## Foundit Jobs Scraper: jobs in India and Southeast Asia, with salary, experience and skills

Get every job on Foundit (the former Monster India and Monster APAC) for your search, as clean rows: title, company, cities, salary in local currency (as printed and as numbers, per year and per month), required experience in years, skills, industry, functional area, employment type, applicants so far, remote flag and the exact posting time. Search by keyword and place, narrow by experience and age, or paste any Foundit search page.

Covers **India, Singapore, Malaysia, the Philippines and Indonesia**. Turn on **full descriptions** and every row also carries the job description text, view count, qualifications and company blurb.

$0.60 per 1,000 jobs (Free plan; less on paid plans), platform usage included. Full descriptions cost the same. No API key, no login.

### What you get

One row per job:

| Field | Description |
| --- | --- |
| `jobId`, `url` | Foundit's job ID and the job page |
| `title`, `company`, `companyId`, `companyLogoUrl` | What the posting says (`company` is empty when the employer hides its name) |
| `locations`, `locationText` | Cities as a list, and the location line as Foundit prints it |
| `salaryText` | Salary as printed, e.g. `96,000-120,000 SGD`. Empty when the employer hides pay |
| `salaryMin`, `salaryMax`, `salaryPeriod` | Numbers, per `year` |
| `salaryMinMonthly`, `salaryMaxMonthly`, `salaryCurrency` | The same salary per month, and the currency code (`INR`, `SGD`, `MYR`, `PHP`, `IDR`) |
| `experienceText`, `experienceMinYears`, `experienceMaxYears` | Required experience, e.g. `3-5 years`. Null when the posting gives none |
| `skills` | Skills the employer tagged |
| `industry`, `industries`, `functionalArea`, `functionalAreas`, `roles` | Foundit's own classification |
| `employmentType`, `jobTypes` | `Full time`, `Part time`, ...; `Work From Home`, `Contract Job`, ... |
| `postedAt`, `postedText` | Posting time (ISO) and Foundit's relative text (`7 hours ago`) |
| `applicantsCount` | Applicants so far, when Foundit shows it |
| `isRemote`, `isUrgentlyHiring` | Flags (`isRemote` is true for work-from-home jobs and remote locations) |
| `externalApplyUrl` | For jobs Foundit lists on behalf of an employer career site: the employer's own apply link |
| `expiresAt` | When the listing closes |
| `country`, `query`, `searchLocation`, `sourceUrl`, `capturedAt` | Which market and search found it, and when |

With **Include full descriptions** on, these are filled in too (empty otherwise): `description` (plain text), `viewsCount`, `qualifications`, `companyAbout`; skills are completed from the full job record.

Search results do not carry the description text, so `description` stays empty unless you turn full descriptions on.

#### Example row (real, from a run on 2026-10-16 (UTC), skills and description shortened)

```json
{
  "jobId": "69488645",
  "url": "https://www.foundit.sg/job/technical-delivery-manager-dna-infotech-pte-ltd-singapore-69488645",
  "title": "Technical Delivery Manager",
  "company": "Dna Infotech Pte. Ltd",
  "companyId": "35521",
  "locations": [
    "Singapore"
  ],
  "locationText": "Singapore",
  "salaryText": "96,000-120,000 SGD",
  "salaryMin": 96000,
  "salaryMax": 120000,
  "salaryMinMonthly": 8000,
  "salaryMaxMonthly": 10000,
  "salaryCurrency": "SGD",
  "salaryPeriod": "year",
  "experienceText": "7-17 years",
  "experienceMinYears": 7,
  "experienceMaxYears": 17,
  "skills": [
    "Technical Delivery Management",
    "Technical Program Management",
    "End to End Delivery Management",
    "Software Development Life Cycle (SDLC)",
    "Project Planning",
    "Project Governance"
  ],
  "industry": null,
  "industries": [],
  "functionalArea": "Others",
  "functionalAreas": [
    "Others"
  ],
  "roles": [
    "Other Roles"
  ],
  "employmentType": "Full time",
  "jobTypes": [],
  "postedAt": "2026-10-15T12:21:24.000Z",
  "postedText": "12 hours ago",
  "applicantsCount": 22,
  "isRemote": false,
  "isUrgentlyHiring": false,
  "externalApplyUrl": null,
  "expiresAt": "2026-12-13T18:30:00.000Z",
  "companyLogoUrl": "https://media.monsterindia.com/logos/xdnasgx/jdlogo.gif",
  "description": "Technical Delivery Manager (Chinese Proficiency Mandatory)\n\nJob Description\nWe are hiring an experienced Technical Delivery Manager with strong IT project deliv...",
  "viewsCount": 19,
  "qualifications": [],
  "companyAbout": null,
  "country": "SG",
  "query": "manager",
  "searchLocation": null,
  "sourceUrl": "https://www.foundit.sg/srp/results?query=manager",
  "capturedAt": "2026-10-16T00:42:04.081Z"
}
```

### Input examples

Data analysts in Mumbai and Pune with 2 to 5 years of experience, posted in the last week:

```json
{
  "keywords": ["data analyst"],
  "locations": ["Mumbai", "Pune"],
  "country": "IN",
  "experienceMinYears": 2,
  "experienceMaxYears": 5,
  "postedWithinDays": 7,
  "maxJobsPerSearch": 200
}
```

Fresher jobs in Singapore with full descriptions:

```json
{
  "keywords": ["software engineer"],
  "country": "SG",
  "experienceMaxYears": 0,
  "includeDetails": true
}
```

Paste a search page (any of the five sites, with its filters):

```json
{
  "startUrls": [
    "https://www.foundit.in/srp/results?query=python+developer&locations=bengaluru&experienceRanges=3~5",
    "https://www.foundit.my/search/accountant-jobs-in-kuala-lumpur"
  ]
}
```

### Filters

- **Keywords x locations**: every keyword is searched in every location (each pair is its own search with its own cap).
- **Experience**: a job matches when its required range overlaps yours (a job asking 3-5 years matches "from 4"). `experienceMaxYears: 0` gives freshers.
- **Posted within**: 1 to 30 days, exact to the day.
- **Pasted URLs**: `/srp/results?...` links keep their keyword, place, experience, salary, industry and other filters; `/search/<keywords>-jobs-in-<place>` links are read as keyword plus place. Company pages (`...-jobs-career`) and single-job pages are not search pages and are skipped with a note in the run status.

### Pricing

Pay per job delivered, platform usage included:

| Plan | Per 1,000 jobs |
| --- | --- |
| Free | $0.60 |
| Bronze | $0.54 |
| Silver | $0.48 |
| Gold | $0.42 |

Plus a flat $0.001 per run to cover the start. You only pay for jobs delivered; a search that finds nothing costs just the start fee. Your maximum charge per run is respected: collection stops cleanly when it is reached.

### FAQ

**Which countries work?** India (foundit.in), Singapore (foundit.sg), Malaysia (foundit.my), the Philippines (foundit.com.ph) and Indonesia (foundit.id). The Gulf site foundit.ae is not reachable from the platform and is not offered. Pick one country per run.

**Why do some jobs show another country?** Foundit lists some employers' jobs on every regional site; those rows keep their real locations and currency.

**Why is salary often empty?** Most employers on Foundit hide pay (about 7 in 100 Indian data-analyst jobs show it). Empty means the posting does not say, not that it was missed.

**How deep can a search go?** Up to 5,000 jobs per search. Broad searches can match tens of thousands of jobs, so pair keywords with a location, experience or age filter.

**Is the description included by default?** No, only with full descriptions on. It makes a run several times slower (about three jobs per second) at the same price.

**How fresh is it?** Live at run time. `postedAt` is when Foundit last posted or refreshed the job.

**Why did my search return nothing?** The run status says why: nothing on Foundit for that search, a place Foundit does not recognise (check the spelling or paste the URL), or your own experience / age filters removed everything.

### Related actors

- [Naukri Jobs Scraper](https://apify.com/tagadanar/naukri-scraper) - the other big Indian job board, with salaries, skills and new-post alerts.
- [LinkedIn Jobs Scraper](https://apify.com/tagadanar/linkedin-jobs-scraper) - hiring signals worldwide.
- [Glassdoor Jobs Scraper](https://apify.com/tagadanar/glassdoor-jobs-scraper) - jobs with the employer rating on every row.
- [LinkedIn Company Jobs Scraper](https://apify.com/tagadanar/linkedin-company-jobs) - every open role at one company.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/foundit-jobs-scraper/changelog.md

# Actor input Schema

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

Job titles or skills as you would type them into Foundit's search box, one per line (for example data analyst, python developer, sales manager). Each keyword is a separate search. Leave keywords empty and give locations to collect every job in a place.

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

Cities or areas in the chosen country, one per line (for example Mumbai, Bengaluru, Pune, Kuala Lumpur, Manila). Each location is a separate search combined with each keyword. Leave empty for the whole country. A place Foundit does not know is reported in the run status and skipped.

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

Which Foundit site to search. Run again with another country for a multi-country list.

## `experienceMinYears` (type: `integer`):

Keep jobs whose required experience range reaches at least this many years. Leave empty for no lower bound.

## `experienceMaxYears` (type: `integer`):

Keep jobs that accept someone with up to this many years (a job asking 3-5 years matches 'up to 4'). Use 0 for freshers only. Leave empty for no upper bound.

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

Only jobs posted in the last N days (1 to 30). Leave empty for any age.

## `maxJobsPerSearch` (type: `integer`):

Stop each search (each keyword x location, or each pasted URL) after this many jobs. You only pay for jobs delivered.

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

Paste any Foundit search page: a foundit.in/srp/results?query=... link with its filters, or a foundit.in/search/data-analyst-jobs-in-mumbai link, on any of the six Foundit sites. Each URL is a separate search; the keywords, locations and country above are optional extras.

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

Add the full job description text, views, qualifications and company blurb to every job. Same price per job; the run takes several times longer.

## Actor input object example

```json
{
  "keywords": [
    "data analyst"
  ],
  "country": "IN",
  "maxJobsPerSearch": 30,
  "includeDetails": false
}
```

# Actor output Schema

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

One item per job posting in the default dataset.

# 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 = {
    "keywords": [
        "data analyst"
    ],
    "country": "IN",
    "maxJobsPerSearch": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/foundit-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 = {
    "keywords": ["data analyst"],
    "country": "IN",
    "maxJobsPerSearch": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/foundit-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 '{
  "keywords": [
    "data analyst"
  ],
  "country": "IN",
  "maxJobsPerSearch": 30
}' |
apify call tagadanar/foundit-jobs-scraper --silent --output-dataset

```

## MCP server setup

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