# Foundit Jobs Scraper (`khadinakbar/foundit-jobs-scraper`) Actor

Scrape Foundit (Monster) jobs across foundit.in /.sg /.hk by keyword + location. Title, company, location with geo, salary, experience, posted date, skills, full description, apply URL. Optional JSON-LD enrich. HTTP-only via TLS impersonation. MCP-ready.

- **URL**: https://apify.com/khadinakbar/foundit-jobs-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, Lead generation, MCP servers
- **Stats:** 9 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 job listings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Jobs Scraper

Search public Foundit India job listings and return structured hiring data for recruiting, market research, job discovery, and AI workflows.

### What it returns

Each validated dataset item includes the public job title, company, location, salary where shown, experience, employment type, industry, functional area, skills, description, posting date, and direct Foundit job URL.

Use it when you need public Foundit India listings by keyword and optional location. It does not apply for jobs, sign in, access candidate data, or bypass access controls.

### Input

```json
{
  "keywords": "data engineer",
  "location": "Bengaluru",
  "postedWithinDays": "7",
  "sortBy": "date",
  "maxResults": 50,
  "includeJobDetails": true
}
````

`maxResults` is both the result cap and the cap on row-level events. The actor charges $0.003 only after a complete, validated job record is persisted. One actor-start event is $0.005. Apify compute and residential-proxy usage are charged separately when Pay per event with platform usage pass-through is enabled.

### Output and outcomes

Dataset rows are public job records. The default key-value store also contains:

- `OUTPUT`: compact machine-readable outcome and result count.
- `RUN_SUMMARY`: pages, write counts, charged events, warnings, and errors.

Terminal outcomes are `COMPLETE`, `PARTIAL`, `VALID_EMPTY`, `INVALID_INPUT`, `UPSTREAM_FAILED`, and `CONFIG_ERROR`. A blocked search with no useful result fails honestly; partial public results remain available as a successful partial outcome.

### Limitations

Foundit can change its public page structure, ranking, pagination, and anti-bot controls without notice. Salary, skills, employer, dates, and detailed descriptions are included only when Foundit exposes them publicly. The actor uses a residential browser session and retires challenged sessions, but no scraper can guarantee access to every public listing.

When every direct Foundit route is challenged, the actor can use a configured SerpAPI Google Search fallback to return indexed public Foundit job URLs, titles, and snippets. This fallback is explicitly marked as partial when detail enrichment was requested.

### Development

```bash
npm install
npm test
npm run build
```

Before deployment, configure Pay per event with `isPPEPlatformUsagePaidByUser: true`, then validate the final cloud build with the project's release-evidence workflow. Keep the actor private until the user adds an icon and explicitly publishes it.

# Actor input Schema

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

Use this when you need a Foundit keyword search, such as software engineer or data analyst. Enter plain job-search text, for example 'senior data engineer'. The default is 'software engineer'. This is not a Foundit URL.

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

Use this when the search should be narrowed to an Indian city or region. Enter a normal place name such as 'Bengaluru' or 'Mumbai'. Leave blank for India-wide results. This is not a country code.

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

Use this when you only want listings with an exposed posting timestamp in a recent period. Choose a number of days, or 'any' to keep all returned listings. Listings with no exposed timestamp are kept because their age cannot be verified.

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

Use this when you want to prefer recency or Foundit's relevance ordering. Choose 'date' for newest listings or 'relevance' for keyword ordering. This preference is passed to the public route and does not guarantee all ranking signals.

## `maxResults` (type: `integer`):

Use this when you need to cap output and Pay per event charges. Enter an integer from 1 to 500, for example 50. The default is 20. This is a record cap, not a page count.

## `includeJobDetails` (type: `boolean`):

Use this when you want the actor to visit public Foundit job pages for fuller descriptions where available. Set true for richer records or false for faster search-result data. It never bypasses login walls or retrieves applicant data.

## Actor input object example

```json
{
  "keywords": "senior data engineer",
  "location": "Bengaluru",
  "postedWithinDays": "7",
  "sortBy": "date",
  "maxResults": 50,
  "includeJobDetails": true
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `output` (type: `string`):

No description

## `summary` (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": "software engineer",
    "postedWithinDays": "7",
    "sortBy": "date",
    "maxResults": 20,
    "includeJobDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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": "software engineer",
    "postedWithinDays": "7",
    "sortBy": "date",
    "maxResults": 20,
    "includeJobDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/foundit-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "software engineer",
  "postedWithinDays": "7",
  "sortBy": "date",
  "maxResults": 20,
  "includeJobDetails": true
}' |
apify call khadinakbar/foundit-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/foundit-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Foundit Jobs Scraper",
        "description": "Scrape Foundit (Monster) jobs across foundit.in /.sg /.hk by keyword + location. Title, company, location with geo, salary, experience, posted date, skills, full description, apply URL. Optional JSON-LD enrich. HTTP-only via TLS impersonation. MCP-ready.",
        "version": "1.0",
        "x-build-id": "ZfM7LpLGml39rs6lR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~foundit-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-foundit-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~foundit-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-foundit-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~foundit-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-foundit-jobs-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Job search keywords",
                        "type": "string",
                        "description": "Use this when you need a Foundit keyword search, such as software engineer or data analyst. Enter plain job-search text, for example 'senior data engineer'. The default is 'software engineer'. This is not a Foundit URL.",
                        "default": "software engineer"
                    },
                    "location": {
                        "title": "Location filter",
                        "type": "string",
                        "description": "Use this when the search should be narrowed to an Indian city or region. Enter a normal place name such as 'Bengaluru' or 'Mumbai'. Leave blank for India-wide results. This is not a country code.",
                        "default": ""
                    },
                    "postedWithinDays": {
                        "title": "Posted within",
                        "enum": [
                            "any",
                            "1",
                            "3",
                            "7",
                            "14",
                            "30"
                        ],
                        "type": "string",
                        "description": "Use this when you only want listings with an exposed posting timestamp in a recent period. Choose a number of days, or 'any' to keep all returned listings. Listings with no exposed timestamp are kept because their age cannot be verified.",
                        "default": "7"
                    },
                    "sortBy": {
                        "title": "Sort preference",
                        "enum": [
                            "date",
                            "relevance"
                        ],
                        "type": "string",
                        "description": "Use this when you want to prefer recency or Foundit's relevance ordering. Choose 'date' for newest listings or 'relevance' for keyword ordering. This preference is passed to the public route and does not guarantee all ranking signals.",
                        "default": "date"
                    },
                    "maxResults": {
                        "title": "Maximum job records",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Use this when you need to cap output and Pay per event charges. Enter an integer from 1 to 500, for example 50. The default is 20. This is a record cap, not a page count.",
                        "default": 20
                    },
                    "includeJobDetails": {
                        "title": "Include job details",
                        "type": "boolean",
                        "description": "Use this when you want the actor to visit public Foundit job pages for fuller descriptions where available. Set true for richer records or false for faster search-result data. It never bypasses login walls or retrieves applicant data.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
