# Foundit Jobs Scraper (India Jobs, Salaries, Skills) (`webdatatools/foundit-jobs-scraper`) Actor

Scrape Foundit (formerly Monster India) job listings by keyword and city: job title, company, location, experience range, salary text, employment type, skills, posting date and link. India only.

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

## Pricing

from $2.10 / 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 (India Jobs, Salaries, Skills)

### What is Foundit Jobs Scraper?

Foundit Jobs Scraper collects India job listings from [Foundit](https://www.foundit.in), the former Monster India job board, by keyword and city. Each job becomes one row with the title, employer, location, experience range, skills, employment type, posting time and the Foundit job link. It uses the same JSON search service the Foundit website uses, so no login is needed.

### What data does Foundit Jobs Scraper extract?

| Field | Type | Meaning |
|---|---|---|
| `jobId`, `url` | string | Foundit job id and job page link |
| `title` | string | Job title as posted (some postings include the city or a reference in the title) |
| `companyName`, `companyId` | string | Employer; null when the employer hides its name |
| `location` | string | Job location, e.g. `Bengaluru, India` |
| `channel` | string | Foundit market, e.g. `India` |
| `experienceMin`, `experienceMax` | number | Required years of experience |
| `salaryText`, `salaryCurrency`, `salaryMin`, `salaryMax` | string / number | Pay when published; null otherwise (see FAQ) |
| `employmentTypes`, `jobTypes` | array | e.g. `["Full time"]`, `["Contractual"]` |
| `functions`, `industries` | array | Job function and industry labels |
| `skills` | array | Skill list split from the posting |
| `isUrgentlyHiring`, `isQuickApply`, `salaryHidden`, `companyHidden` | boolean | Listing flags |
| `postedAt` | ISO string | When the job was created on Foundit |
| `updatedText` | string | Foundit's relative update text, e.g. `7 hours ago` |
| `searchKeyword`, `searchLocation` | string | The search that found the row |
| `scrapedAt` | ISO string | When the row was collected |

### How to use Foundit Jobs Scraper

1. Open the actor in Apify and go to the Input tab.
2. Enter one or more keywords separated by `;`, for example `python developer; data analyst`.
3. Optionally enter an Indian city, for example `Bangalore`, and an employment type such as `Full time`.
4. Optionally set posted-within days and the maximum jobs per search.
5. Click Start and download the dataset as JSON, CSV or Excel.

### Example input

```json
{
    "keywords": "python developer",
    "location": "Bangalore",
    "employmentType": "Full time",
    "postedWithinDays": 30,
    "maxJobs": 40
}
```

### Example output

Real row from a run on 2026-10-23 (input above; trimmed for length):

```json
{
    "position": 1,
    "jobId": "69530719",
    "title": "Senior Python Developer .,6+yrs,Bangalore,Immediate Joiners only",
    "url": "https://www.foundit.in/job/senior-python-developer-6-yrs-bangalore-immediate-joiners-only-global-tec",
    "companyName": "Global Technologies",
    "location": "Bengaluru, India",
    "channel": "India",
    "experienceMin": 6,
    "experienceMax": 8,
    "salaryText": null,
    "employmentTypes": ["Full time"],
    "functions": ["Software Development"],
    "postedAt": "2026-10-22T17:30:16.000Z",
    "updatedText": "7 hours ago",
    "searchKeyword": "python developer",
    "searchLocation": "Bangalore"
}
```

The run returned 40 rows from 95 scanned results (Foundit reported 216 matches for this search) in about 10 seconds (run `GkSEb46fx4HuHM072`, build 0.0.2). Platform usage: USD 0.00054. That build stored a zero pay placeholder (`0-0 INR`) as `salaryText`; build 0.0.4 writes null instead, which is what the example shows.

### Input parameters

- **Keywords**: one or more searches separated by `;`.
- **City (India)**: optional city name. Empty = all of India.
- **Employment type**: keeps jobs that list this type; applied after the fetch.
- **Posted within days**: keeps jobs created in the last N days.
- **Max jobs per search**: up to 2,000 per keyword.
- **Proxy mode**: direct first; residential India proxy only after blocks.

### Pricing

Pay per result: **USD 0.0035 per job**, with volume tiers that go lower on higher Apify plans. The actor start is billed as well (USD 0.00005). The largest competing Foundit actor on the Store lists USD 0.00599 per result, so this price sits below it.

Measured platform usage: a 100-row default run cost USD 0.00081 (about USD 0.008 per 1,000 jobs in compute); the 40-row run above cost USD 0.00054.

### Foundit Jobs Scraper vs. alternatives

- **Coverage**: India only (foundit.in). Foundit also runs Singapore, Malaysia and Indonesia sites; this actor does not read them.
- **Descriptions**: the search service returns no job description text. Use the job link for the full post. Adding descriptions would need one extra request per job, which this version does not make.
- **Salaries**: most Foundit postings hide pay or list it as `0-0 INR`. Those become null, so pay data is sparse.

### Using Foundit Jobs Scraper with AI agents

The actor has pay-per-result pricing, a bounded maximum per search and a schema with a description for every input. An agent can pass keywords and a city, read the rows, and stop at the limit.

### FAQ

**Does it need a login or a proxy?** No login. The direct request works from Apify's datacenter IPs; the residential option is there for blocks.

**Why is salary empty?** Foundit hides pay on most postings. When pay is hidden or zero, the row keeps `salaryText` as null.

**Why does the run show fewer rows than the scanned count?** Advertisement placeholders without a job id are skipped, and the filters drop rows that do not match.

**Why do some titles contain a city or a number?** Recruiters write them that way on Foundit; the actor keeps the title exactly as posted.

**What if the site rejects requests?** The service needs a results-page referer; the actor sends one. If results still cannot be read, it stops that search and writes an ERRORS record.

### Support

Use the Issues tab on the actor page. Foundit is a third-party site; this actor is not affiliated with Foundit or its owner.

# Actor input Schema

## `keywords` (type: `string`):

Job title, skill or company, e.g. `developer` or `data analyst`. Several separated by `;` run one after another.

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

Optional Indian city, e.g. `Bangalore`, `Mumbai`, `Hyderabad`, `Delhi NCR`. Leave empty for all of India.

## `employmentType` (type: `string`):

Keep only jobs with this type, e.g. `Full time`, `Part time`, `Contractual`, `Internship`. Applied after the fetch.

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

Keep only jobs created in the last N days, e.g. `7`.

## `maxJobs` (type: `integer`):

For each keyword (15 jobs per page, read until this limit or the end of the results).

## `proxyMode` (type: `string`):

auto: direct first, Apify Residential proxy (India) only after blocks. never: direct only. always: Residential from the start.

## Actor input object example

```json
{
  "keywords": "developer",
  "maxJobs": 100,
  "proxyMode": "auto"
}
```

# Actor output Schema

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

All foundit jobs from this run.

# 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": "developer"
};

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

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

```

## MCP server setup

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