# Foundit Scraper - Monster India Jobs, Salaries & Companies (`scrapewise/foundit-scraper`) Actor

Scrape Foundit (ex-Monster India) without login: jobs by keyword, city, experience and date with company, salary, skills, applicants, dates and full description. India, Singapore, Malaysia, Philippines, Gulf, Hong Kong. US$ 1 per 1,000.

- **URL**: https://apify.com/scrapewise/foundit-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 job delivereds

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 Scraper: Monster India jobs, companies and salaries

Scrape [Foundit](https://www.foundit.in/) (formerly **Monster India**) **without an account, cookies or a browser**.
Type a job title or skill ("data analyst", "java developer", "sales manager") or paste a Foundit link and get one
clean row per job: **title, company, location with state, experience range, salary (when shown), skills, industry
and function, employment type, number of applicants and views, posting, refresh and closing dates, apply link and
the full job description**.

Works on all six Foundit sites: **India (foundit.in), Singapore, Malaysia, Philippines, the Gulf (UAE, Saudi Arabia,
Qatar...) and Hong Kong**.

Built for recruiters and staffing agencies tracking who is hiring, job boards and aggregators, HR and salary
analysts, labour-market researchers, and B2B sales teams looking for companies that are growing their teams.

**US$ 1.00 per 1,000 jobs, with the full description included. No start fee, no monthly fee. Error rows,
duplicates and jobs outside your filters are free.**

### At a glance

- **Price per 1,000 jobs, Free plan:** US$ 1.00
- **Fee per run start:** None
- **Full job description at the same price:** Yes
- **Six country sites (India, SG, MY, PH, Gulf, HK):** Yes
- **Location, experience and date filters:** Yes
- **Applicants and views per job:** Yes
- **Resumes after a platform restart without charging twice:** Yes

### What you can do with it

- **Daily hiring feed.** `searchTerms: ["python"]`, `sortBy: "newest"`, `postedWithinDays: 1` gives the Python jobs
  posted or refreshed since yesterday, with description.
- **Who is hiring in a city.** Add `locations: ["Bengaluru", "Pune"]` and read company, industry and function for
  every open role.
- **Freshers and junior roles.** `minExperience: 0`, `maxExperience: 1` keeps jobs open to freshers.
- **Gulf and South-East Asia.** `country: "gulf"` or `"singapore"` runs the same search on the local Foundit site.
- **Skills demand.** Every row has the skills list; count them across thousands of jobs.
- **Reuse a Foundit page you already have.** Paste a search results link, a `/search/python-jobs-in-mumbai` page or a
  single job link.

### Input

| Field | What it does |
|---|---|
| `searchTerms` | Job titles, skills or companies, one per line. Uses Foundit's own search. |
| `startUrls` | Foundit links: `/srp/results?query=...`, `/search/<role>-jobs-in-<city>` or `/job/...`, on any Foundit site. |
| `country` | `india` (default), `singapore`, `malaysia`, `philippines`, `gulf`, `hongkong`. |
| `locations` | Cities or regions (Foundit's own filter, includes the metro area). Empty = whole country. |
| `minExperience` / `maxExperience` | Experience range in years (Foundit's own filter). |
| `postedWithinDays` | Only jobs posted or refreshed in the last N days. |
| `sortBy` | `relevance` (default) or `newest`. |
| `maxResultsPerSearch` | Jobs per term or link. Default 100, up to 10,000 (Foundit's own limit per search). |
| `maxItems` | Hard cap on charged jobs for the whole run. |
| `includeDetails` | Open each job page for the description, state, views and job type (default on). Same price. |
| `withSalaryOnly` | Only jobs that show a salary (free filter). |
| `excludeConfidential` | Skip jobs with a hidden company name (free filter). |
| `excludeKeywords` | Skip jobs whose title has any of these words (free filter). |
| `excludeCompanies` | Skip jobs from these companies (free filter). |

Example: 500 newest data jobs in Bengaluru and Hyderabad for 2 to 5 years of experience.

```json
{
  "searchTerms": ["data analyst", "data engineer"],
  "locations": ["Bengaluru", "Hyderabad"],
  "minExperience": 2,
  "maxExperience": 5,
  "sortBy": "newest",
  "maxResultsPerSearch": 250
}
```

An empty input runs a small example (20 jobs for "data analyst"), so the Actor never fails on a blank form.

### Output

One real row from a local test run on 2026-09-30 (search "data analyst", skills and description shortened):

```json
{
  "type": "job",
  "jobId": "69268005",
  "title": "Data Analyst / BI Developer(4-7 Years) IRC303751",
  "url": "https://www.foundit.in/job/data-analyst-bi-developer-4-7-years-irc303751-globallogic-india-bengaluru-bangalore-india-69268005",
  "applyUrl": "https://www.linkedin.com/jobs/view/4466878403/",
  "companyName": "Globallogic India",
  "companyId": "858635",
  "companyUrl": "https://www.foundit.in/search/globallogic-india-858635-jobs-career",
  "companyLogoUrl": "https://media.monsterindia.com/logos/xOP_globindiinx1712284619834/jdlogo.gif",
  "companyIndustries": [],
  "companyType": "company",
  "confidentialCompany": false,
  "location": "Bengaluru, India",
  "locations": [{"city": "Bengaluru / Bangalore", "state": "Karnataka", "country": "India"}],
  "country": "india",
  "experienceMinYears": 4,
  "experienceMaxYears": 7,
  "experience": "4-7 Years",
  "salaryMin": null,
  "salaryMax": null,
  "salaryMonthlyMin": null,
  "salaryMonthlyMax": null,
  "salaryCurrency": "INR",
  "salaryHidden": false,
  "industries": ["Other"],
  "functions": ["Data Analytics / Business Intelligence"],
  "roles": [],
  "employmentTypes": ["Full time"],
  "jobTypes": ["Permanent Job"],
  "skills": ["Airflow", "M Query", "Metabase", "snowflake", "Trino", "Power Bi", "Pyspark", "Tableau", "Sql", "Python", "AWS"],
  "postedAt": "2026-09-29T09:36:44Z",
  "updatedAt": "2026-09-29T09:36:44Z",
  "postedAgo": "16 hours ago",
  "closesAt": "2026-11-12T18:30:00Z",
  "applicants": 19,
  "views": 19,
  "isWalkIn": false,
  "isQuickApply": false,
  "isUrgentlyHiring": false,
  "externalApply": true,
  "jobClassification": "SYNDICATE",
  "referenceCode": "1d7834256f80cecbf9d0428f66757b76",
  "description": "Role: Data Analyst / BI Developer (4-7 Years)\nLocation: Bangalore (preferable) /Noida (acceptable)\nAbout The Role\n...",
  "searchTerm": "data analyst",
  "position": 2,
  "source": "term:data analyst",
  "scrapedAt": "2026-09-30T01:56:38Z",
  "errorCode": null,
  "error": null
}
```

- `salaryMin`/`salaryMax` are yearly amounts and `salaryMonthlyMin`/`salaryMonthlyMax` monthly ones, in
  `salaryCurrency`. Many Foundit jobs do not publish a salary; then these are empty.
- `applyUrl` is where the "Apply" button goes. `externalApply: true` means the job is applied for on the employer's
  site or another board; `jobClassification` is Foundit's own label for the listing.
- With `includeDetails: false` the Actor returns the search-card fields only (no description, `locations`, `views`
  or `jobTypes`) and is several times faster.

The run also saves `SEARCH_SUMMARY` in its key-value store: for each term or link, how many jobs Foundit has for it
and how many were delivered (free).

#### Error rows (never charged)

| errorCode | When |
|---|---|
| `NO_RESULTS` | Foundit has no jobs for the search with your filters. |
| `NOT_FOUND` | The job link does not exist or the job was removed. |
| `INVALID_URL` | The link is not a Foundit search or job link. |
| `BLOCKED` | Foundit refused every attempt for that search. |
| `INVALID_INPUT` | A field has a value the Actor cannot use (the message says which). |
| `UNEXPECTED` | Anything else; the rest of the run continues. |

### Pricing

Pay per event, no start fee:

| Event | Price per 1,000 (Free plan) | Charged for |
|---|---|---|
| Job delivered | **US$ 1.00** | each unique job, with or without the description |

Examples: 1,000 jobs cost US$ 1.00; a daily feed of 300 new jobs costs US$ 0.30 a day. Error rows, duplicates and
filtered-out jobs are free, and `maxItems` is a hard stop.

### How it works and limits

- It reads the same public job data the Foundit website loads, as JSON, over plain HTTP through the Apify datacenter
  proxy. No login, no browser. Foundit refuses many datacenter IPs; the Actor keeps the IPs it accepts and replaces
  the refused ones, with a residential IP of the site's country only as a last resort.
- Foundit serves **up to 10,000 jobs per search**. For more, split the search by location, experience or date.
- The location filter is Foundit's own and includes the metro area (Mumbai also returns Thane and Navi Mumbai).
- Speed in our tests: 300 jobs in 8 to 40 s without descriptions, 250 jobs in 75 to 115 s with descriptions.
- **No personal data.** Rows carry the job and the hiring company only. The Actor never returns recruiter names,
  recruiter IDs or recruiter phone numbers, and email addresses, phone numbers and contact-person lines written inside
  descriptions are replaced by `[contact removed]`.

### FAQ

**Do I need a Foundit account?** No. Everything comes from public job pages.

**Is this the same as Monster India?** Yes. Monster India, Monster Gulf and Monster South-East Asia became Foundit;
the job links still use the `media.monsterindia.com` logos.

**Why do some jobs have no salary?** The employer did not publish one on Foundit.

**What if the run is restarted by the platform?** Jobs already in the dataset are not charged again: the Actor reads
its own dataset when it starts and skips what was delivered.

### Changelog

- **0.1 (2026-09-30):** first version: search terms and links on six Foundit sites, location, experience and date
  filters, full description at the same price, resume after restart.

Independent tool, not affiliated with Foundit (Quess Corp) or Monster Worldwide.

# Actor input Schema

## `searchTerms` (type: `array`):

Job titles, skills or companies, one per line (for example: data analyst, java developer, sales manager, accountant). Each term is sent to Foundit's own search and returns up to 'Max results per search' jobs.

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

Links copied from Foundit: a search results page (https://www.foundit.in/srp/results?query=python\&locations=Mumbai), a search page (https://www.foundit.in/search/python-jobs-in-mumbai) or a single job page (https://www.foundit.in/job/...). Links from foundit.sg, foundit.my, foundit.com.ph, founditgulf.com and foundit.hk also work.

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

Which Foundit site the search terms run on. Links always use their own site.

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

Cities or regions, one per line (for example: Mumbai, Bengaluru, Pune, Dubai). A job in any of them is kept (Foundit's own location filter). Empty = the whole country.

## `minExperience` (type: `integer`):

Jobs whose experience range covers at least this many years. Empty = any.

## `maxExperience` (type: `integer`):

Jobs whose experience range starts at or below this many years (0 = freshers). Empty = any.

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

Only jobs posted or refreshed in the last N days (for example 1, 3, 7 or 30). Empty = any date.

## `sortBy` (type: `string`):

Foundit's relevance ranking or newest first.

## `maxResultsPerSearch` (type: `integer`):

How many jobs to take from each term or link. Empty = 100. Foundit serves up to 10,000 jobs per search; split big searches by location or date to go beyond.

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

Hard cap on charged jobs for the whole run, across all terms and links. Empty or 0 = no cap besides the per-search limit.

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

Open each job page for the full description (contact details removed), city/state list, views, job type and company industry. Turn off for faster runs with the search-card fields only; the price is the same.

## `withSalaryOnly` (type: `boolean`):

Skip jobs that do not show a salary. Skipped jobs are not charged.

## `excludeConfidential` (type: `boolean`):

Skip jobs whose company name is hidden. Skipped jobs are not charged.

## `excludeKeywords` (type: `array`):

Words, one per line. Jobs with any of them in the title are skipped and not charged.

## `excludeCompanies` (type: `array`):

Company names (or part of them), one per line. Their jobs are skipped and not charged.

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

Apify datacenter proxy is the default and works for Foundit. The Actor keeps the IPs that Foundit accepts and replaces refused ones; a residential IP of the site's country is used only as a last resort.

## Actor input object example

```json
{
  "searchTerms": [
    "data analyst"
  ],
  "country": "india",
  "sortBy": "relevance",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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 = {
    "searchTerms": [
        "data analyst"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/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 = {
    "searchTerms": ["data analyst"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/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 '{
  "searchTerms": [
    "data analyst"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/foundit-scraper --silent --output-dataset

```

## MCP server setup

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