# Shine.com Jobs Scraper — India Job Portal API (`promising_fire/shine-jobs-scraper`) Actor

Scrape job listings from Shine.com (HT Media / Times Group) — India's top job portal. Extract job title, company, salary, location, experience, posted date, job description, recruiter contact (phone + email), and 15+ fields per job. Pay per event: $0.15/job listing.

- **URL**: https://apify.com/promising\_fire/shine-jobs-scraper.md
- **Developed by:** [Bhaskar Pandey](https://apify.com/promising_fire) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Shine.com Jobs Scraper

Scrape job listings from [Shine.com](https://www.shine.com) — India's leading job portal owned by HT Media / Times Group.

### What it extracts

Each job record includes:

- **Job title, company, location, salary, experience**
- **Industry, job type, employment type**
- **Posted date, vacancy count, skills**
- **Full job description (HTML)**
- **Recruiter phone + email** (when available on the listing)
- **Direct URL** to the job on Shine.com

### Usage

#### Input

```json
{
  "searchQueries": ["software engineer", "data analyst"],
  "locations": ["bangalore", "mumbai"],
  "experience": "0-3",
  "maxJobs": 100,
  "maxPages": 50,
  "includeRecruiterContact": true
}
```

| Field | Required | Description |
|-------|----------|-------------|
| `searchQueries` | Yes | Job titles/keywords to search |
| `locations` | No | Indian cities (leave empty for all-India) |
| `experience` | No | Filter by experience, e.g. `0-3`, `3-5` |
| `maxJobs` | No | Stop after this many jobs per query (default: 100) |
| `maxPages` | No | Max pages per query, default 50 |
| `includeRecruiterContact` | No | Include phone/email when available (default: true) |

#### Output

Each output record is a JSON object with `record_type: "job"` and the fields above.

### Pricing

Pay-per-event: **$0.15 per job listing** (billed only when a valid job record with `job_id` is produced).

### Build & Run

```bash
cd shine-jobs-scraper
apify login -t <your-token>
apify push
apify actors start <actor-id> --input-file input.json
```

### Technical notes

- Uses Playwright with stealth mode to handle Shine.com's JavaScript rendering
- Extracts data from `window.__NEXT_DATA__` (embedded JSON in the page)
- Pagination is handled by constructing the next page URL and re-queuing
- No proxy required for Shine.com (returns clean 200 from datacenter IPs)

# Actor input Schema

## `searchQueries` (type: `array`):

Job titles or keywords to search for on Shine.com, e.g. `['software engineer', 'data analyst']`. Each keyword is searched across all of India.

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

Limit results to specific Indian cities. Leave empty to search all of India. Examples: bangalore, mumbai, delhi, pune, chennai.

## `experience` (type: `string`):

Experience requirement in years, e.g. `0-3`, `3-5`, `5-8`. Leave empty for any experience.

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

Stop crawling after this many jobs per query. Each page has 20 jobs.

## `maxPages` (type: `integer`):

Stop after scraping this many pages per query. Each page returns 20 jobs. Leave empty for unlimited (up to maxJobs).

## `includeRecruiterContact` (type: `boolean`):

When available, include recruiter phone (jRP) and email (jRE) in the output. Note: not all job postings include this data.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer"
  ],
  "locations": [],
  "experience": "",
  "maxJobs": 100,
  "maxPages": 50,
  "includeRecruiterContact": true
}
```

# Actor output Schema

## `records` (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 = {
    "searchQueries": [
        "software engineer"
    ],
    "locations": [],
    "maxJobs": 100,
    "maxPages": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("promising_fire/shine-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 = {
    "searchQueries": ["software engineer"],
    "locations": [],
    "maxJobs": 100,
    "maxPages": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("promising_fire/shine-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 '{
  "searchQueries": [
    "software engineer"
  ],
  "locations": [],
  "maxJobs": 100,
  "maxPages": 50
}' |
apify call promising_fire/shine-jobs-scraper --silent --output-dataset

```

## MCP server setup

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