Shine.com job listings as JSON API
Shine Jobs Scraper is a pay-per-record Apify Actor by Daemon Data that returns Shine.com India jobs by keyword and city with full descriptions, salary range, experience, skills and industry as JSON, CSV or Excel. It costs $0.0008 per job with the default options ($0.80 per 1,000); no login to the source site, no proxy, no browser, and the same input runs from the Apify console, one REST call, Python, Node.js, n8n or an AI assistant through MCP.
Daemon Data Shine Jobs Scraper on Apify Listing as plain text
Checked on 26 Oct 2026
data analyst in Bangalore and Pune with 2 years of experience, posted in the last 3 days, gave 20 jobs from the first few pages (98 others were older, elsewhere or for another experience band, and were not charged). 50 python jobs with descriptions take about a minute.
Who uses it, for what
| You are | What you get |
|---|---|
| Job aggregators and job-alert apps | Shine as a source with stable ids, salary, experience band, full description and de-duplication across keywords and runs. Same conventions as the IIMJobs, Hirist, Foundit, Instahyre and Apna Actors by the same publisher. |
| Recruiters and staffing agencies | Who is hiring accountants in Mumbai or Java developers in Pune this week, at what salary and experience. |
| Salary and labour-market analysts | Salary ranges by role, city, experience and industry, with dates for trend lines. |
| B2B sales and lead generation | Companies with many open roles in a function are buying tools and services for it. |
| AI agents (MCP) | Ask Claude or ChatGPT "data analyst jobs in Pune posted this week with salary" and let it call this Actor through Apify's MCP server. |
Output fields
The most useful top-level fields with values from a real record; the full list is id, url, title, company, companyId, companyLogo, locations, places, experienceText, experienceMinYears, experienceMaxYears, salaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriod, skills, industry, functions, employmentType, badges, instantApply, postedAt, validThrough, description, descriptionHtml, searchTerm, searchCity, scrapedAt. Per-field notes and the OpenAPI definition are on the Apify API page.
| Field | Type | Example |
|---|---|---|
id | string | "19927000" |
url | string | "https://www.shine.com/jobs/senioor-accountant/shamisha-resources-m... |
title | string | "Senioor Accountant" |
company | string | "Shamisha Resources Management LLP Hiring For A leading Pharma comp... |
companyId | number | 508638 |
locations | array | ["Mumbai City"] |
experienceText | string | "6 to 10 Yrs" |
experienceMinYears | number | 6 |
experienceMaxYears | number | 10 |
salaryText | string | "8 - 18 Lakh/Yr" |
salaryMin | number | 800000 |
salaryMax | number | 1800000 |
salaryCurrency | string | "INR" |
salaryPeriod | string | "yearly" |
skills | array | ["accounts payable", "accounts receivable", "accountants"] |
Input and how to call it
A verified example input (it returned data on 2026-10-26):
{
"searchTerms": [
"data analyst"
],
"cities": [
"Pune"
],
"postedWithinDays": 7,
"includeDescription": true,
"maxJobsPerSearch": 50
}
One HTTP call starts a run, waits for it and returns the records (token from console.apify.com):
curl -X POST "https://api.apify.com/v2/acts/data_daemon~shine-jobs-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["data analyst"], "cities": ["Pune"], "postedWithinDays": 7, "includeDescription": true, "maxJobsPerSearch": 50}'
Python: ApifyClient(token).actor("data_daemon/shine-jobs-scraper").call(run_input=...), full file python/shine-jobs-scraper.py. Node.js: node/shine-jobs-scraper.mjs. n8n: importable workflow.
AI assistant (MCP): add the remote server https://mcp.apify.com/?tools=data_daemon/shine-jobs-scraper with header Authorization: Bearer YOUR_APIFY_TOKEN in Claude, ChatGPT, Cursor or VS Code and ask for the data in plain words.
All input fields
| Field | Type | Meaning |
|---|---|---|
searchTerms | array | Job titles or skills, one Shine search each, e.g. python, data analyst, accountant, sales executive, java developer, nurse. Leave empty to list all jobs (in the given cities, or in India). A job found by two searches is saved and charged once. |
cities | array | Cities as Shine names them, e.g. Bangalore, Mumbai, Delhi, Gurgaon, Noida, Hyderabad, Pune, Chennai, Kolkata, Ahmedabad, Navi Mumbai. Each keyword runs once per city. Shine also suggests jobs in nearby cities; the Actor keeps only jobs located in the city you asked for. |
experienceYears | integer | Only jobs whose experience range covers this many years, e.g. 2 keeps "1 to 3 Yrs" and "0 to 4 Yrs" but not "5 to 8 Yrs". |
postedWithinDays | integer | Only jobs posted in the last N days (e.g. 1 for a daily feed). Results are read newest first, so the search stops at the first page of older jobs. 0 or empty = any date. |
includeDescription | boolean | Open each job page for the full description (text + HTML), numeric salary range, industry, function, employment type and expiry date. Turn off for a fast list of titles, companies, cities, experience, salary text and skills. Price is the same either way. |
maxJobsPerSearch | integer | Cap for each keyword (and city). Newest jobs come first. 0 = no cap (a popular keyword can have tens of thousands of jobs; set a maximum cost per run). |
maxJobs | integer | Stop after this many saved jobs. 0 or empty = no total cap (the run's maximum cost still applies). |
onlyNewSinceLastRun | boolean | For schedules: remember delivered job ids (in a named key-value store in your account) and save only jobs that earlier runs with the same settings did not deliver. Skipped jobs are not charged. |
stateName | string | Name of the only-new memory. Empty = derived from the keywords, cities and experience. Give two schedules the same name to share one memory. |
skipJobIds | array | Shine job ids you already have (the id field). They are neither fetched, saved nor charged. |
Price
$0.0008 per job ($0.80 per 1,000); $0.001 per run. List prices for Apify Free and Starter plans; Scale and Business plans pay 15% to 30% less.
| Event | Price | Per 1,000 | Charged when |
|---|---|---|---|
| Job | $0.0008 | $0.80 | One Shine job saved to the dataset: id, URL, title, company, cities, experience range, salary (text and numbers), skills, industry, function, employment type, badges, posting and expiry dates and the full description (text + HTML). Skipped or filtered jobs are never charged. |
| Actor Start | $0.001 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
Worked example: the input above, capped at 50 jobs, costs at most $0.041. Apify's free plan includes $5 of usage a month, about 6,250 jobs; the Actor's own compute is included in the per-record price, and records skipped by filters, de-duplication or only-new mode are not charged.
Questions buyers ask
Is there an official Shine API?
Not a public one. This Actor reads Shine's public search and job pages, which robots.txt allows, and exposes them as a REST API with schedules, webhooks and only-new runs.
Why do some jobs have no salary numbers?
The employer chose "Not Disclosed". salaryText then says so.
Do I need a proxy?
No. If Shine starts refusing direct requests, the Actor switches to Apify's anti-bot proxy by itself.
Alternatives, honestly
| Option | What it gives you | Where it falls short for this job |
|---|---|---|
| Shine.com website | Search and alerts for a logged-in user | No bulk export or API |
| Other Shine Actors on Apify Store | Same board | Compare description and salary-range coverage, only-new mode and price per 1,000 |
| Build your own scraper | Full control | You parse the app's page data, follow job pages and maintain de-duplication |