Instahyre Jobs Scraper avatar

Instahyre Jobs Scraper

Pricing

from $0.69 / 1,000 job listings

Go to Apify Store
Instahyre Jobs Scraper

Instahyre Jobs Scraper

Scrape Instahyre jobs: titles, companies, skills, locations, experience range, and descriptions. Filter by job function, skills, keywords, and location. Monitor new and changed roles. Optional employer email lookup.

Pricing

from $0.69 / 1,000 job listings

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Instahyre Jobs Scraper

Scrape jobs from Instahyre — India's invite-style hiring platform used by 10,000+ startups and MNCs — into clean, structured JSON. The Instahyre Jobs Scraper pulls role titles, hiring companies, skills, locations, experience ranges, and full descriptions straight from Instahyre's public job feed, with no login and no Instahyre API key.

Filter the Instahyre feed by job function, job type, company size, skills, keywords, and location, optionally attach the full description and experience range, discover the employer's contact email, and monitor new, updated, and removed roles on a schedule.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Actor: parsebird/instahyre-jobs-scraper (Apify). Scrapes jobs from instahyre.com. Call with ApifyClient.
Input JSON fields:
jobFunctionSlugs: string[] of Instahyre job-function slugs, e.g. ["backend-development","data-science-machine-learning","product-management"] (numeric IDs also work; empty = all functions)
jobType: "any" | "full-time" | "internship" (default "any")
companySize: "any" | "small" | "medium" | "large" (default "any")
skills: string[] e.g. ["Java","Python","SQL","React"]
skillMatch: "any" | "all" (default "any")
keywords: string[] matched across title, skills, company context, and location
keywordMatch: "any" | "all" (default "any")
locations: string[] e.g. ["Bangalore","Pune","Gurgaon"]
remoteOnly: bool (default false)
companyNames: string[] partial, case-insensitive employer allowlist
excludeKeywords: string[] terms that drop a role
includeDetails: bool (default false) — adds description, experienceMin/Max, jobCategory, jobFunctions
enrichEmails: bool (default false) — looks up the hiring company's website for a contact email; billed only when found
monitorMode: "snapshot" | "changes" (default "snapshot")
emitBaseline: bool (default true), includeUnchanged: bool (default false), stateName: string (default "default")
maxItems: int (default 100, = billed rows), maxPages: int (default 10, ~35 jobs per page)
proxyConfiguration: { "useApifyProxy": true }
Output: one dataset item per job — jobId, title, candidateTitle, companyName, companyId, companyLogoUrl, companyTagline, companyFounded, employeeCount, locations[], locationsRaw, isRemote, skills[], acceptOutstation, publicUrl, resourceUri, description, experienceMin, experienceMax, jobCategory, jobFunctions[], jobType, detailStatus, employerEmail, employerEmailKind, employerEmailDomain, emailEnrichmentStatus, changeType, firstSeenAt, lastSeenAt, scrapedAt, source. Fields are omit-empty.
Example: { "jobFunctionSlugs": ["backend-development"], "locations": ["Bangalore"], "maxItems": 50 }
API: https://api.apify.com/v2/acts/parsebird~instahyre-jobs-scraper · Token: https://console.apify.com/account/integrations

What does Instahyre Jobs Scraper do?

Instahyre is an AI-driven hiring platform focused on the Indian tech market, listing thousands of software, data, product, design, and business roles at companies from early-stage startups to Google, Amazon, and Accenture. Instahyre has no public jobs API — this Instahyre scraper is the alternative. It extracts:

  • 💼 Job listings — title, candidate-facing title, skill tags, published locations, and a remote flag, from the live Instahyre feed.
  • 🏢 Hiring company — name, ID, logo, tagline, founding year, employee-count bucket, and Instahyre's short company blurb.
  • 📄 Full job details — description, minimum and maximum years of experience, job category, and job functions, when includeDetails is on.
  • 📧 Employer contact email — an opt-in add-on that checks the hiring company's own website for a published contact address (never sourced from Instahyre, and billed only when one is found).
  • 🔁 Change monitoring — run on a schedule and get only the roles that are new, updated, or confirmed removed since the last run.
  • 🎯 Precise filtering — combine job function, job type, company size, skills, free-text keywords, location, and an exclude list.

Common uses: recruitment-market research on Indian tech hiring, sourcing pipelines for staffing agencies, competitor hiring monitoring, salary and skills-demand analysis, and building job datasets for an LLM.

Input parameters

ParameterTypeRequiredDefaultDescription
jobFunctionSlugsarrayNoInstahyre job-function slugs (or numeric IDs). Empty = the complete public feed.
jobTypestringNoanyany, full-time, or internship.
companySizestringNoanyany, small, medium, or large (Instahyre's own bucketing).
skillsarrayNoSkill tags such as Java, Python, SQL, React.
skillMatchstringNoanyMatch any requested skill, or require all of them.
keywordsarrayNoTerms matched across the role title, skills, company context, and location.
keywordMatchstringNoanyMatch any keyword, or require all of them.
locationsarrayNoLocation terms such as Bangalore, Pune, Gurgaon.
remoteOnlybooleanNofalseKeep only roles whose published location indicates remote work.
companyNamesarrayNoEmployer allowlist with partial, case-insensitive name matching.
excludeKeywordsarrayNoTerms that exclude a role from the output.
includeDetailsbooleanNofalseAdd the public description, experience range, category, and functions.
enrichEmailsbooleanNofalseLook up the hiring company's website for a contact email. Billed only when found.
monitorModestringNosnapshotsnapshot returns every match; changes returns only what changed since last run.
emitBaselinebooleanNotrueIn changes mode, emit the first run's roles as new rows.
includeUnchangedbooleanNofalseIn changes mode, also emit roles whose fields did not change.
stateNamestringNodefaultStable name that keeps one monitoring search separate from another.
maxItemsintegerNo100Maximum job rows saved in one run. This is the number of billed rows.
maxPagesintegerNo10Maximum source pages scanned. One page holds up to 35 jobs.
proxyConfigurationobjectNoApify ProxyProxy settings. Instahyre's job feed works from datacenter IPs.

Job functions

Pass any live Instahyre job-function slug. A few common ones:

SlugFunctionSlugFunction
backend-developmentBackend Developmentfrontend-developmentFrontend Development
full-stack-developmentFull-Stack Developmentmobile-developmentMobile Development
data-science-machine-learningData Science / Machine Learningdata-analysis-business-intelligenceData Analysis / BI
devops-cloudDevOps / Cloudqa-sdetQA / SDET
engineering-managementEngineering Managementproduct-managementProduct Management
ux-visual-designUX / Visual Designit-securityIT Security
sales-business-developmentSales / Business Developmentonline-marketingOnline Marketing

The full, always-current list is at instahyre.com/api/v1/job_function/.

Example inputs

Backend roles in Bangalore, listing data only:

{ "jobFunctionSlugs": ["backend-development"], "locations": ["Bangalore"], "maxItems": 50 }

Senior data / ML roles at large companies, with full descriptions:

{
"jobFunctionSlugs": ["data-science-machine-learning"],
"companySize": "large",
"skills": ["Python", "PyTorch"],
"skillMatch": "all",
"includeDetails": true,
"maxItems": 100
}

Remote product roles, excluding contract listings:

{
"jobFunctionSlugs": ["product-management"],
"remoteOnly": true,
"excludeKeywords": ["contract", "intern"],
"maxItems": 100
}

Daily new-jobs feed for a saved search:

{
"jobFunctionSlugs": ["frontend-development", "full-stack-development"],
"locations": ["Pune", "Hyderabad"],
"monitorMode": "changes",
"emitBaseline": false,
"stateName": "fe-pune-hyd",
"maxItems": 500,
"maxPages": 40
}

What data can you extract from Instahyre?

Job fields

FieldDescription
jobIdStable public Instahyre job ID
title / candidateTitlePublished role title fields
companyName / companyIdPublic employer identity
companyResourceUri / companyLogoUrlEmployer source and logo links
companyTagline / companyFounded / employeeCountPublic employer context
companyContextInstahyre's short company description
locations / locationsRaw / isRemoteNormalized locations, the raw string, and a remote flag
skillsPublic role skill tags
acceptOutstationWhether the role accepts outstation applicants
publicUrl / resourceUriPublic role page and source record links
sourceSource label (instahyre) for downstream joins

Detail fields (includeDetails)

FieldDescription
descriptionPublic role description, as plain text
experienceMin / experienceMaxPublished experience range in years
jobCategory / jobFunctionsPublic role classification
jobTypefull_time or internship, from the public page
datePosted / addressRegion / addressCountryExtra context when published
detailStatus / detailErrorfetched or failed, with a short reason

Email fields (enrichEmails)

FieldDescription
employerEmailContact email found on the hiring company's own website
employerEmailKindrole (hr@, careers@…), generic (info@, contact@…), or personal
employerEmailDomainDomain of that email
emailEnrichmentStatusfound, not_found, or failed

Monitoring fields

FieldDescription
changeTypesnapshot, new, updated, unchanged, or removed
firstSeenAt / lastSeenAtWhen the role was first and most recently seen by this monitor
scrapedAtWhen this row was captured

All output is omit-empty — a field that would be null or empty is left out.

Output example

{
"jobId": "441116",
"title": "Salesforce Developer",
"candidateTitle": "Salesforce Developer",
"companyName": "Samsung",
"companyId": 1535,
"companyLogoUrl": "https://media.instahyre.com/images/profile/base/employer/1535/98a3bb7e0d/Samsung-Logo.webp",
"companyTagline": "Trailblazing for a better world with better technology",
"companyFounded": 1973,
"employeeCount": 200,
"locations": ["Hyderabad"],
"locationsRaw": "Hyderabad",
"isRemote": false,
"skills": ["Apex", "LWC", "Lightning Web Components", "Salesforce", "Visualforce"],
"acceptOutstation": true,
"publicUrl": "https://www.instahyre.com/job-441116-salesforce-developer-at-samsung-hyderabad/",
"resourceUri": "/api/v1/job_search/441116",
"description": "Responsibilities: Design, develop, and implement complex Salesforce solutions...",
"experienceMin": 5,
"experienceMax": 9,
"jobCategory": "Software Engineering",
"jobFunctions": ["Backend Development", "Full-Stack Development", "Other Software Development"],
"jobType": "full_time",
"detailStatus": "fetched",
"changeType": "snapshot",
"firstSeenAt": "2026-08-29T08:22:50.000Z",
"lastSeenAt": "2026-08-29T08:22:50.000Z",
"scrapedAt": "2026-08-29T08:22:50.000Z",
"source": "instahyre"
}

Download the dataset as JSON, CSV, Excel, HTML, or XML from the Storage tab or the Apify API.

Use cases

  • Recruitment-market research — track which skills, functions, and cities are hiring hardest across the Indian tech market.
  • Agency sourcing — build a filtered pipeline of live roles by function, company size, and location, refreshed daily.
  • Competitor hiring intelligence — watch a company allowlist and see every role it opens or closes.
  • Salary and skills-demand analysis — combine experience ranges, skills, and company size for compensation benchmarking.
  • Lead generation — with enrichEmails, attach a hiring-company contact email to each role.
  • LLM training data — assemble a structured corpus of job descriptions and requirements.

How it works

  1. Resolve filters — job-function slugs are resolved to IDs against Instahyre's live catalog; job type, company size, skills, and location are pushed to the source feed where supported.
  2. Paginate the feed — the public job feed is read page by page (up to 35 jobs per page) until maxItems matches are collected or maxPages is reached.
  3. Local filtering — keywords, keywordMatch, skillMatch: all, remoteOnly, the company allowlist, and excludeKeywords are applied to each row.
  4. Monitoring diff — in changes mode each role is compared against the stored state for its stateName and tagged new, updated, unchanged, or removed.
  5. Detail — for emitted rows, includeDetails fetches the public job page for the description, experience range, category, and functions.
  6. EmailenrichEmails reads the hiring company's own website (home, contact, about pages) for a public contact address.
  7. Rows stream to the dataset and stop at maxItems.

How much does it cost to scrape Instahyre?

This actor uses pay-per-event pricing, tiered by your Apify plan.

EventWhat it isFree / 1,000Gold / 1,000
job-listingEach job row saved$0.99$0.69
job-detailEach public job page fetched (includeDetails)$0.70$0.70
employer-emailEach row where an email was found (enrichEmails)$29.00$19.00

A small platform Actor start fee also applies per run. maxItems is the exact number of job-listing rows you are billed for — set it to control spend. Scraping 1,000 listing-only jobs on the Free plan costs about $0.99; adding full descriptions makes it about $1.69. Apify's monthly free platform usage covers small runs.

How to scrape Instahyre

  1. Click Try for free and sign in to Apify.
  2. Add one or more job function slugs (or leave empty for the whole feed).
  3. Optionally set skills, keywords, locations, job type, or company size.
  4. Turn on Fetch job details if you need descriptions and experience ranges.
  5. Set Max items low for the first run (e.g. 20).
  6. Click Start, then watch rows appear in the Output tab.
  7. Export from Storage, or pull results via the API.

Run it via API

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("parsebird/instahyre-jobs-scraper").call(run_input={
"jobFunctionSlugs": ["backend-development"],
"locations": ["Bangalore"],
"includeDetails": True,
"maxItems": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "-", item["companyName"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('parsebird/instahyre-jobs-scraper').call({
jobFunctionSlugs: ['data-science-machine-learning'],
skills: ['Python'],
monitorMode: 'changes',
stateName: 'ds-watch',
maxItems: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Schedule recurring runs, add webhooks, or push results to Google Sheets, Slack, Zapier, and Make with Apify integrations.

FAQ

Do I need an Instahyre account or API key? No. The Instahyre Jobs Scraper reads Instahyre's public job feed and public job pages only. Instahyre has no official jobs API — this actor is the alternative.

How current is the data? Live. Each run reads Instahyre at that moment. Use Apify's scheduler with monitorMode: "changes" to keep a new-jobs feed.

How do I build a "new jobs only" feed? Set monitorMode: "changes", give the search a unique stateName, and schedule it. The first run records a baseline (set emitBaseline: false to keep it silent); later runs return only new, updated, and removed roles.

Why did a monitor report roles as new that I had seen before? Monitoring only tracks what it scans. If your filter matches thousands of roles but maxPages only covers a few hundred, the feed order shifts between runs. Raise maxPages so a run covers your whole filtered set.

Does enrichEmails get emails from Instahyre? No. It independently visits the hiring company's own website and extracts a public contact email if one is published there. It is not found for every company, and you are billed only on rows where an email is actually found.

What counts as a billed row? Every row saved to the dataset counts as one job-listing event, including unchanged and removed monitoring rows. job-detail and employer-email are billed only when those enrichments run and succeed.

A run was slower than usual or some detail pages came back empty — why? Instahyre's edge occasionally rate-limits automated traffic. The scraper retries automatically; rows whose detail page could not be loaded are still returned from the feed with detailStatus: "failed".

Something's not working. Open an issue on the Issues tab with your input and the run link — we respond quickly.

Scraping publicly available pages is legal in most jurisdictions, and this actor only accesses content any logged-out visitor can see. It does not collect candidate profiles, private data, or bypass any login. You are responsible for how you use the data — respect Instahyre's Terms of Use, do not use personal data (such as any contact email) in violation of applicable law, and consult a lawyer if you are unsure. See Apify's guide on the legality of web scraping.

Browse all ParseBird actors on Apify Store.