Linkedin Profile Scraper avatar

Linkedin Profile Scraper

Pricing

Pay per usage

Go to Apify Store
Linkedin Profile Scraper

Linkedin Profile Scraper

Extract LinkedIn job listings by role, skill, and location in **under 60 seconds** — no browser required, no bloat, production-ready.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Dinesh Kumar Wadhwani

Dinesh Kumar Wadhwani

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Job Search Aggregator — LinkedIn + Naukri + Indeed

Search three of India's biggest job platforms in a single run. Get up to 100 deduplicated, structured job listings from LinkedIn, Naukri, and Indeed — ranked by platform, filtered by role, skill, and location, ready to pipe into any downstream system.

Built for developers, recruiters, and product teams who need comprehensive job market coverage without managing three separate scrapers, three different APIs, and three different data formats. One input. One dataset. All three platforms.


Why this Actor

Most job scrapers cover one platform. The problem is that job postings are fragmented — a VP Engineering role at a Bangalore startup may appear on LinkedIn but not Naukri. A GCC hiring drive may post exclusively on Naukri. A remote AI role may only surface on Indeed. Covering one platform means missing the others.

This Actor runs all three in sequence, deduplicates results globally, and returns a single clean dataset with a consistent output schema across platforms.

This ActorRunning 3 separate actors
⚙️ InputOne set of inputsThree separate configurations
🔁 DeduplicationGlobal — same job never appears twicePer-platform only
📦 Output schemaConsistent across all platformsDifferent fields per platform
💰 OverheadOne actor runThree actor runs
🧠 MemorySequential — one browser at a timeParallel — 3× memory
📊 CoverageLinkedIn + Naukri + IndeedDepends which you run

How it works

The Actor runs platforms sequentially to keep memory usage low — LinkedIn first (HTTP-only, no browser), then Naukri (Playwright + API interception), then Indeed (Playwright + DOM scraping). All results share a global deduplication pool using job IDs and URLs, so the same listing never appears twice regardless of which platform returned it.

Result allocation (soft split):

  • LinkedIn: up to 40 jobs
  • Naukri: up to 40 jobs
  • Indeed: up to 20 jobs
  • Total cap: 100 unique jobs

The split is soft — if LinkedIn finds fewer than 40 results for a niche search, the unused slots carry over to Naukri and Indeed automatically. The 100-job total cap is always the governing limit.

Search strategy: Each role is searched independently per location. Skills are appended as separate search terms (not combined into a single AND query), so each skill is OR'd — a job only needs to match one skill to qualify. Results are deduplicated globally across all role × skill × location combinations.

For Naukri specifically, the actor applies a title-match filter after fetching results, since Naukri's keyword search returns jobs where the role appears anywhere in the description — not just the title. This ensures "Vice President" doesn't return ".Net Lead" jobs that mention a VP in the org chart.

Time limit: A hard 4-minute cutoff applies across all three platforms combined. If the search runs long (slow proxies, large result sets), the actor stops cleanly and returns whatever has been collected to that point. This bounds cost and prevents users from waiting indefinitely.


What it does per platform

LinkedIn

Uses Crawlee's CheerioCrawler (HTTP-only, no browser) against LinkedIn's guest seeMoreJobPostings endpoint. Fast, cheap, no rendering overhead. Returns 10 jobs per page.

Naukri

Uses PlaywrightCrawler to load Naukri's search page, then intercepts the internal jobapi/v3/search XHR response — the same JSON API call Naukri's own page fires internally. This captures structured data (salary bands, experience ranges, work mode, skills array) without scraping HTML. Falls back to DOM scraping if interception fails.

Indeed

Uses PlaywrightCrawler with browser fingerprinting to render Indeed India's JavaScript-heavy search results and scrapes job cards from the DOM. Requires residential proxies.


Input

FieldTypeRequiredLimitDescription
rolesstring[]✅ Yes3Job titles to search for (e.g. "Vice President", "Director Engineering")
skillsstring[]No3Supporting keywords (e.g. "AI", "GCC", "SaaS")
locationsstring[]✅ Yes3Indian cities or regions (e.g. "Bangalore", "Pune", "Hyderabad")
timeFramestringNoHow recently jobs were posted — see values below

timeFrame values

ValueMeaningRecommended for
""Any timeBroad searches, rare roles
1Last 24 hoursDaily scheduled runs
7Last 7 daysMost searches — good volume/freshness balance
15Last 15 daysSenior roles (VP, Director) — fewer postings per day

💡 Tip for senior roles: VP, Director, and Head-of roles are posted less frequently than junior roles. Use timeFrame: "15" or timeFrame: "7" for best results. "1" (last 24 hours) will return very few results for senior titles.

Example — VP Engineering roles across India's tech hubs

{
"roles": ["Vice President", "VP Engineering"],
"skills": ["AI", "SaaS", "GCC"],
"locations": ["Bangalore", "Pune", "Hyderabad"],
"timeFrame": "7"
}

This runs searches for:

  • Vice President in each location
  • Vice President AI in each location
  • Vice President SaaS in each location
  • Vice President GCC in each location
  • VP Engineering in each location
  • (and so on)

All results deduplicated globally — if the same job appears on LinkedIn and Naukri, it is saved only once.

Example — Data science roles

{
"roles": ["Data Scientist", "ML Engineer"],
"skills": ["Python", "PyTorch"],
"locations": ["Bangalore", "Mumbai"],
"timeFrame": "7"
}

Example — Daily senior leadership scan

{
"roles": ["Chief Technology Officer", "VP Engineering", "Head of Engineering"],
"locations": ["Bangalore"],
"timeFrame": "1"
}

Output

All results are saved to a single Apify dataset with a consistent schema across platforms. Each record includes a platform field so you can filter, sort, or route by source.

{
"platform": "LinkedIn",
"title": "Vice President of Engineering",
"company": "Acme Corp",
"location": "Bengaluru, Karnataka, India",
"link": "https://www.linkedin.com/jobs/view/4426507200",
"postedAt": "2026-06-28",
"jobId": "4426507200",
"matchedKeywords": "Vice President AI",
"searchLocation": "Bangalore",
"roles": ["Vice President"],
"inputSkills": ["AI", "GCC", "SaaS"]
}
{
"platform": "Naukri",
"jobId": "060726009380",
"title": "Vice President - Technology",
"company": "Barclays",
"location": "Bengaluru",
"experience": "15-20 Yrs",
"salary": "25-50 Lakhs",
"workMode": "Hybrid",
"skills": ["Cloud", "AWS", "Leadership", "Microservices"],
"postedAt": 1783324493706,
"link": "https://www.naukri.com/barclays-jobs-careers-212359",
"matchedKeywords": "Vice President",
"searchLocation": "Bangalore",
"roles": ["Vice President"],
"inputSkills": ["AI", "GCC", "SaaS"]
}
{
"platform": "Indeed",
"title": "Vice President, Product Engineering",
"company": "Flipkart",
"location": "Bengaluru, Karnataka",
"url": "https://in.indeed.com/rc/clk?jk=fcc1e677b4ff9df1",
"jobKey": "fcc1e677b4ff9df1",
"matchedKeywords": "Vice President AI",
"searchLocation": "Bangalore",
"roles": ["Vice President"],
"inputSkills": ["AI", "GCC", "SaaS"]
}

Output field reference

FieldPlatformsDescription
platformAll"LinkedIn", "Naukri", or "Indeed"
titleAllJob title as listed
companyAllHiring company name
locationAllLocation as shown on the listing
link / urlAllDirect URL to the job posting
jobId / jobKeyAllPlatform's internal job ID — used for deduplication
postedAtAllPosting date (format varies by platform)
matchedKeywordsAllThe exact search query that produced this result
searchLocationAllWhich of your input locations produced this result
rolesAllEcho of your input roles
inputSkillsAllEcho of your input skills
experienceNaukri onlyRequired experience range (e.g. "10-15 Yrs")
salaryNaukri onlySalary band if disclosed — null if hidden (most listings)
workModeNaukri onlyWork from office, Remote, or Hybrid
skillsNaukri onlySkills array extracted from the job listing

Performance benchmarks

Tested on Apify platform, 1024 MB memory:

SearchTimeframeResultsDurationCost
1 role · 3 skills · 3 locationsLast 7 days60–100 jobs2–4 minutes~$0.05–0.10
3 roles · 3 skills · 3 locationsLast 7 days80–100 jobs3–4 minutes~$0.08–0.12
1 role · no skills · 1 locationLast 24 hours20–50 jobs1–2 minutes~$0.02–0.04

💡 Memory setting: Set to 1024 MB in your Apify actor settings. Naukri and Indeed require a full Playwright browser. 512 MB is insufficient and will cause memory pressure warnings and instability.


Scheduling & automation

This Actor is designed to be called by an application or run on a schedule.

Daily senior leadership scan (recommended):

Cron: 0 7 * * * (7am IST daily)
timeFrame: "1" (last 24 hours — only fresh listings each day)

Weekly deep scan:

Cron: 0 8 * * 1 (8am IST every Monday)
timeFrame: "7" (last 7 days — catch everything from the week)

Connect the output dataset to Google Sheets, a webhook, an ATS, or a downstream Apify Actor using Apify's integrations.


Platform coverage notes

LinkedIn — Best for senior and global roles. Returns clean, structured data quickly via HTTP-only requests. No browser needed, lowest cost per result.

Naukri — Best for Indian market volume. Returns richer structured data (salary bands, experience, work mode, skills) via API interception. Applies title-match filtering to ensure role relevance — Naukri's keyword search is broad and can return description-matched results without filtering.

Indeed India — Supplementary coverage. Useful for roles that appear on Indeed but not LinkedIn or Naukri. Requires residential proxies and browser rendering — slowest and most resource-intensive of the three.


Limitations

  • Returns up to 100 unique jobs per run across all three platforms combined.
  • A 4-minute hard stop applies across all platforms combined. If the search hits the time limit, the actor returns whatever has been collected to that point — no partial-run errors.
  • Naukri salary data is null for most listings — Naukri allows companies to hide salary, and most do. This is a Naukri platform policy.
  • Indeed results do not include job descriptions — only data visible on the search results card.
  • LinkedIn results require no authentication and use the guest API — results may differ slightly from what a logged-in user sees.
  • For very niche searches (rare role + specific skill + small city), fewer than 100 results is expected and correct — this reflects actual job market supply, not a scraper limitation.

FAQ

Why sequential and not parallel? Naukri and Indeed both require a Playwright browser (Chromium). Running two browsers simultaneously doubles peak memory usage (~2 GB). Sequential execution keeps memory at ~1 GB and avoids instability on Apify's standard infrastructure.

Why does Naukri return fewer results than expected? Naukri's search is broad — it matches keywords anywhere in a job posting, including org-chart descriptions ("reports to Vice President"). The actor applies a title-match filter post-fetch to ensure only genuinely relevant roles are returned. This reduces noise at the cost of some volume. For higher volume, use a wider timeFrame ("7" or "15").

Can I search remote jobs? Yes — add "Remote" as one of your locations for LinkedIn and Indeed. Naukri remote jobs are filtered by work mode in the platform's own API, not by location keyword.

Why is Indeed returning fewer results than LinkedIn? Indeed India has Cloudflare protection. The actor uses residential proxies and browser fingerprinting to bypass it, but Cloudflare may still throttle requests intermittently. Indeed is included for supplementary coverage, not as the primary source.

Is this Actor maintained? Yes — actively maintained. If any platform changes its HTML structure or API format, an update ships promptly.

Can I use this to feed an AI pipeline? Yes — the structured output (especially Naukri's salary, experience, skills, and work mode fields) is well-suited for LLM-based matching, summarisation, and classification workflows.


Input schema reference

{
"roles": ["Vice President", "Director Engineering"],
"skills": ["AI", "GCC"],
"locations": ["Bangalore", "Pune", "Hyderabad"],
"timeFrame": "7"
}

timeFrame values:

ValueMeaning
""Any time
1Last 24 hours
7Last 7 days
15Last 15 days