Shine Jobs Scraper · India, salary filters · $1/1K avatar

Shine Jobs Scraper · India, salary filters · $1/1K

Pricing

$1.00 / 1,000 results

Go to Apify Store
Shine Jobs Scraper · India, salary filters · $1/1K

Shine Jobs Scraper · India, salary filters · $1/1K

Scrape Shine job listings in India for job market research, recruiting and salary benchmarking. Filters: keyword, city, experience, salary band, job type. Titles, employers, skills, descriptions, dates. $1/1K jobs.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

MLG Data

MLG Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Features

Limited permissions

Share

Shine Jobs Scraper

Scrape Shine jobs by keyword and location, then export Shine data to CSV, JSON, or Excel. This Shine API alternative collects public job search results with titles, organizations, locations, experience, salary information when published, descriptions, skills, dates, and direct listing links.

Search several phrases in one run. The actor merges duplicate job IDs, applies the site's own search filters, and stops at the result limit you set. A role appearing under two phrases is delivered once, with searchKeyword showing the phrase that found it first.

What data can you extract from Shine?

Each dataset row represents one public job listing. The columns below are stable even when a listing has missing details; unavailable scalar values appear as null. Arrays remain arrays. Dates are copied from the search response, while scrapedAt records collection time in UTC.

FieldDescriptionExample
jobIdStable listing ID used for deduplication19574136
titlePublished role titleEmbedded Linux Application Developer
companyOrganization or posting consultancyA public organization name
companyIdNumeric organization ID in the search response792074
industryIndustry categoryAuto Components
locationsEvery listed location["Bangalore"]
locationLocations joined for spreadsheet useBangalore
experienceMinYearsLower end of stated experience4
experienceMaxYearsUpper end of stated experience8
experienceTextExperience wording as published4 to 8 Yrs
salaryTextPublished pay text or a hidden marker[Salary Hidden]
salaryMinLakhsLower annual pay in lakh rupees, if explicitly stated6.0
salaryMaxLakhsUpper annual pay in lakh rupees, if explicitly stated8.0
employmentTypeRegular, contractual, internship, or work from homeregular
shiftTypeFull time or part timefull-time
skillsComma-separated source tags as an array["linux", "bsp"]
descriptionJob description with markup removedDesign and develop applications...
applyUrlDirect public listing linkA Shine job URL
externalApplyUrlExternal application link, if suppliednull
recruiterNamePublic recruiter name, if suppliednull
postedDateSource posting timestamp2026-09-25T05:35:12
postedDaysAgoDays since the posting date at collection2
expiryDateSource listing expiry timestamp2026-11-24T05:35:14
earlyApplicantWhether the early applicant badge appearstrue
searchKeywordFirst input phrase that found this jobpython developer
scrapedAtUTC collection timestampAn ISO timestamp

A hidden salary is represented by salaryText: "[Salary Hidden]" and null numeric bounds. The salary search filter can still return such a listing because the site filters against information that is not necessarily displayed in the public salary text. Numeric pay is never inferred from hidden values or internal facet IDs.

How to scrape Shine

  1. Enter one or more phrases in searchKeywords, such as python developer or data analyst.
  2. Add a city and optional experience, salary, employment, or shift filters. Leave a field blank to search without that filter.
  3. Set maxJobs to the number of unique listings you need. Select freshness to start with newer results.
  4. Run the actor and open the default dataset. Download the rows as JSON, CSV, or Excel for analysis.

A broad first run with 40 to 100 jobs is useful for checking whether the site's search interpretation matches your intent. A narrow city, salary, and experience combination can contain fewer rows than a broad search, even when the result limit is higher.

Input

ParameterTypeDefaultDescription
searchKeywordsarray of stringsRequiredSeparate search phrases; duplicates are merged by job ID.
locationstringAll IndiaA city name. Exact location facet IDs are used when the city appears among the search facets; otherwise the site’s city search URL form is used.
experienceLevelstringAnyOne of under 1, 1–2, 3–5, 6–8, 9–10, 11–15, or over 15 years.
salaryRangestringAnyAnnual pay band in lakh rupees: up to 2, 3–5, 6–8, 9–12, 13–16, 17–25, or over 25.
employmentTypestringAnyRegular, contractual, internship, or work from home.
shiftTypestringAnyFull time or part time.
sortBystringrelevanceUse freshness for most recent first.
maxJobsinteger100Total unique results across phrases, from 1 to 1,000.
includeJobDescriptionbooleanfalseKeep the full available description; otherwise keep its first 500 characters.
proxyConfigurationobjectPlatform proxyOverride the proxy if your run needs a different proxy configuration.

Example input for a focused search:

{
"searchKeywords": ["python developer"],
"location": "Bangalore",
"experienceLevel": "3to5",
"salaryRange": "6to8",
"sortBy": "freshness",
"maxJobs": 40,
"includeJobDescription": true
}

The salary filter asks the site to select a pay band; it does not promise a public number on every returned listing. If you need numeric compensation data, keep rows where salaryMinLakhs or salaryMaxLakhs is present and report the number of excluded rows alongside any aggregate.

Output example

This abbreviated item is based on a public search response for the example query. Organization and listing path are omitted from this excerpt; the dataset includes them when the source provides them.

{
"jobId": "19574136",
"title": "Embedded Linux Application Developer",
"industry": "Auto Components",
"locations": ["Bangalore"],
"location": "Bangalore",
"experienceMinYears": 4,
"experienceMaxYears": 8,
"experienceText": "4 to 8 Yrs",
"salaryText": "[Salary Hidden]",
"salaryMinLakhs": null,
"salaryMaxLakhs": null,
"employmentType": "regular",
"shiftType": "full-time",
"skills": ["linux", "bsp", "image sensors", "camera"],
"postedDate": "2026-09-25T05:35:12",
"expiryDate": "2026-11-24T05:35:14",
"earlyApplicant": true,
"searchKeyword": "python developer"
}

The description field in a full row contains text from the public listing with tags removed. applyUrl points to the job detail page, not necessarily the final employer application form. If the response includes a separate application destination, it appears in externalApplyUrl.

Use cases

  • Hiring demand research: Track how many public roles mention a skill or job title in a city. Save the query, date, and result limit with every extract so later counts remain comparable.
  • Recruiting operations: Build a working queue of newly posted roles by using freshness, then review company, locations, experienceText, and the listing link before outreach.
  • Salary analysis: Extract published pay ranges and group by city, industry, or experience. Keep hidden-salary jobs in a separate count instead of treating them as zero-pay roles.
  • Skills planning: Count the skills tags associated with a role and compare how often particular technologies appear across search terms.
  • Local market reports: Search the same role across several cities in separate runs. Exact facet matching helps keep major-city searches consistent with the site's own filters.
  • Job alerts: Schedule a freshness-sorted search and compare jobId values between datasets to identify listings not present in a previous run.

For reporting, a narrow query can be more informative than a very large search. Save the filters with the exported dataset; a city or salary change alters the population you are measuring. Results are current public postings, not a historical archive of all roles ever advertised.

How much does it cost to scrape Shine?

The configured result event price is $1.00 per 1,000 delivered jobs, or $0.001 per delivered row. Examples at that rate: 40 rows cost $0.04, 100 rows cost $0.10, and 1,000 rows cost $1.00 in result events. Check the run's pricing display for the rate attached to your account and any platform usage rules.

maxJobs controls the upper bound on result events for a run. Duplicate IDs are skipped before a row is written, so they do not add dataset rows. A search with no matching results has no delivered rows. The actor stops writing when the platform reports that the run’s charge limit has been reached.

The default limit of 100 jobs is useful for a first look. Increase it only after checking that the location and other filters produce the intended set. A broad search can have many pages, while a narrow search may finish well below your requested maximum.

Tips for best results

Start with the job title people actually put in a listing. A phrase such as data analyst is usually more targeted than data. Search several related phrases when the role is advertised under multiple names; the actor removes repeated IDs from the combined output.

Use location for geographic targeting. The actor first reads the search response's location facets and uses the matching location ID when it finds the exact city name. For a city absent from those facets, it uses the site's city-search phrase. Review a sample of locations in the output because a job can name several cities, nearby areas, or a broader region.

Apply experience and salary bands only when those distinctions matter to the work. Each band is sent to the site's search service, so a filter can remove many otherwise relevant postings. If a result set is too small, remove one filter at a time to see which one causes the drop.

Use sortBy: "freshness" for a daily review or alert workflow. Keep a local history of jobId values if you need only new postings, since each actor run is an independent snapshot. For a single analysis export, relevance ranking may surface more useful roles near the start.

Set includeJobDescription: true when the full available text is needed for classification or review. The default trims text after 500 characters to keep exports smaller. Markup is removed in both modes, but the original wording may contain formatting artifacts or recruiter boilerplate.

Limits

The source publishes 20 jobs per search page in the observed response. The actor follows up to 50 pages per phrase, stopping sooner at the requested number, the site's end of results, or an identical repeated page. The 50-page bound covers 1,000 positions per phrase before cross-phrase deduplication. Search counts displayed by the site can change while a run is in progress, and duplicate or removed records can make the delivered count lower than the displayed total.

Some fields are genuinely absent. Recruiter names and external application links are often null. Salary text was hidden in the sampled search results, even where the salary band filter was active. The output preserves that distinction and does not substitute internal numeric facet values for published pay.

postedDate and expiryDate retain the source timestamp text. The source examples did not include a timezone suffix, so downstream users should avoid assuming that those strings are UTC. postedDaysAgo compares calendar dates at collection time and is useful for rough sorting rather than a precise elapsed-hours calculation.

A listing may be posted by a consultancy. In that case, company reflects the organization shown in the public search response; it may differ from the end employer. applyUrl is the listing page, and any further application steps on the site depend on the posting.

The actor reads public search data. It does not sign in or retrieve private applicant information. Site availability, search ranking, filters, and field coverage can change without notice. A temporary block may lead to proxy rotation and slower pages; persistent failures are reported in the run log.

Use with AI agents (MCP)

Add this actor to any MCP client (Claude, Cursor, VS Code, n8n...) with one URL:

https://mcp.apify.com?tools=mlg14/shine-scraper

An agent gets back a flat dataset of Shine jobs: title, company, location, experience, salary text, skills, description, posting date and listing link. Always set maxJobs so results stay bounded; treat null fields as unknown.

Prompt 1: "Find 40 recent Python developer jobs in Bangalore on Shine and list the links."

{"searchKeywords": ["python developer"], "location": "Bangalore", "sortBy": "freshness", "maxJobs": 40}

Prompt 2: "Get internship listings for data analysts across India from Shine."

{"searchKeywords": ["data analyst"], "employmentType": "internship", "maxJobs": 30}

Prompt 3: "Collect Shine jobs in Mumbai paying 9 to 12 lakh for software engineers, with full descriptions."

{"searchKeywords": ["software engineer"], "location": "Mumbai", "salaryRange": "9to12", "includeJobDescription": true, "maxJobs": 25}

FAQ

Is this legal to use? The actor reads public job listings without an account. Follow the site's terms and applicable privacy rules. Do not misuse public recruiter information or combine it with unrelated personal data for harmful outreach.

Do I need a proxy? The default uses the platform proxy with datacenter IPs first. During source checks, the public search endpoint returned results without an anti-bot challenge. Proxy escalation is available if later requests are blocked.

How fast is a run? The actor requests search pages of 20 jobs and writes each unique result. Time depends on the number of pages, site response time, retries, and the result limit. A 40-job query needs at least two filtered result pages plus an initial facet lookup when a location is set.

Can I schedule searches or monitor new jobs? You can schedule repeated runs with the same input. Each run produces a fresh snapshot; compare jobId against a saved prior dataset to identify new listings. The actor does not persist a seen-ID history across runs.

Can I export to a spreadsheet? Yes. Download the default dataset as CSV or Excel, or retrieve JSON for a data pipeline. location is convenient for a single spreadsheet cell, while locations preserves all locations as an array in JSON.

Why are salary fields empty after using salaryRange? The search filter and the public salary text are different source fields. The site can match a band while hiding the posted amount. Numeric output is populated only when a salary amount is explicitly published.

Why is company different from the employer I expected? A consultancy may publish a job on behalf of another organization. The actor returns the name shown in the source record and does not infer an undisclosed client.

Integrations

Use the dataset endpoint for scheduled exports, webhooks, spreadsheet imports, or workflow automation. The same input can be saved and rerun on a schedule, and the jobId field supports downstream deduplication. Keep a copy of the query with each export to make repeated analyses auditable.

Support

Open an issue on the Issues tab; we reply within 24h and add fields on request.