# Shine Jobs Scraper & API: Real or Fake Check, Salary (`s_actors/shine-jobs-scraper`) Actor

Scrape Shine.com India jobs with a real-or-fake check on every job: imported feed jobs that hide the employer, US jobs listed as "All India", fee and easy-money offers. Company or agency, salary in lakhs, applicants, recruiter contact, all results, job alerts.

- **URL**: https://apify.com/s_actors/shine-jobs-scraper.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** Jobs, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.62 / 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

### Shine Jobs Scraper & API: Real or Fake Check, Salary

Scrape **Shine.com jobs** (shine.com, one of India's largest job boards, by HT Media) to Excel, CSV or JSON **without login**, and know **which jobs are real**. What sets it apart:

- **Is this Shine job real or fake?** Every row has a `verdict` (**looks genuine**, **check first** or **likely fake**) with the reasons in plain words. Likely fake jobs are hidden by default and **free**.
- **Imported jobs.** Many Shine jobs were never posted on Shine. Shine pulls them in from other sites and job feeds. In our test of 3 October 2026 that was **180 of the 200 newest "typing" jobs**, 135 of 200 "accountant", 114 of 200 "data entry" and 104 of 200 "python". These jobs have no recruiter on Shine, a placeholder contact (`shinetest12345@gmail.com`) and no link to the source. Shine often replaces the employer's name with **"reputed company"**. Each row says `imported: true`, and one switch drops them.
- **US jobs listed as "All India".** Remote feed jobs that say "must reside in Texas", "work in our Washington, DC office" or "US citizens" are listed on Shine as Indian jobs. We found 87 of them in 2,632 jobs. They are marked **likely fake: job abroad listed in India**.
- **Scam signs checked**: a registration fee or deposit, easy money for data entry, typing or work from home, a pay-to-start "business setup", a remote "no experience" feed job with no employer named, contact on WhatsApp or Gmail, a phone number in the text, another city in the text than in the listing, a 4x salary range.
- **Company or consultancy?** Most Shine jobs come from placement agencies ("X Hiring For Y"). `postedByType` is company, agency or imported, `hiringFor` names the client, and you can filter on it.
- **Recruiter contact, only where the recruiter published it.** Shine's search data also carries contacts that recruiters chose to hide. This Actor returns `recruiterEmail` and `recruiterPhone` only where the job page shows them. Shine's placeholder pair is removed. **One row per recruiter** turns a search into a lead list of consultancies and recruiters, each with all its jobs.
- **All of a search, newest first.** No 1,000-job cap: "sales manager" alone has 62,000 jobs. Read newest first with "Posted within the last 24 hours / week" (Shine has no date filter of its own).
- **Applicants** on every job (from the job page), **salary in lakhs** (`salaryLakhsMin` 7, `salaryLakhsMax` 26), experience in years, Shine's own filters (experience and salary bands, industry, function, contract, walk-in) and **job alerts**.

```json
{ "keywords": ["accountant"], "locations": ["Pune"], "postedWithin": "pastWeek", "maxJobsPerSearch": 100 }
```

Only jobs that look genuine and were posted on Shine by a recruiter who published a contact:

```json
{ "keywords": ["telecaller", "customer support"], "locations": ["Delhi", "Noida"], "fakeJobCheck": "onlyGenuine", "skipImportedJobs": true, "onlyWithRecruiterContact": true }
```

No Shine account, no cookies. Use it as a **Shine jobs API**: one call returns clean JSON with the fields below.

#### What you get

**One row per job.** Real examples, 3 October 2026:

| job | company | location | posted by | salary | applicants | verdict | why |
|---|---|---|---|---|---|---|---|
| Python Developer | Right Move Staffing Solutions | Bangalore | agency | ₹7 - 26 L | 1 | looks genuine | |
| Account Executive | Intriant HR Services | Pune | agency | ₹1.5 - 3 L | 17 | looks genuine | |
| Data Entry Operator | OneTech BPO | Bangalore | company | hidden | 7 | looks genuine | |
| Senior Data Analyst - Remote | Jobrapido | Bangalore | imported | hidden | 1 | check first | imported from another site |
| Help Desk Support WFH | remotepromsp | All India | imported | hidden | 0 | check first | employer name hidden ("reputed company"), imported |
| Remote Opportunity – Computer User Support | remotepromsp | All India | imported | hidden | 1 | likely fake | job abroad listed in India ("Dallas") |
| Entry Level/No Experience reputed company Junior Data Entry Clerk | vacancy global pro | All India | imported | hidden | 23 | likely fake | remote "no experience" job from a job feed, employer not named |

| Field | Description |
|---|---|
| `jobId`, `jobUrl`, `title`, `companyName`, `location`, `locations`, `states` | The job, its Shine page, all its cities and their states |
| `verdict`, `fakeJobSigns`, `warnings`, `redFlags`, `redFlagCount` | Real-or-fake verdict; strong signs (likely fake) and warnings (check first) with reasons |
| `imported`, `postedByType`, `hiringFor` | Imported from another site or posted on Shine; company, agency or imported; the agency's client |
| `salaryText`, `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `salaryYearlyMin`, `salaryYearlyMax`, `salaryLakhsMin`, `salaryLakhsMax`, `salaryHidden` | Salary as Shine shows it, as numbers in INR a year and in lakhs; hidden salaries marked |
| `postedDate`, `postedAt`, `daysSincePosted`, `expiresAt` | When the job was posted and when Shine takes it down |
| `applicants`, `vacancies` | How many have applied on Shine; openings |
| `recruiterEmail`, `recruiterPhone`, `contactHiddenByRecruiter` | The contact the recruiter published (null when hidden or a placeholder) |
| `experienceText`, `experienceMinYears`, `experienceMaxYears`, `experienceLevel` | Experience asked: "4 to 7 Yrs" = 4 and 7 |
| `employmentType`, `partTime`, `walkIn`, `workplaceType`, `workplaceTypeEvidence` | Regular, contractual or internship; part time; walk-in interview; remote with the words that say so |
| `industry`, `industries`, `functionalArea`, `skills`, `tags`, `activelyHiring`, `premium` | Shine's industry, job function, skills and badges |
| `companyId`, `companyLogo`, `description` | Company id and logo, full description |
| `searchKeyword`, `searchLocation`, `searchUrl`, `isNew`, `scrapedAt` | Which search found the job; alerts |

Six table views: **Jobs**, **Real or fake**, **Salary**, **Recruiter**, **Details** and **Recruiters (lead list)**.

#### Recruiter lead list

Indian hiring runs through consultancies that post many jobs under one contact. Turn on **One row per recruiter** and the run returns one row per recruiter or consultancy that **published** an email or phone on Shine, with everything it is hiring for in your search:

```json
{ "keywords": ["sales manager", "insurance"], "oneRowPerRecruiter": true, "maxJobsPerSearch": 200 }
```

| Field | Description |
|---|---|
| `recruiterEmail`, `recruiterPhone`, `otherEmails`, `otherPhones` | The contact the recruiter published (others of the same recruiter too) |
| `emailDomain`, `personalEmail`, `companyWebsite` | Business or personal email; the website of a business email domain |
| `companyName`, `companyNames`, `postedByType`, `hiringFor` | Company or consultancy, and the clients it hires for |
| `jobCount`, `jobTitles`, `jobIds`, `jobUrls` | Its jobs in the search |
| `locations`, `industries`, `functionalAreas`, `skills` | Where and what it hires |
| `salaryLakhsMin`, `salaryLakhsMax`, `totalApplicants`, `vacancies` | Salary range over its jobs, applicants, openings |
| `latestPostedAt`, `firstPostedAt`, `daysSinceLastPost` | How active it is |
| `verdict`, `redFlags` | The worst verdict over its jobs, all reasons |

You pay once per recruiter, not per job. Recruiters who hid their contact are never returned. Use the contacts for recruitment purposes and according to the law that applies to you.

#### How it works

| Step | What happens |
|---|---|
| 1. Search | Each keyword × city is a Shine search with your Shine filters, 50 jobs a request, newest first, as deep as you ask |
| 2. Real or fake | Each job is checked: imported or posted on Shine, employer named or not, abroad or India, fee, easy money, WhatsApp, city, salary range |
| 3. Your filters | Likely fake jobs hidden (or only genuine ones kept), then your filters: date, experience, salary, company or agency, contact, remote, title words |
| 4. Job page | For each job kept: its page, for the number of applicants, the states and Shine's salary numbers |

Hidden likely-fake jobs, jobs removed by your filters, copies (same title, company and cities: consultancies post one job many times) and jobs seen by an alert are not charged.

#### Why this Actor

| | This Actor | Typical Shine scraper |
|---|---|---|
| Real-or-fake verdict with reasons | ✅ Likely fake hidden and free | ❌ |
| Imported jobs marked (no recruiter on Shine) | ✅ Filter | ❌ Returned as Shine jobs |
| US jobs listed as "All India" | ✅ Flagged | ❌ |
| Company, agency or imported; the agency's client | ✅ Filter | ⚠️ Company name only |
| Recruiter contact | ✅ Only where the recruiter published it | ⚠️ Includes contacts recruiters chose to hide |
| Lead list: one row per recruiter with all its jobs | ✅ Paid once per recruiter | ⚠️ Some |
| Jobs per search | ✅ All (62,000 for "sales manager") | ⚠️ 800-1,000 |
| Applicants | ✅ Included | ⚠️ Paid extra step |
| Posted within (Shine has no date filter) | ✅ Newest first, stops past the window | ⚠️ Some |
| Alerts (only new jobs) | ✅ Seen jobs not charged | ⚠️ Some |
| Price per 1,000 jobs | **$0.78** with applicants | $0.79-2.00, applicants +$1.00 |

#### Pricing

Pay per event, no subscription needed. Apify Scale and Business plans pay less:

| Event | Free and Starter plans | Scale plan | Business plan |
|---|---|---|---|
| Run start | $0.001 | $0.001 | $0.001 |
| Job (all fields: verdict and reasons, imported or posted on Shine, company or agency, salary, applicants, recruiter contact, full description) | $0.00078 | $0.000702 | $0.000624 |
| Recruiter (one row per recruiter mode: published contact and all its jobs) | $0.00078 | $0.000702 | $0.000624 |

**1,000 jobs = $0.78.** Free: likely fake jobs hidden by the check, jobs removed by your filters, copies, closed jobs, jobs already seen by an alert. Platform usage is included. Set a maximum cost per run in the run options: the Actor stops there.

#### Ready-made tasks

| Task | What it does |
|---|---|
| [Shine Jobs: Real or Fake Check](https://apify.com/s_actors/shine-jobs-scraper/examples/shine-jobs-real-or-fake-check) | Newest typing and work-from-home jobs with every verdict shown: imported feed jobs, hidden employers, jobs abroad |

#### Alerts

1. Set your keywords, cities and filters, turn on **Only new jobs**, give the alert a name.
2. Save it as a task and add a **schedule** (every morning, with "Posted within: Last 3 days").
3. Send the results by email, Slack, Google Sheets, Make, Zapier or **n8n** with Apify integrations.

The first run returns the current jobs, newest first; next runs return only jobs not seen before.

#### Other job tools

| Actor | What it does |
|---|---|
| [LinkedIn Jobs Scraper](https://apify.com/s_actors/linkedin-jobs-scraper) | LinkedIn jobs without login: a remote filter that works, salaries from descriptions, job alerts |
| [Glassdoor Jobs Scraper](https://apify.com/s_actors/glassdoor-jobs-scraper) | Glassdoor jobs with salary ranges and all company ratings, filter by work-life balance, job alerts |
| [Wellfound Jobs Scraper](https://apify.com/s_actors/wellfound-jobs-scraper) | Startup jobs from Wellfound (AngelList): salary and equity as numbers, stage, YC, visa sponsorship, job alerts |
| [StepStone Jobs Scraper](https://apify.com/s_actors/stepstone-jobs-scraper) | StepStone.de and .at jobs with salary estimates for most jobs, exact matches only, English jobs in Germany |
| [XING Jobs Scraper](https://apify.com/s_actors/xing-jobs-scraper) | XING jobs in Germany, Austria and Switzerland: salaries per year, English-only jobs, more than 1,000 jobs per search |
| [Instahyre Jobs Scraper](https://apify.com/s_actors/instahyre-jobs-scraper) | Instahyre jobs in India with posting dates (newest first), company Glassdoor ratings, jobs for freshers and remote jobs |
| [Hirist Jobs Scraper](https://apify.com/s_actors/hirist-jobs-scraper) | Hirist tech jobs in India with recruiter activity (applications, recruiter actions, last active), every job of a skill, AmbitionBox ratings |
| [Dice Jobs Scraper](https://apify.com/s_actors/dice-jobs-scraper) | Dice.com tech jobs with W2, C2C and 1099 contract types, recruiter apply emails, visa sponsorship and reposts |
| [Internshala Scraper](https://apify.com/s_actors/internshala-scraper) | Internshala internships and fresher jobs in India with the guaranteed stipend split from incentives, red flags of fake listings and applicants per opening |
| [Foundit Jobs Scraper](https://apify.com/s_actors/foundit-jobs-scraper) | Foundit (Monster India) jobs in India, the Gulf and SEA: posted on Foundit or reposted from LinkedIn, original link, salary, red flags |
| [Cutshort Jobs Scraper](https://apify.com/s_actors/cutshort-jobs-scraper) | Cutshort tech and startup jobs in India, live: recruiter's last activity with ghost jobs hidden, company or agency, salary in lakhs, red flags |
| [iimjobs Scraper](https://apify.com/s_actors/iimjobs-scraper) | iimjobs management, finance and MBA jobs in India with recruiter actions and applicants (what iimjobs Pro sells), exact keyword matches, AmbitionBox ratings |

#### FAQ

**Is Shine.com real or fake?** Shine.com is a real Indian job portal run by HT Media (Hindustan Times group). Most jobs on it are posted by employers and placement consultancies. But many jobs in its search results were not posted on Shine at all: they are imported from other sites and job feeds. Some of those are US remote jobs relabelled "All India", others hide the employer behind "reputed company". Real employers never ask for money to hire you. Check `verdict` and `imported` before you apply.

**Does Shine.com ask for money?** Shine sells optional paid services to candidates (profile booster, resume writing, application highlighter). They are not needed to apply. A recruiter who asks for a registration, training or joining fee or a deposit is a red flag: such jobs get **likely fake: fee or deposit asked**.

**What makes a job "likely fake"?** A fee or deposit; easy money promised for data entry, typing, SMS or work from home ("earn daily", "no interview"); a pay-to-start business or franchise; an imported remote or "All India" job whose text is about a job abroad with no word of India; a remote "no experience" feed job that hides the employer. **Check first** means a reason to look closer: imported job, employer or client not named, contact on WhatsApp, a Gmail address, a phone number in the text, another city in the text, a salary range 4x wide. A verdict is a guide, not proof.

**Are Shine work-from-home and data entry jobs real?** Some are. In our test of 3 October 2026 most of the newest "typing" and "data entry" jobs were imported from other sites and job feeds, and about 1 in 5 typing and data entry jobs (69 of 338) was likely fake. Search with Location "Remote" or **Remote only** and keep **Hide likely fake jobs** on.

**Why are recruiter contacts missing on most jobs?** Most recruiters hide their email and phone on Shine (`contactHiddenByRecruiter: true`). Shine's search data still carries them, and some scrapers sell them. This Actor respects the recruiter's choice. Imported jobs have Shine's placeholder pair, which is removed.

**Why do the same jobs repeat?** Consultancies post one job many times, for several cities or under several titles. **Skip copies of the same job** (on by default) keeps one, free.

**Do I need a Shine account?** No. No login is used and candidate profiles are not collected.

#### Use with the API and AI agents

Run it from the Apify API, the JavaScript or Python client, **n8n**, Make or Zapier, or from AI agents through the [Apify MCP server](https://mcp.apify.com) (Claude, ChatGPT, Cursor). One call: `POST https://api.apify.com/v2/acts/s_actors~shine-jobs-scraper/run-sync-get-dataset-items` with the input above returns the jobs as JSON. Set **Description format** to "None" for smaller answers, and **Applicants from the job page** off for the fastest runs.

#### Is it legal?

The Actor reads public Shine job listings that anyone can open without an account, as a visitor does. It does not log in or collect candidate profiles, and it returns a recruiter's contact only where the recruiter published it on the job. Use such data according to the laws that apply to you (India's DPDP Act, GDPR and similar) and Shine's terms. This Actor is not affiliated with Shine.com or HT Media.

# Actor input Schema

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

Job title, skill or role, one per line: "accountant", "python developer", "telecaller", "data entry", "sales manager", "staff nurse". Each is its own Shine search (Shine's own search, all its results: no 1,000 cap). Empty = every job on Shine (about 238,000) in the locations below.

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

City, one per line: Bangalore, Mumbai, Delhi, Gurgaon, Noida, Hyderabad, Pune, Chennai, Kolkata, Ahmedabad, Jaipur, Kochi, Lucknow, Indore… or "Remote" (jobs whose title or text says remote / work from home). Each location is its own search. Empty = all of India.

## `maxJobsPerSearch` (type: `integer`):

Cap for each keyword × location and each link. Shine has no cap of its own: "sales manager" alone has 62,000 jobs.

## `fakeJobCheck` (type: `string`):

verdict = "likely fake" (a fee or deposit, easy money for data entry or typing, a pay-to-start business, a job abroad listed in India, a remote "no experience" feed job with no employer), "check first" (imported, employer not named, WhatsApp or Gmail contact, another city in the text, 4x salary range…) or "looks genuine". Hidden jobs are free.

## `skipImportedJobs` (type: `boolean`):

Skip jobs Shine imported from other sites (imported = true): they have no recruiter and no contact on Shine. Skipped jobs are free.

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

Most Shine jobs come from consultancies ("X Hiring For Y", placement and staffing firms). Every row says postedByType (company, agency or imported) and hiringFor.

## `onlyWithRecruiterContact` (type: `boolean`):

Keep only jobs whose recruiter published an email or phone on Shine. Contacts a recruiter chose to hide are never returned, and Shine's placeholder pair (shinetest12345@gmail.com) is removed.

## `oneRowPerRecruiter` (type: `boolean`):

Instead of one row per job: one row per recruiter or consultancy with a published contact, with all its jobs in the search (count, titles, cities, industries, clients, salary range, applicants, last posted) and the company website from a business email. Consultancies post many jobs under one contact, so you pay once per recruiter. Max jobs per search then counts jobs with a contact.

## `postedWithin` (type: `string`):

By the posting date. Shine has no date filter: the Actor reads newest first and stops past the window, so a short window is fast and cheap.

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

Newest first is best for job alerts and date windows.

## `experienceBands` (type: `array`):

Shine's own experience filter (server side). Several = any of them.

## `experienceMinYears` (type: `integer`):

Keeps jobs whose experience range reaches this many years (exact, by each job's range).

## `experienceMaxYears` (type: `integer`):

Keeps jobs open to candidates with at most this many years. 0 = jobs for freshers.

## `minSalaryLakhs` (type: `integer`):

Keeps jobs that show a salary reaching this many lakh a year, e.g. 6 = ₹6 L. About 3 in 4 Shine jobs hide the salary; they are dropped by this filter (free).

## `salaryBands` (type: `array`):

Shine's own salary filter (server side). It also matches jobs that hide the salary; for shown salaries only use the minimum above.

## `employmentTypes` (type: `array`):

Shine's own type. Few jobs carry Shine's work-from-home tag (152 of 238,000); for remote jobs use Location "Remote" or the switch below.

## `remoteOnly` (type: `boolean`):

Keep jobs whose title, location or text says remote or work from home (workplaceType = remote, with the evidence).

## `walkInOnly` (type: `boolean`):

Shine's walk-in jobs.

## `industries` (type: `array`):

Shine industry names, one per line: "IT Services & Consulting", "BFSI", "Medical / Healthcare", "BPO / Call Center", "Manufacturing", "Education / Training". A part of the name works; the run logs what matched.

## `functionalAreas` (type: `array`):

Shine job functions, one per line: "Sales / BD", "Finance / Accounts / Tax", "Recruitment", "Customer Service (Domestic)", "Testing", "Teacher / Tutor".

## `titleMustMatchKeyword` (type: `boolean`):

Shine's search also returns jobs that only mention the keyword. On = only titles with every word of the keyword.

## `titleInclude` (type: `array`):

e.g. senior, executive, intern.

## `titleExclude` (type: `array`):

e.g. sales, telecaller.

## `companyExclude` (type: `array`):

Company or consultancy names (or parts) to skip.

## `skipDuplicates` (type: `boolean`):

Same title, company and cities = one job (consultancies post one job many times). Copies are free.

## `includeApplicants` (type: `boolean`):

Open each job's page for the number of applicants, the states of its cities and the salary as Shine stores it. Off = faster (one request per 50 jobs), applicants = null.

## `searchUrls` (type: `array`):

One per line: https://www.shine.com/job-search/python-jobs-in-bangalore, https://www.shine.com/job-search/accountant-jobs, https://www.shine.com/job-search/jobs-in-pune.

## `jobUrls` (type: `array`):

Single jobs to check: https://www.shine.com/jobs/<title>/<company>/<id>. Each comes back with its verdict and reasons, whatever the setting above.

## `descriptionFormat` (type: `string`):

The full description (Shine stores it as plain text).

## `onlyNewJobs` (type: `boolean`):

Remembers the jobs of earlier runs with the same alert name and returns only new ones, newest first. Schedule the Actor hourly or daily for a Shine job alert to Slack, email or a sheet. Jobs already seen are free.

## `monitorName` (type: `string`):

Separate memory per alert, e.g. "accountant-pune". Empty = "default".

## `maxConcurrency` (type: `integer`):

How many Shine requests run at once.

## `debugLog` (type: `boolean`):

Log every retry.

## Actor input object example

```json
{
  "keywords": [
    "data entry"
  ],
  "maxJobsPerSearch": 30,
  "fakeJobCheck": "hideLikelyFake",
  "skipImportedJobs": false,
  "postedBy": "any",
  "onlyWithRecruiterContact": false,
  "oneRowPerRecruiter": false,
  "postedWithin": "anyTime",
  "sortBy": "newest",
  "remoteOnly": false,
  "walkInOnly": false,
  "titleMustMatchKeyword": false,
  "skipDuplicates": true,
  "includeApplicants": true,
  "descriptionFormat": "text",
  "onlyNewJobs": false,
  "maxConcurrency": 10,
  "debugLog": false
}
```

# Actor output Schema

## `overview` (type: `string`):

The main fields: verdict, who posted, salary, experience, applicants.

## `trust` (type: `string`):

Verdict and its reasons, imported or posted on Shine, agency and client, applicants.

## `pay` (type: `string`):

Salary in INR a year and in lakhs, hidden salaries, experience.

## `recruiter` (type: `string`):

Company or consultancy, client, contact the recruiter published, openings.

## `details` (type: `string`):

Industry, function, skills, remote, type, walk-in, states, expiry.

## `recruiters` (type: `string`):

In "One row per recruiter" mode: published contact, job count, titles, cities, clients, salary range, last posted.

## `all` (type: `string`):

Every field of every job.

# 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": [
        "data entry"
    ],
    "maxJobsPerSearch": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/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 = {
    "keywords": ["data entry"],
    "maxJobsPerSearch": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/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 '{
  "keywords": [
    "data entry"
  ],
  "maxJobsPerSearch": 30
}' |
apify call s_actors/shine-jobs-scraper --silent --output-dataset

```

## MCP server setup

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