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

Scrape foundit.in (Monster India) jobs by keyword, location, filters or URL: title, company, experience, salary, skills, applicants, posted date and full description.

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

## Pricing

from $1.80 / 1,000 job scrapeds

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

## foundit Jobs Scraper — Monster India Jobs, Salaries & Companies

Scrape job listings from **foundit.in** (formerly **Monster India**) by keyword, location and foundit's own filters (experience, salary, freshness, job type, posted by), or from any foundit search, company or job URL. Every job comes with the company, the experience range, the salary as text and as numbers (INR per year and in lakhs), location, job type, industry, function, skills, applicants count and the posted date. Turn on **Include full job details** for the full description, education, key skills, every location with its state and the company profile.

The same actor works for foundit's other sites: **foundit.sg** (Singapore), **founditgulf.com** (UAE / Gulf), **foundit.my** (Malaysia) and **foundit.com.ph** (Philippines).

Export to JSON, CSV or Excel, or pull the data through the API into Google Sheets, your ATS, a BI tool or an LLM pipeline. No login and no browser: the actor reads the same JSON API the foundit website uses, 100 jobs per request, so it is fast and cheap.

### What data does foundit Jobs Scraper extract?

| Field | Description |
|---|---|
| `jobId`, `url` | foundit job id and job page URL |
| `title` | Job title |
| `companyName`, `companyId`, `companyUrl`, `companyLogo` | Hiring company (or the consultant that posted the job), its foundit jobs page and logo |
| `experienceText`, `experienceMin`, `experienceMax` | Experience required, e.g. "5-12 Years" -> 5 and 12 (empty when the job does not state it) |
| `salaryText` | Salary as foundit shows it, e.g. "INR 3 - 4.5 LPA" or "SGD 3,000 - 4,000 per month" |
| `salaryDisclosed`, `salaryMin`, `salaryMax`, `salaryMinMonthly`, `salaryMaxMonthly`, `salaryMinLakhs`, `salaryMaxLakhs`, `salaryCurrency`, `salaryPeriod` | Parsed salary: yearly and monthly amounts in the job's currency, lakhs for INR |
| `location` | Location as shown on the job card |
| `workMode` | `remote` for "Work From Home" jobs; empty when foundit does not say |
| `jobTypes` | foundit job types such as "Permanent Job", "Contract Job", "Work From Home", "Jobs for Women" |
| `employmentType`, `industry`, `function`, `role` | E.g. "Full time", "Information Technology", "Software Development", "Software Engineer/Programmer" |
| `skills` | Skills listed on the job |
| `applicantsCount` | Applicants so far, as foundit shows it |
| `postedAt`, `postedAgo`, `updatedAt` | Posting time (UTC, ISO 8601), foundit's label such as "2 days ago", last update |
| `employerType`, `consultant` | "Company" or "Consultant" (recruitment agency) |
| `applyOnCompanySite`, `applyUrl` | Jobs that are applied for on the employer's site or another job board, with that URL |
| `source` | `foundit` (posted on foundit) or `external` (foundit lists it from a company career site or another board) |
| `urgentlyHiring`, `walkIn`, `walkInDetails` | Urgent-hiring badge; walk-in drive venue and dates as published |
| `site` | `foundit.in`, `foundit.sg`, `founditgulf.com`, `foundit.my` or `foundit.com.ph` |
| `searchKeyword`, `searchLocation`, `searchUrl`, `scrapedAt` | Which search found the job, and when |

With **Include full job details** each job also gets:

| Field | Description |
|---|---|
| `description`, `descriptionHtml` | Full job description (roles and responsibilities, requirements) as text and HTML |
| `education` | Required qualifications, when the employer lists them |
| `keySkills` | All IT and other skills tagged on the job |
| `locations` | Every location of the job with city, state and country |
| `nationalities` | Nationality requirements, when given (common on Gulf jobs) |
| `companyAbout`, `companyAddress`, `companyCity`, `companyCountry`, `companyIndustry` | The company profile foundit publishes with the job (fields the company did not fill in are empty) |
| `detailsFetched`, `detailError` | Whether the job page was read (removed jobs get a `detailError`) |

### How to scrape foundit jobs

1. Enter one or more **Keywords** (e.g. `python developer`, `accountant`) and an optional **Location** (`Bangalore`, `Mumbai`, `Pune, Hyderabad`...). Or paste foundit URLs into **Start URLs**.
2. Pick the **foundit site** (India by default) and, optionally, filters: experience, salary, freshness, job type, posted by, sort order.
3. Set **Max jobs** to cap the run and the cost.
4. Click **Start**. Jobs appear in the **Output** tab; download them or use the API.

### Input example

```json
{
  "keywords": ["python developer", "data analyst"],
  "location": "Bangalore",
  "site": "foundit.in",
  "experience": 3,
  "minSalary": 600000,
  "postedWithinDays": "7",
  "jobTypes": ["Work From Home"],
  "sortBy": "date",
  "maxItems": 500,
  "includeDetails": false
}
```

Start URLs work with any filters you set on the site, for example `https://www.foundit.in/srp/results?query=python%20developer&locations=Bangalore&experienceRanges=3~5`, an SEO page such as `https://www.foundit.in/search/python-developer-jobs-in-bangalore`, a company page `https://www.foundit.in/search/tata-consultancy-services-332041-jobs-career`, or a single job page `https://www.foundit.in/job/...-69448615`.

### Output example

```json
{
  "jobId": "69447039",
  "url": "https://www.foundit.in/job/accountant-property-client-accounts-abeedah-consultants-private-limited-chennai-69447039",
  "title": "Accountant – Property & Client Accounts",
  "companyName": "Abeedah Consultants Private Limited",
  "companyId": "733706",
  "companyUrl": "https://www.foundit.in/search/abeedah-consultants-private-limited-733706-jobs-career",
  "experienceText": "1-4 Years",
  "experienceMin": 1,
  "experienceMax": 4,
  "salaryText": "INR 3 - 4.5 LPA",
  "salaryDisclosed": true,
  "salaryMin": 300000,
  "salaryMax": 450000,
  "salaryMinMonthly": 25000,
  "salaryMaxMonthly": 37500,
  "salaryMinLakhs": 3.0,
  "salaryMaxLakhs": 4.5,
  "salaryCurrency": "INR",
  "salaryPeriod": "year",
  "location": "Chennai",
  "workMode": null,
  "jobTypes": [],
  "employmentType": "Full time",
  "function": "Finance & Accounts",
  "role": "Accountant",
  "skills": ["Accounting", "Bookkeeping", "Record To Report", "Attention To Detail", "Communication Skills"],
  "applicantsCount": 29,
  "postedAt": "2026-10-11T05:56:58Z",
  "postedAgo": "13 hours ago",
  "employerType": "Consultant",
  "consultant": true,
  "applyOnCompanySite": false,
  "source": "foundit",
  "site": "foundit.in",
  "searchKeyword": "accountant",
  "scrapedAt": "2026-10-11T19:05:12Z"
}
```

With details, the same job also carries `description` ("Roles and responsibilities: ..."), `descriptionHtml`, `keySkills`, `locations` (`[{"city": "Chennai", "state": "Tamil Nadu", "country": "India"}]`), `companyAbout` and `detailsFetched: true`.

### How many jobs can I get per search?

foundit serves at most 9,600 jobs for any one search (the API stops paging there). The actor reads 100 jobs per request, so a full search takes about 100 requests. For bigger markets, run several narrower searches (by city, experience or freshness) in one input; jobs found twice are saved once. Use **Max jobs per search** to share the budget between keywords.

### Monitor changes on a schedule

Turn on **Only new or changed items** and save the input as a task with a Schedule (Apify Console -> Schedules), for example every morning. Each run remembers the jobs earlier runs of the same search returned and outputs only jobs that are new or whose title or salary changed; unchanged jobs are not output and not charged (and their job pages are not opened). Output items get `changeType` (`new` or `changed`) and, for changed jobs, `previousValues` with the old title or salary. Sort by date so the watch window covers the newest jobs, and use **Monitoring key** to keep several schedules on the same search apart.

### Can I get salaries from foundit?

Yes, whenever the employer shows them. Most foundit jobs are listed from LinkedIn and company career sites without a salary, so in our test searches 3-16% of jobs had one (jobs posted directly on foundit show it far more often). Set **Minimum salary** to get only jobs with a salary in your range. `salaryText` keeps foundit's wording; `salaryMin` / `salaryMax` are yearly amounts in the job's currency (plus monthly amounts and, for INR, lakhs). Salaries an employer marked confidential are not shown on foundit and stay empty here.

### Can I scrape all jobs of one company?

Yes: open the company's jobs page on foundit (`https://www.foundit.in/search/<company>-<id>-jobs-career`, linked from every job as `companyUrl`) and paste the URL into **Start URLs**.

### Does it work without login?

Yes. Everything comes from the public job search and job pages that anyone can open without a foundit account. Recruiter phone numbers and e-mails that foundit masks are not collected.

### Pricing

Pay per event, no subscription:

- **$0.0018 per job** saved (all search fields above).
- **+$0.002 per job page** when **Include full job details** is on, or for each job URL in Start URLs.

1,000 jobs cost $1.80, or $3.80 with full details. Apify platform usage is small (one request per 100 jobs on the default datacenter proxy). Monitoring runs only charge for new or changed jobs.

### Proxy note

foundit sits behind Akamai, which refuses some proxy IPs and accepts others. With the default Apify Proxy (datacenter) the actor keeps the IPs that get through and drops the refused ones automatically, so runs succeed without paid residential traffic. Switch to RESIDENTIAL only if a run log says that no request got through.

### Integrations and API

Use the results in Make, Zapier, n8n, Google Sheets or Airtable, or call the actor from Python / Node.js with the Apify client (see the **API** tab). Schedules plus **Only new or changed items** give you a daily feed of new foundit jobs for a keyword and city.

### Is it legal to scrape foundit?

The actor reads only data that foundit shows publicly without login: job ads, company names and the company profiles employers publish. It does not log in, does not collect job seeker profiles, and does not collect anything foundit masks or hides behind a login. You are responsible for how you use the data and for complying with foundit's terms and applicable law (for example India's DPDP Act or the GDPR).

### Support

Found a bug or need a field? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

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

One search per keyword, as you would type it in foundit's search box, e.g. "python developer", "accountant", "sales manager". Leave empty to list every job in the location.

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

City or region as on foundit, e.g. "Bangalore", "Mumbai", "Delhi", or several separated by commas ("Pune, Hyderabad"). Leave empty to search the whole country.

## `site` (type: `string`):

Which foundit site the keyword search runs on. Start URLs always use their own site.

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

Optional: foundit URLs with any filters you set on the site, e.g. https://www.foundit.in/srp/results?query=python%20developer\&locations=Bangalore\&experienceRanges=3~5, a company page such as https://www.foundit.in/search/tata-consultancy-services-332041-jobs-career, or single job pages (https://www.foundit.in/job/...-69448615), which are output with full details. A URL keeps its own filters; the filter fields below apply to the keyword search.

## `experience` (type: `integer`):

foundit's Experience filter: jobs whose required range includes this many years. 0 = freshers.

## `minSalary` (type: `integer`):

foundit's Salary filter: yearly amount in the site's currency, e.g. 500000 = INR 5 lakhs on foundit.in. Jobs that do not disclose a salary are left out by foundit when a salary filter is set.

## `maxSalary` (type: `integer`):

Upper end of the salary filter (yearly, site currency). Leave empty for no upper limit.

## `postedWithinDays` (type: `string`):

Only jobs posted within this many days (foundit's Job Freshness filter).

## `jobTypes` (type: `array`):

foundit's Job Type filter. "Work From Home" gives remote jobs. Leave empty for all.

## `postedBy` (type: `string`):

Only jobs posted by the hiring company itself, or only jobs posted by recruitment consultants (foundit's Employer Type filter).

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

Relevance (foundit's default) or newest first. Use date with monitoring to watch the newest jobs.

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

Stop after this many jobs in total (you pay per job saved). foundit serves at most 9,600 jobs per search.

## `maxItemsPerSearch` (type: `integer`):

Optional cap for each keyword / start URL, so one search does not use the whole Max jobs budget.

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

Open each job for the full description (text and HTML), education, key skills, every location with its state, nationality requirements and the company profile (about, address, city). One extra request and one 'detail' event per job.

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new jobs or jobs whose title or salary changed. Use with a Schedule; unchanged jobs are not charged. With this on, Max jobs (and Max jobs per search) is the number of jobs checked per run; sort by date to watch the newest jobs.

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input

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

Apify Proxy (datacenter) works for foundit's job API and costs nothing extra on most plans: the actor keeps the proxy IPs that foundit accepts and drops the ones it refuses. Each request returns up to 100 jobs. Switch to RESIDENTIAL only if the run log shows that no request gets through.

## Actor input object example

```json
{
  "keywords": [
    "python developer"
  ],
  "location": "Bangalore",
  "site": "foundit.in",
  "sortBy": "relevance",
  "maxItems": 100,
  "includeDetails": false,
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "keywords": [
        "python developer"
    ],
    "location": "Bangalore",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/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 = {
    "keywords": ["python developer"],
    "location": "Bangalore",
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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