Shine.com Jobs Scraper | 22 Fields, Monitor Mode, No Login avatar

Shine.com Jobs Scraper | 22 Fields, Monitor Mode, No Login

Pricing

from $1.50 / 1,000 jobs

Go to Apify Store
Shine.com Jobs Scraper | 22 Fields, Monitor Mode, No Login

Shine.com Jobs Scraper | 22 Fields, Monitor Mode, No Login

Scrape live Shine.com (Times Group) job listings: title, company, salary, experience band, location, employment type, skills and full description. Filter by keyword, location, experience, salary and employment type. No login, no browser. Use it as an MCP server in Claude, ChatGPT & AI agents.

Pricing

from $1.50 / 1,000 jobs

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

149

Total users

49

Monthly active users

11 hours ago

Last modified

Share

200 Shine.com jobs in 13 seconds: a recorded run returned 200 data analyst listings from 10 pages in 12.8 seconds

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with nearly 139,000 runs across our actors. This actor ranks #1 for "shine" and for "shine jobs" in Apify Store search.

Shine.com is one of India's larger job boards. Its listings lean towards volume hiring: sales, customer support and BPO, banking, retail and operations, alongside IT and analytics. Many roles are posted by staffing consultancies, and a good share show pay. This actor turns a Shine search into rows with salary in lakhs, experience in years and Shine's own filters.

Why choose this actor?

  • 200 jobs in 13 seconds. On 30 Sep 2026 a search for "data analyst" returned 200 listings from 10 pages in 12.8 seconds. It reads the public search data Shine's own website loads, so there is no login, no cookies and no browser.
  • Pay as numbers, never guessed. 367 of 1,000 rows in our test carried a salary, parsed into salary_min_lakhs and salary_max_lakhs. When a recruiter hides pay, the row says [Salary Hidden] and the number fields are left out rather than filled with a guess.
  • Only new jobs on repeat runs, with no start fee. In monitor mode our second run skipped the 15 Hyderabad jobs it had already delivered and returned 15 new ones. You pay from $1.50 per 1,000 jobs saved, and nothing per run.

Run it on Apify

Part of The Mine Works Jobs and hiring family: Foundit Monster India Jobs, Hirist Jobs Scraper, India Jobs MCP, Naukri Jobs Scraper, Internshala Scraper, Instahyre Jobs Scraper.

Try it in one minute

Switch the input page to JSON, paste this and click Start. It returns 10 data analyst jobs in Pune in a few seconds.

{
"searchKeywords": ["data analyst"],
"location": "Pune",
"maxJobs": 10
}

The actor takes search keywords, not Shine page links. Put one keyword or several in searchKeywords; each becomes Shine's own search, so data analyst runs the same search as the "data analyst jobs" page on shine.com. location takes one city name. 39 large cities, such as Bangalore (or Bengaluru), Delhi NCR, Gurugram and Kochi, match Shine's location filter exactly; any other name, such as Mysore, goes through Shine's "jobs in city" search instead. Leave it empty for all of India.

Apify's free plan includes $5 of credit every month, which covers about 2,000 results at this actor's price.

Copy to your AI assistant

themineworks/shine-jobs-scraper on Apify. It searches Shine.com, a large Indian job board, by keyword and returns one row per job with title, company, locations, experience range, salary in lakhs when shown, employment and shift type, skills, description, posting and expiry dates and apply link. Call ApifyClient("TOKEN").actor("themineworks/shine-jobs-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: searchKeywords (array of strings). Optional: location (one city name, blank means all India), experienceLevel ("lt1", "1to2", "3to5", "6to8", "9to10", "11to15" or "gt15"), salaryRange ("0to2", "3to5", "6to8", "9to12", "13to16", "17to25" or "gt25", lakhs a year), employmentType ("regular", "contractual", "internship" or "work-from-home"), shiftType ("full-time" or "part-time"), sortBy ("relevance" default, or "freshness"), maxJobs (default 5, maximum 1000), includeJobDescription (default false, which cuts descriptions at 500 characters), monitorMode (default false). Rows with a _type field are run summaries, not jobs. Full spec: GET https://api.apify.com/v2/acts/themineworks~shine-jobs-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations

Key features

  • Up to 22 fields per job: 19 on every row, plus the salary pair when pay is shown and the recruiter name when Shine lists one.
  • 6 of Shine's own filters: city, experience band (7 bands), salary band (7 bands), employment type (regular, contractual, internship, work from home), shift type, and sort by relevance or freshness.
  • Salary and experience as numbers. Shine's text such as "5 to 10 Yrs" becomes experience_min_years: 5 and experience_max_years: 10, and pay text becomes salary_min_lakhs and salary_max_lakhs, with each figure read in its own unit: "Rs 4.0 - 6 Lakh/Yr" gives 4 and 6, and "< Rs 50,000 - 3.0 Lakh/Yr" gives 0.5 and 3. The original text is kept next to them.
  • Many keywords in one run, merged and de-duplicated by Shine's job ID. Up to 1,000 jobs per run and 800 per keyword (40 pages of 20).
  • Monitor mode remembers up to 50,000 job IDs you have already received and delivers only new ones.
  • Short or full descriptions. By default each description is cut at 500 characters to keep datasets light; includeJobDescription returns the full text, which reached 4,943 characters in our test.

How to use it

Basic: one keyword, one city

{
"searchKeywords": ["accountant"],
"location": "Chennai",
"maxJobs": 100
}

Several keywords with Shine's filters

{
"searchKeywords": ["data analyst", "business analyst", "mis executive"],
"location": "Bangalore",
"experienceLevel": "3to5",
"employmentType": "regular",
"shiftType": "full-time",
"maxJobs": 300
}

maxJobs is a cap across all keywords, worked through in order. A single keyword stops at 800 jobs.

Daily alert for newly posted jobs

{
"searchKeywords": ["data analyst"],
"location": "Hyderabad",
"sortBy": "freshness",
"maxJobs": 100,
"monitorMode": true
}

Save it as a task and schedule it every morning, for example with the cron 30 8 * * *. With sortBy: "freshness", all 40 data analyst jobs in our test were posted that same day, against an average of 5.3 days old with relevance sorting. Monitor mode then drops anything you already have.

Work-from-home roles with full descriptions

{
"searchKeywords": ["customer support", "email support"],
"employmentType": "work-from-home",
"includeJobDescription": true,
"maxJobs": 200
}

In our test all 20 rows came back with employment_type: "work-from-home". Full descriptions can name the shift, the in-hand pay and the process (voice, chat or email), details the 500-character version may cut off.

Salary benchmarking for a role

{
"searchKeywords": ["inside sales executive"],
"location": "Delhi NCR",
"maxJobs": 800
}

Group rows by experience_min_years and average salary_min_lakhs and salary_max_lakhs over the rows that have them. Expect roughly a third of rows to carry pay. The salaryRange filter does not raise that share, because Shine still returns listings that hide pay: in our test, 1 of 20 rows from a filtered search showed figures.

Hiring in smaller cities

{
"searchKeywords": ["accountant", "sales executive"],
"location": "Mysore",
"maxJobs": 100
}

Cities outside Shine's main list use Shine's "jobs in city" search. Our Mysore test returned a job listed in Mysore and nearby cities, so check locations if you need one city only.

Input parameters

ParameterTypeDefaultWhat it does
searchKeywordsarray of stringsnone (required)One or more keywords, such as data analyst or inside sales. Keywords run one by one and their results are merged, each job kept once.
locationstringnone (all India)One city name. 39 large cities match Shine's location filter; other names use Shine's "jobs in city" search.
experienceLevelstring"" (any)lt1, 1to2, 3to5, 6to8, 9to10, 11to15 or gt15 years, Shine's own bands.
salaryRangestring"" (any)0to2, 3to5, 6to8, 9to12, 13to16, 17to25 or gt25 lakhs a year, Shine's own bands.
employmentTypestring"" (any)regular, contractual, internship or work-from-home.
shiftTypestring"" (any)full-time or part-time.
sortBystringrelevancerelevance or freshness (newest first).
maxJobsinteger, 1 to 1,0005Cap on jobs delivered across all keywords. Set it; the default is only 5.
includeJobDescriptionbooleanfalseReturn the full description. When off, descriptions are cut at 500 characters.
monitorModebooleanfalseSkip jobs already sent to you by an earlier run.
proxyConfigurationobjectnone (direct connection)Optional. When you send nothing, the actor connects to Shine directly. The Console form fills in Apify's proxy. Both work.

The Console form starts with python developer, Bangalore, 3 to 5 years, regular, full time, 100 jobs and Apify's proxy filled in, so a run from the form without edits uses all of those filters. An API call gets only the defaults above and what you send.

On speed: in our tests from our own machine, a page took about 1.3 seconds on a direct connection and about 5 seconds through the proxy. A 1,000-job run through the proxy took 264 seconds, close to the default 300-second run timeout, so for full-size runs either leave the proxy off or raise Timeout in the run options to 600.

What data do you get?

One row per job. Fields Shine leaves empty for a job are left out of that row rather than sent as null.

The job: job_id, title, skills (Shine's keyword tags), description, employment_type, shift_type and early_applicant (Shine's "early applicant" badge).

Who is hiring: company, and recruiter_name when Shine lists the poster. Staffing agencies often post as "Agency Hiring For Client", and that is how company reads.

Where: locations as a list, and location, the same places joined into one string.

Requirements and pay: experience_text as Shine shows it, parsed into experience_min_years and experience_max_years; salary_text as Shine shows it, parsed into salary_min_lakhs and salary_max_lakhs when pay is shown.

Dates and link: posted_date, posted_days_ago, expiry_date, apply_url for the job on shine.com, and scraped_at.

Run rows: a _type: "summary" row closes every run, followed by a _type: "info" row when any job was delivered. Both are free. Drop rows that have _type to keep jobs only.

Notes from 1,000 rows collected on 30 Sep 2026:

  • Pay was shown on 367 rows; the other 633 read [Salary Hidden].
  • Shine's lowest pay band is written in rupees, such as < Rs 50,000 - 3.0 Lakh/Yr or Rs 50,000 - 3.5 Lakh/Yr. The rupee figure is converted, so salary_min_lakhs is 0.5 on those rows; when the text starts with <, read 0.5 as "up to Rs 50,000". A second 1,000 job test on 30 Sep 2026 had 19 such rows among 372 with pay, all converted.
  • When Shine shows only a lower figure, as in Rs 85 - Rs Lakh/Yr, salary_max_lakhs is left out of the row.
  • recruiter_name was on 47% of rows. It is often a person's name.
  • An experience text of "0 Yrs" gives 0 for both numbers, which usually means freshers.
  • early_applicant was false on every row, and without a shift filter every row was full-time.
  • A listing can still appear for a short time after its expiry_date.

Stable fields for automations

All 1,000 sampled rows carried these 15 fields. These names are fixed: build sheet columns, Zaps or n8n mappings on them without worrying about renames.

FieldWhat it is
job_idShine's job ID. Use it as the unique key.
titleJob title as posted
companyEmployer, or "Agency Hiring For Client"
locationsList of cities
experience_min_yearsMinimum experience in years
experience_max_yearsMaximum experience in years
experience_textExperience as Shine shows it, such as "5 to 10 Yrs"
salary_textPay as Shine shows it, or [Salary Hidden]
employment_typeregular, contractual, internship or work-from-home
shift_typefull-time or part-time
skillsList of keyword tags
descriptionDescription text, cut at 500 characters unless includeJobDescription is on
apply_urlLink to the job on shine.com
posted_dateWhen the job was posted, ISO 8601 in UTC
expiry_dateWhen the listing closes, ISO 8601 in UTC

location, posted_days_ago, early_applicant and scraped_at were also on every row.

Output examples

Real rows from our 30 Sep 2026 test runs. Descriptions and long skill lists are cut short here.

Freshness sort, pay shown (salary_text left out here; it holds Shine's own "Lakh/Yr" text)

{
"job_id": "19653560",
"title": "Data Engineer",
"company": "Ara Resources Private Limited",
"locations": ["Bangalore"],
"location": "Bangalore",
"experience_min_years": 6,
"experience_max_years": 8,
"experience_text": "6 to 8 Yrs",
"salary_min_lakhs": 12,
"salary_max_lakhs": 20,
"employment_type": "regular",
"shift_type": "full-time",
"skills": ["spark", "etl", "azure", "aws", "databricks", "pyspark", "delta lake", "unity catalog"],
"description": "We are seeking a skilled Data Engineer to join our dynamic team in Karnataka. The ideal candidate will have a strong background in building and maintaining data pipelines...",
"apply_url": "https://www.shine.com/jobs/data-engineer/ara-resources-private-limited/19653560",
"posted_date": "2026-09-29T15:47:24.000Z",
"posted_days_ago": 0,
"expiry_date": "2026-10-14T15:47:19.000Z",
"early_applicant": false,
"scraped_at": "2026-09-29T23:08:47.659Z"
}

Pay hidden by the recruiter

{
"job_id": "19653334",
"title": "Senior Data Engineer",
"company": "Siera IT Services Private Limited",
"locations": ["Gurugram", "Bangalore"],
"location": "Gurugram, Bangalore",
"experience_min_years": 5,
"experience_max_years": 10,
"experience_text": "5 to 10 Yrs",
"salary_text": "[Salary Hidden]",
"employment_type": "regular",
"shift_type": "full-time",
"skills": ["dbt", "python", "sql", "snowflake", "apache airflow", "redshift", "bigquery"],
"description": "We are seeking a highly skilled Senior Data Engineer to join our dynamic team. The ideal candidate will have a strong background in data engineering...",
"apply_url": "https://www.shine.com/jobs/senior-data-engineer/siera-it-services-private-limited/19653334",
"posted_date": "2026-09-29T15:42:15.000Z",
"posted_days_ago": 0,
"expiry_date": "2026-10-14T15:42:13.000Z",
"early_applicant": false,
"scraped_at": "2026-09-29T23:08:47.661Z"
}

Work from home, full description on (salary_text left out here)

{
"job_id": "19588292",
"title": "Hiring | Email Process Work From Home",
"company": "KNOWPLICITY RECRUITMENT AND TRAINING CONSULTANCY PRIVATE LIMITED",
"locations": ["Mumbai City"],
"location": "Mumbai City",
"experience_min_years": 5,
"experience_max_years": 10,
"experience_text": "5 to 10 Yrs",
"salary_min_lakhs": 3.5,
"salary_max_lakhs": 6,
"employment_type": "work-from-home",
"shift_type": "full-time",
"skills": ["email clients", "us process", "customer service", "customer support", "email support", "customer care"],
"description": "Hiring | Email Process Work From Home Position: Email Process Customer ServiceWork Mode: Work From Home (WFH)Candidate Location: Mumbai / Thane / Navi Mumbai onlySalary: 45,000 In-Hand per monthShift: Rotational Night Shift / US ShiftShift Duration: 10 Hours...",
"apply_url": "https://www.shine.com/jobs/hiring-email-process-work-from-home/knowplicity-recruitment-and-training-consultancy-private-limited/19588292",
"posted_date": "2026-09-25T05:46:34.000Z",
"posted_days_ago": 4,
"expiry_date": "2026-11-23T18:30:00.000Z",
"early_applicant": false,
"scraped_at": "2026-09-29T23:08:31.193Z"
}

Descriptions come as plain text with the HTML removed, so words from separate lines can run together, as above.

Summary row after a repeat run in monitor mode

{
"_type": "summary",
"keywords_searched": ["data analyst"],
"location": "Hyderabad",
"jobs_requested": 15,
"jobs_scraped": 15,
"jobs_failed": 0,
"charged_for": 0,
"monitor": true,
"monitor_degraded": false,
"previously_seen": 15,
"new_this_run": 15,
"skipped_duplicates": 15,
"scraped_at": "2026-09-29T23:09:13.849Z"
}

This run skipped the 15 jobs delivered the run before and returned 15 new ones. The charged_for value is 0 here because we ran the test locally, where no billing happens; on Apify it matches the jobs charged.

Pricing

You pay for each job that lands in your dataset, and less per job on higher Apify plans.

EventFree planBronze (Starter)Silver (Scale)Gold and above (Business)
job-scraped, per job$0.0025$0.002$0.00175$0.0015
Per 1,000 jobs$2.50$2.00$1.75$1.50
  • Start fee: none. There is no per-run or per-memory charge, and platform compute is included in the job price.
  • Never charged: jobs already delivered in monitor mode, the same job found under two keywords, the summary and info rows, empty searches and failed pages.
  • Spending cap: Apify never charges more than the maximum cost per run you set in the run options.
  • Upcoming changes: none scheduled; these prices date from 12 Aug 2026.

Worked examples on the Free plan: 100 jobs cost $0.25 and 1,000 jobs cost $2.50. On Gold, 1,000 jobs cost $1.50.

FAQ

What is Shine.com? Shine.com is an Indian job board with a large share of volume hiring: sales, customer support and BPO, banking, retail and operations, as well as IT and analytics roles. Many listings come from staffing consultancies.

How many jobs can I get? Up to 1,000 per run and 800 per keyword. For more, split by city, experience band or keyword across several runs.

How fresh is the data? Each run reads Shine live when it starts. posted_date and posted_days_ago show each job's age, and sortBy: "freshness" puts the newest first.

Do I need a Shine account or cookies? No. The actor reads the same public search data Shine's website loads for any visitor. You only need an Apify account.

Do I need a proxy? No. With no proxy settings the actor connects to Shine directly, which was the faster option in our tests. Apify's proxy also works if you prefer it.

Why does a job say [Salary Hidden]? The recruiter chose not to show pay. The actor reports Shine's text as it is and leaves the number fields out, instead of guessing. About a third of listings show pay.

How are rupee amounts in the pay text handled? Each figure is converted on its own. Shine writes its lowest band in rupees and the rest in lakhs, as in < Rs 50,000 - 3.0 Lakh/Yr, which gives salary_min_lakhs 0.5 and salary_max_lakhs 3. A text such as Rs 50000 /Yr gives 0.5 for both. All 142 distinct pay texts we collected from Shine in September 2026 come out between 0.5 and 95 lakhs.

Why does the company read "X Hiring For Y"? A staffing agency posted the job for a client. Shine shows it that way, and so does company. The client's name is the part after "Hiring For".

How does monitor mode decide what is new? The actor stores the IDs of jobs it has already sent you, up to 50,000, in your own Apify account and skips them next time. That memory belongs to the actor, not to one task: two saved searches share it, so a job the first one delivered will not come again from the second. When the memory cannot be opened, the run falls back to delivering everything and says so with monitor_degraded: true in the summary.

What happens if Shine fails during a run? Failed pages are retried. After 12 failed or empty pages in a row the run stops to limit cost, keeps what it collected and still writes the summary row. Over the last 30 days, 163 of 163 public runs succeeded.

Which formats can I export? Any of Apify's dataset formats: JSON, CSV, Excel, XML, RSS or HTML, from the Storage tab or the API. Lists such as skills and locations become numbered columns (skills/0, skills/1 and so on) in CSV and Excel.

Can my AI assistant run it?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/shine-jobs-scraper.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http shine-jobs-scraper "https://mcp.apify.com/?tools=themineworks/shine-jobs-scraper".

Is it legal to scrape Shine.com? The actor collects only public job listings that anyone can view without logging in, and nothing about job seekers. Some listings name the recruiter, and a few descriptions include a recruiter's phone number, which is personal data. You are responsible for how you store and use it, including Shine.com's terms and data protection law such as GDPR, CCPA and India's DPDP Act. This is general information, not legal advice.

Integrations

  • Google Sheets: export each run to a sheet and chart pay by experience band.
  • Make, Zapier and n8n: the Apify apps and nodes can start a run and hand each new job to email, Slack or a CRM.
  • Webhooks: Apify can notify your endpoint when a run ends, with the dataset ID to fetch.
  • API: every run and dataset is reachable over REST and through the Python and JavaScript clients.
  • MCP clients: Claude, ChatGPT, Cursor and other assistants reach the actor through Apify's MCP server at https://mcp.apify.com.

More from The Mine Works

Jobs and hiring

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

More tools

Support

Report bugs and field requests in the Issues tab. If you need a site we do not scrape yet, write to dmineworks@gmail.com.

Shine.com Jobs Scraper turns Shine searches into clean job rows with pay in lakhs, experience in years and new-job monitoring, from $1.50 per 1,000 with no start fee.