India Jobs Feed: Internshala, Instahyre, CutShort, Apna, Shine avatar

India Jobs Feed: Internshala, Instahyre, CutShort, Apna, Shine

Pricing

from $1.49 / 1,000 job postings

Go to Apify Store
India Jobs Feed: Internshala, Instahyre, CutShort, Apna, Shine

India Jobs Feed: Internshala, Instahyre, CutShort, Apna, Shine

Pull India jobs from Internshala, Instahyre, CutShort, Apna, Shine, WorkIndia, Hirist and Wellfound (India roles) into one feed. Get only new, updated or closed jobs per run, flag cross-board duplicates, export JSONL or Adzuna-style XML. $0.00199 per row; 4 boards bill their own fee too.

Pricing

from $1.49 / 1,000 job postings

Rating

0.0

(0)

Developer

GetAScraper

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

156

Total users

63

Monthly active users

6 days ago

Last modified

Share

Build a single India job inventory from eight job boards. Bring Apna, CutShort, Internshala, Instahyre, Wellfound, Hirist, WorkIndia, and Shine results into one canonical dataset while keeping source identity and links.
India jobs sources and inventory   •  Apna, CutShort, Internshala, Instahyre, and the combined India job feed
 Apna.co Jobs
Blue and grey collar roles
 CutShort Jobs
Technology and startup roles
 Internshala Monitor
Internships and entry-level jobs
 India Job Feed
➤ You are here
One canonical India jobs feed built from eight public job boards
Combine Apna, CutShort, Internshala, Instahyre, Wellfound, Hirist, WorkIndia, and Shine listings into a single dataset while keeping each source's identity and links.
🧩 Distinct members
Keep every source listing separate.
🔗 Cross-board matching
Spot the same job on several boards without merging rows.
🧭 Change context
Track lifecycle states and source quality.
🤖 Agent-ready
Short rows for AI agents, or full rows and exports.

Job-data teams can use this bilingual discovery feed for भारत jobs, blue-collar and entry-level hiring, India technology roles, and global startup hiring. It is designed for product managers, HR-tech teams, labor-market analysts, feed operations teams, and AI agents that need source-linked records.

🔎 What this feed does

It collects public listings from Apna, CutShort, Internshala, Instahyre, Wellfound, Hirist, WorkIndia, and Shine. It normalizes the returned records into one canonical dataset.

BoardBased inStrongest forHow it runs
ApnaIndiaBlue and grey collar rolesSeparate Actor, bills its own price
CutShortIndiaTechnology and startup rolesSeparate Actor, bills its own price
InternshalaIndiaInternships and entry-level jobsSeparate Actor, bills its own price
InstahyreIndiaTechnology rolesSeparate Actor, bills its own price
HiristIndiaTechnology and senior rolesInside this feed, no second charge
WorkIndiaIndiaBlue collar and entry-level roles with monthly payInside this feed, no second charge
ShineIndiaBroad hiring across industriesInside this feed, no second charge, not preselected
WellfoundUnited StatesStartup roles, India only hereInside this feed, no second charge

Seven of the eight boards are India-based. Wellfound is a global startup board; the feed keeps a Wellfound job only when its own published locations name an Indian city, state, or India itself. Roles in other countries are dropped, never guessed. WorkIndia is preselected for new runs. Shine is available but not preselected, because it limits how fast many runs can read its pages at the same time; add it to sources when you want it.

Each source member keeps its own listingKey, so downstream joins do not merge or remove source records. Rows that look like the same job at the same company and city share a clusterId, and you can ask for one row per job with uniqueOnly. City spellings are matched across boards, so Bengaluru and Bangalore count as the same city. Matching is strict on purpose: when the same company posts one role on two boards for different cities, those stay separate. In our own test searches the same job showed up on more than one board mostly for large delivery and logistics employers across Apna and WorkIndia, and rarely elsewhere, so expect cross-board matches to be real but not frequent.

Lifecycle states are conservative: NEW, UPDATED, UNCHANGED, CLOSED, and REOPENED. Closure detection is on by default, but a job is only marked CLOSED when its board's scan was proven complete and not cut short by your per-board limit, and the job was missing on two runs in a row. With a small per-board limit most scans are cut short, so jobs usually stay open rather than closing by mistake. Wellfound and CutShort never close jobs in this version. WorkIndia and Shine never close jobs either: WorkIndia lists a rolling batch of fresh postings rather than its whole inventory, and Shine is far too large to scan in full, so a missing job there says nothing about whether it is still open. For those two boards read NEW and UPDATED as the useful signals. Source quality flags make incomplete or capped scans visible.

Your monitor keeps its history when a board's Actor is updated. Only a change to your own search settings starts a fresh history.

If a run is about to reach its time limit, the feed stops waiting, stops any board still running, and returns the rows it already has with lifecycleStatus set to PARTIAL. Partial rows carry no new, updated, or closed guarantee, and your saved monitoring history is left untouched. RUN_SUMMARY says so in plain words.

🎯 Who uses it

  • I am a job-data product manager building India listings into our product while preserving the source identity behind each row.
  • I am an HR-tech analyst comparing titles, locations, skills, and salary details where each source publishes them.
  • I am a labor-market researcher collecting a reproducible job or internship inventory with lifecycle and source context.
  • I am a feed operations lead delivering canonical records and export files without collapsing similar listings across sources.

🚀 How it works

STEP 1
Choose a scope
Set sources, a keyword, locations, and bounded limits.
STEP 2
Receive source members
Review canonical rows with source IDs, links, and quality flags.
STEP 3
Export or repeat
Use the dataset or verified chunked exports for your workflow.

For later runs, choose changesOnly to emit meaningful lifecycle changes instead of unchanged rows. Monitoring state persists in a named store across Apify runs. Dataset rows are pushed first, and export records are read-back verified before state commits.

⚙️ Input

FieldTypeRequiredDescription
sourcesarray of stringsNoChoose one or more boards: Apna, CutShort, Internshala, Instahyre, Wellfound (India roles only), Hirist, WorkIndia, and Shine. Apna, CutShort, Internshala, and Instahyre each run as a separate Actor that bills its own per-result price to your account on top of this feed. Wellfound, Hirist, WorkIndia, and Shine run inside this Actor with no extra charge. Everything except Shine is preselected.
keywordstringNoSearch by a job title, skill, or other simple term. Use one skill word on CutShort. Leave empty for the latest jobs from each board.
locationsarray of stringsNoAdd cities or regions, or leave empty for all available locations.
companyNameslist of namesNoKeep listings whose employer name contains one of these names.
excludeKeywordslist of wordsNoRemove listings containing any of these words in the title, employer, location, or description.
remoteOnlybooleanNoKeep only listings marked remote by the source. Shine rarely marks a job remote, so expect few Shine rows with this on.
postedWithinDaysintegerNoKeep only jobs posted in the last N days. Applies to WorkIndia and Shine; the other boards ignore it.
minMonthlySalaryintegerNoKeep only jobs stating a monthly salary of at least this many rupees. Applies to WorkIndia only; WorkIndia jobs with no stated monthly pay are left out when it is set.
internshalaModeenumNoChoose Internshala jobs or internships.
includeDetailsbooleanNoInclude descriptions, skills, salary, and company details when published. Defaults to disabled (keeps the default run fast); enable it for the full record.
outputModeenumNoReturn all matching jobs (all), only new and changed jobs (changesOnly), or short rows for AI agents (compact, see below). Defaults to all.
uniqueOnlybooleanNoReturn one row per job when the same title, company, and city appear more than once, on one board or several. Fewer rows means a lower feed bill. Defaults to off.
maxTotalRowsintegerNoOptional limit on the total rows returned, shared evenly between boards. Compact mode returns 50 rows when it is empty.
monitorScopetextNoOptional name for this monitor's saved state. Reuse the same name on a schedule to compare against the previous run. Leave empty for one-off searches; runs without a name never block each other.
maxItemsPerSourceintegerNoMaximum jobs from each selected board. Defaults to 25. A lower value lowers both the feed charge and the child Actors' charges.
maxPagesPerSourceintegerNoSearch depth on boards that support page limits. Defaults to 5 pages.

🤖 Use it from an AI agent or MCP client

The Apify MCP server can call this Actor as a tool. For a quick search that returns a small, readable answer, pass one or two boards, a keyword, a city, a small per-board limit, and outputMode set to compact:

{
"sources": ["workindia", "apna"],
"keyword": "delivery partner",
"locations": ["Bengaluru"],
"maxItemsPerSource": 15,
"outputMode": "compact"
}

Compact mode returns at most 50 rows (set maxTotalRows to change that), one row per job, spread across the boards you chose. Each row has only title, company, location, salary, url, source, lifecycle, and clusterId, and a field the board does not publish is left out. Leave monitorScope empty so repeated or parallel calls never block each other. A search that uses only boards running inside this feed (Wellfound, Hirist, WorkIndia, Shine) skips the separate board Actors and usually finishes faster.

🧾 Data table

The canonical dataset preserves source members and records only fields available from the selected source. Missing values are left out of the row, never filled with placeholders. A salary currency or period appears only when the source states it.

FieldTypeDescription
listingKeystringStable source-namespaced member ID.
clusterIdstringShared by rows that look like the same job at the same company and city. Absent when the title, company, or city is missing.
clusterSizeintegerRows in this run that share the clusterId, when more than one.
isCanonicalbooleanTrue on the most complete row of a cluster, false on the other members.
sourcePlatformstringSource platform that produced the member.
sourceRecordIdstringNative ID used by the source member.
inventoryTypestringJob or internship when published by the source.
titlestringListing title when published by the source.
companystringCompany name when published by the source.
employerstringEmployer name as published (same value as company).
descriptionstringSource-provided listing description when published.
locationstringListing location when published by the source.
salaryMinnumberLower salary or stipend value when published.
salaryMaxnumberUpper salary or stipend value when published.
salaryCurrencystringSalary currency when published by the source.
salaryPeriodstringSalary period when published by the source.
salaryRawstringOriginal salary or stipend text when published.
workArrangementstringWork arrangement when published by the source.
isRemotebooleanWhether the source marks the listing as remote.
isPartTimebooleanWhether the source marks the listing as part-time.
contractTypesarray of stringsContract types when published by the source.
skillsarray of stringsSkills when published by the source.
postedAtstringPublished date when available.
validThroughstringApplication or listing end date when available.
listingUrlstringDirect source listing URL when available.
applicationUrlstringApplication URL when available.
sourceUrlstringOriginal source URL when available.
experienceMinnumberMinimum years of experience when the source states a number.
experienceMaxnumberMaximum years of experience when the source states a number.
experienceTextstringExperience requirement in the source's own words.
companySizestringCompany size band when published.
companyStagestringCompany stage when published.
companyFoundedintegerYear the company was founded, when published.
employeeCountintegerEmployee count when published.
openingsintegerOpen positions for the listing, when published.
applicantsintegerApplicants shown by the source at collection time.
educationstringEducation requirement when published.
categorystringJob category or function when published.
functionsarray of stringsJob function tags when published.
latitudenumberJob location latitude when the source publishes it.
longitudenumberJob location longitude when the source publishes it.
isActivebooleanWhether the record is currently considered active.
lifecycleStatusstringConservative NEW, UPDATED, UNCHANGED, CLOSED, or REOPENED state. PARTIAL means the run ran out of time and the row has no lifecycle guarantee.
firstSeenAtstringTime this source member was first recorded in its state scope.
lastSeenAtstringTime this source member was most recently seen.
closedAtstringTime the member was marked closed, if it was closed.
changedFieldsarray of stringsCanonical fields that changed when a change was detected.
sourceCompletebooleanWhether the source scan was explicitly proven complete.
sourceCappedbooleanWhether the source result reached its configured record cap.
closureEligiblebooleanWhether this source result can participate in closure checks.
contractVersionstringVersion of the output layout.
nativeDedupeKeystringThe board's own de-duplication key, when it publishes one.
contentFingerprintstringHash of the business fields; a change marks the row UPDATED.
sourceRunIdstringRun that produced the row.
sourceBuildIdstringBuild of the Actor that produced the row.
sourceDatasetIdstringDataset the row was read from.
provenanceobjectAdapter version plus the board's own fields, trimmed of long text already in the row.

In compact mode each row has only these fields, and a field the board does not publish is omitted:

FieldTypeDescription
titlestringJob title.
companystringCompany name.
locationstringJob location.
salarystringSalary or stipend as one short text, with currency and period when the board states them.
urlstringLink to the listing.
sourcestringBoard that published the job.
lifecyclestringNEW, UPDATED, UNCHANGED, CLOSED, REOPENED, or PARTIAL.
clusterIdstringShared by rows that look like the same job on one or several boards.

WorkIndia states pay per month in rupees. Shine states pay on only a minority of postings. Experience on WorkIndia is read from its own wording (for example "1 - 2 Years" becomes a range, "Fresher" becomes zero).

📦 Exports

The default dataset is the canonical output. Each successful run also writes verified chunks to the default key-value store:

  • EXPORT_JSONL_n: newline-delimited canonical records.
  • EXPORT_ADZUNA_SHAPED_XML_n: XML with an Adzuna-shaped field layout.
  • EXPORT_MANIFEST: chunk metadata, checksums, and source context.
  • RUN_HEALTH: child-run status and diagnostics.
  • RUN_SUMMARY: whether the run was complete or partial, rows per board, and a plain note on what each board bills.

The XML is explicitly Adzuna-shaped. It does not claim official Adzuna compatibility, certification, or partnership.

🛡️ Limits and safety

This feed does not claim complete India job-market coverage or prove market gaps. It returns records from the selected sources only.

Missing source values stay absent. Similar listings remain separate source members unless you turn on uniqueOnly, and listingKey remains the safe join key.

Closure detection needs a complete scan that your per-board limit did not cut short, plus two missed runs in a row. Apna, Internshala, Instahyre, and Hirist can close jobs under these safeguards. CutShort, Wellfound, WorkIndia, and Shine cannot close jobs in this version.

🧮 What a run costs you

A run has two parts. The feed charges for each job row it returns. In addition, Apna, CutShort, Internshala, and Instahyre each run as their own Actor, and each of those bills its own per-result price to your account for the rows it collects. Wellfound, Hirist, WorkIndia, and Shine run inside this feed, so they add no second charge. Your total is the feed charge plus the child charges for the boards you select.

To keep the total low, pick only the boards you need, keep maxItemsPerSource small, and turn on uniqueOnly so a job listed more than once is returned once. Discovery runs default to includeDetails off, which is faster and cheaper. Turn it on when descriptions, skills, salary, or application context matter. Detailed rows can take longer on boards that publish a separate detail page.

💰 Pricing

Pay per returned job record. Empty runs and runs with no returned records do not incur result charges, and there is no subscription. The Store event is one Job posting for each row, and full details stay included in that row rather than creating a second charge from this feed.

The feed's own rate is shown live in the Store panel for your plan. Separate child-Actor charges apply to Apna, CutShort, Internshala, and Instahyre as described above. WorkIndia and Shine add no separate charge.

⭐ Enjoying India Jobs Feed?

⭐ ⭐ ⭐ ⭐ ⭐
Help other job-data teams find a source-linked India hiring feed.
A rating helps product managers, analysts, and feed operations teams assess this Actor. Your feedback guides future improvements.
★  Rate this Actor on Apify

❓ FAQ

Does this combine source listings into one record?

Not by default. Each Apna, CutShort, Internshala, Instahyre, Wellfound, Hirist, WorkIndia, and Shine source member keeps a distinct listingKey, so every record stays traceable to its source. Rows that look like the same job share a clusterId. Turn on uniqueOnly to get one row per job.

भारत jobs feed कैसे काम करता है?

Choose sources and a scope, then run the Actor. It returns canonical rows with source member IDs, lifecycle information, links, and reliability flags.

When can a listing be marked closed?

Only when the board's scan was proven complete and not cut short by your per-board limit, and the job was missing on two runs in a row. CutShort, Wellfound, WorkIndia, and Shine cannot close jobs in this version.

Do the filters work across every board?

Yes. Keyword, location, company, excluded-word, and remote-only filters are applied to every selected board. Boards also receive their own native filters where available. If a board does not publish an employer or remote signal, that record cannot pass a matching filter that requires it.

Should I request full job details?

Request full details when you need descriptions, skills, salary, or application context. It can take longer and use more platform compute on some boards, while other boards already include most details in their listing response.

Why does my bill include more than the feed price?

Apna, CutShort, Internshala, and Instahyre run as separate Actors that bill their own per-result price to your account. Wellfound, Hirist, WorkIndia, and Shine run inside this feed and add no second charge. Select fewer boards or use a lower per-board limit to reduce the total.

What does a PARTIAL row mean?

The run reached its time limit before every board finished. The feed returned what it had, marked those rows PARTIAL, and did not change your monitoring history. Run again with fewer boards or a lower limit.

Does Wellfound return jobs outside India?

No. A Wellfound job is kept only when its own published locations name an Indian place. Roles in other countries are dropped.

How do I call this from an AI agent or MCP client?

Pass one or two boards in sources, a keyword, a city in locations, maxItemsPerSource between 10 and 25, and outputMode set to compact. You get at most 50 short rows (title, company, location, salary, url, source, lifecycle, clusterId) and a field the board does not publish is left out. Leave monitorScope empty so parallel calls never block each other. Add postedWithinDays for fresh jobs, or minMonthlySalary for WorkIndia pay.

Why is Shine not preselected?

Shine limits how fast many runs can read its pages at the same time, so a default run that included it could return fewer Shine rows when several runs start together. A single run is fine. Add shine to sources when you want it.

Why did a board return no rows?

Each board reports its own note in RUN_HEALTH. Common reasons are a keyword that board does not index (CutShort matches single skill words), a city spelled in a way the board does not use, or a filter such as minMonthlySalary that the board's jobs do not state. Try a broader keyword or remove one filter.

Is the XML an official Adzuna feed?

No. The XML uses an Adzuna-shaped layout for downstream mapping. It is not an official Adzuna integration or a promise of compatibility.

🔗 Other actors