Instahyre Jobs Scraper
Pricing
from $0.69 / 1,000 job listings
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
Maintained by CommunityActor 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 locationkeywordMatch: "any" | "all" (default "any")locations: string[] e.g. ["Bangalore","Pune","Gurgaon"]remoteOnly: bool (default false)companyNames: string[] partial, case-insensitive employer allowlistexcludeKeywords: string[] terms that drop a roleincludeDetails: bool (default false) — adds description, experienceMin/Max, jobCategory, jobFunctionsenrichEmails: bool (default false) — looks up the hiring company's website for a contact email; billed only when foundmonitorMode: "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
includeDetailsis 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| jobFunctionSlugs | array | No | — | Instahyre job-function slugs (or numeric IDs). Empty = the complete public feed. |
| jobType | string | No | any | any, full-time, or internship. |
| companySize | string | No | any | any, small, medium, or large (Instahyre's own bucketing). |
| skills | array | No | — | Skill tags such as Java, Python, SQL, React. |
| skillMatch | string | No | any | Match any requested skill, or require all of them. |
| keywords | array | No | — | Terms matched across the role title, skills, company context, and location. |
| keywordMatch | string | No | any | Match any keyword, or require all of them. |
| locations | array | No | — | Location terms such as Bangalore, Pune, Gurgaon. |
| remoteOnly | boolean | No | false | Keep only roles whose published location indicates remote work. |
| companyNames | array | No | — | Employer allowlist with partial, case-insensitive name matching. |
| excludeKeywords | array | No | — | Terms that exclude a role from the output. |
| includeDetails | boolean | No | false | Add the public description, experience range, category, and functions. |
| enrichEmails | boolean | No | false | Look up the hiring company's website for a contact email. Billed only when found. |
| monitorMode | string | No | snapshot | snapshot returns every match; changes returns only what changed since last run. |
| emitBaseline | boolean | No | true | In changes mode, emit the first run's roles as new rows. |
| includeUnchanged | boolean | No | false | In changes mode, also emit roles whose fields did not change. |
| stateName | string | No | default | Stable name that keeps one monitoring search separate from another. |
| maxItems | integer | No | 100 | Maximum job rows saved in one run. This is the number of billed rows. |
| maxPages | integer | No | 10 | Maximum source pages scanned. One page holds up to 35 jobs. |
| proxyConfiguration | object | No | Apify Proxy | Proxy settings. Instahyre's job feed works from datacenter IPs. |
Job functions
Pass any live Instahyre job-function slug. A few common ones:
| Slug | Function | Slug | Function |
|---|---|---|---|
| backend-development | Backend Development | frontend-development | Frontend Development |
| full-stack-development | Full-Stack Development | mobile-development | Mobile Development |
| data-science-machine-learning | Data Science / Machine Learning | data-analysis-business-intelligence | Data Analysis / BI |
| devops-cloud | DevOps / Cloud | qa-sdet | QA / SDET |
| engineering-management | Engineering Management | product-management | Product Management |
| ux-visual-design | UX / Visual Design | it-security | IT Security |
| sales-business-development | Sales / Business Development | online-marketing | Online 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
| Field | Description |
|---|---|
| jobId | Stable public Instahyre job ID |
| title / candidateTitle | Published role title fields |
| companyName / companyId | Public employer identity |
| companyResourceUri / companyLogoUrl | Employer source and logo links |
| companyTagline / companyFounded / employeeCount | Public employer context |
| companyContext | Instahyre's short company description |
| locations / locationsRaw / isRemote | Normalized locations, the raw string, and a remote flag |
| skills | Public role skill tags |
| acceptOutstation | Whether the role accepts outstation applicants |
| publicUrl / resourceUri | Public role page and source record links |
| source | Source label (instahyre) for downstream joins |
Detail fields (includeDetails)
| Field | Description |
|---|---|
| description | Public role description, as plain text |
| experienceMin / experienceMax | Published experience range in years |
| jobCategory / jobFunctions | Public role classification |
| jobType | full_time or internship, from the public page |
| datePosted / addressRegion / addressCountry | Extra context when published |
| detailStatus / detailError | fetched or failed, with a short reason |
Email fields (enrichEmails)
| Field | Description |
|---|---|
| employerEmail | Contact email found on the hiring company's own website |
| employerEmailKind | role (hr@, careers@…), generic (info@, contact@…), or personal |
| employerEmailDomain | Domain of that email |
| emailEnrichmentStatus | found, not_found, or failed |
Monitoring fields
| Field | Description |
|---|---|
| changeType | snapshot, new, updated, unchanged, or removed |
| firstSeenAt / lastSeenAt | When the role was first and most recently seen by this monitor |
| scrapedAt | When 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
- 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.
- Paginate the feed — the public job feed is read page by page (up to 35 jobs per page) until
maxItemsmatches are collected ormaxPagesis reached. - Local filtering — keywords,
keywordMatch,skillMatch: all,remoteOnly, the company allowlist, andexcludeKeywordsare applied to each row. - Monitoring diff — in
changesmode each role is compared against the stored state for itsstateNameand taggednew,updated,unchanged, orremoved. - Detail — for emitted rows,
includeDetailsfetches the public job page for the description, experience range, category, and functions. - Email —
enrichEmailsreads the hiring company's own website (home, contact, about pages) for a public contact address. - 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.
| Event | What it is | Free / 1,000 | Gold / 1,000 |
|---|---|---|---|
job-listing | Each job row saved | $0.99 | $0.69 |
job-detail | Each public job page fetched (includeDetails) | $0.70 | $0.70 |
employer-email | Each 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
- Click Try for free and sign in to Apify.
- Add one or more job function slugs (or leave empty for the whole feed).
- Optionally set skills, keywords, locations, job type, or company size.
- Turn on Fetch job details if you need descriptions and experience ranges.
- Set Max items low for the first run (e.g. 20).
- Click Start, then watch rows appear in the Output tab.
- Export from Storage, or pull results via the API.
Run it via API
Python:
from apify_client import ApifyClientclient = 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.
Is it legal to scrape Instahyre?
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.
Related actors
- Hirist Jobs Scraper — Indian tech jobs from Hirist.
- Cutshort Jobs Scraper — startup roles from Cutshort.
- Internshala Scraper — internships and fresher jobs.
- Indeed Jobs Scraper — job listings from Indeed worldwide.
- Website Contact Finder — emails, phones, and socials from any website.
Browse all ParseBird actors on Apify Store.