⚡ Fast LinkedIn Jobs Scraper avatar

⚡ Fast LinkedIn Jobs Scraper

Pricing

$20.00 / 1,000 job listing results

Go to Apify Store
⚡ Fast LinkedIn Jobs Scraper

⚡ Fast LinkedIn Jobs Scraper

Fast, login-free LinkedIn job search scraper. Extract enriched job listings, salary estimates, skill demand analytics, and major-matching data into JSON/CSV.

Pricing

$20.00 / 1,000 job listing results

Rating

0.0

(0)

Developer

RD.Galih Rakasiwi

RD.Galih Rakasiwi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

🔍 LinkedIn Jobs Scraper & Market Intelligence

Production-grade job market data — no login, no cookies, no friction. Extract enriched job listings, salary estimates, skill-demand analytics, and academic-major-matched opportunities from LinkedIn's public endpoints. Purpose-built for AI pipelines, quantitative recruiting, and labor market intelligence at scale.

Apify Actor AI-Ready No Login Required High Speed Python Pay Per Result Pricing


Why This Actor Wins in a Crowded Market

Most LinkedIn scrapers in the Apify Store are commoditized — they extract basic title/company/location tuples and call it a day. This Actor is different. It was architected from the ground up as a market intelligence engine, not just a scraper.

CapabilityTypical LinkedIn ScrapersThis Actor
AuthenticationRequire cookies / session tokens✅ 100% login-free — guest endpoint with session orchestration
Salary ExtractionNo or basic regex✅ Multi-currency parser (6 regex patterns + context-aware period detection)
Skill TaggingManual or none✅ 125+ technical & soft skills auto-extracted from job descriptions
Analytics LayerNot available✅ Skill demand ranking, salary distribution, workplace-type breakdown
Academic Major MatchingNot available✅ Curated skill → job-title mapping for 25+ university majors
Speed ModesOne speed only✅ Fast Mode (5–10× faster, search-card data) vs. Full Enrichment
Output QualityInconsistent fields✅ 25+ typed fields per job, flat schema, CSV/JSON export ready
AI/LLM ReadinessRaw HTML or sparse JSON✅ Clean structured output, embedding-ready, RAG-pipeline compatible
ResilienceOften none✅ Token-bucket rate limiter, exponential backoff, proxy integration, circuit-breaker patterns

The bottom line: If you need raw job listings, any scraper works. If you need enriched, analytics-ready labor market data that feeds directly into an AI pipeline, dashboard, or decision engine — this is the tool.


Key Features

🎯 Multi-Mode Job Scraping

ModeWhat It DoesBest For
searchSingle keyword, maximum detail (25+ fields per job)Targeted job market research
batch_searchUp to 10 keywords in parallel, results merged & deduplicatedCross-role market comparison
major_searchAuto-generates keyword from academic major (e.g., "Teknik Informatika")University career centers, edtech platforms
analyticsRuns skill-demand & salary analysis on a keyword — no per-result chargeLabor market intelligence dashboards

💰 Salary Intelligence

  • 6 regex patterns covering USD ($102,000 – $159,000), IDR (Rp 8.000.000 – Rp 15.000.000), EUR, GBP, JPY, and bare-number formats
  • Context-aware period detection — monthly vs. hourly vs. annual, inferred from surrounding text and currency
  • Structured outputsalary_min, salary_max, salary_currency, salary_period, salary_raw

📊 Skill Demand Analytics

  • 125+ technical skills auto-extracted: programming languages, frameworks, databases, cloud platforms, DevOps tools, ML/AI libraries
  • 25+ soft skills detected: Communication, Leadership, Agile, Scrum, Project Management
  • Aggregated summaries included at no extra charge when enableAnalytics: true

🎓 Academic Major → Job Matching

Curated skill-to-job-title mapping for 25+ Indonesian university majors. Enter "Teknik Informatika" and the Actor auto-generates an optimized Boolean search query from the most relevant skills, then returns matching job listings.

⚡ Dual Speed Modes

ModeSpeedFields ReturnedCost Implication
Full Enrichment (default)Normal (~20–35s per query)25+ fields: salary, skills, benefits, description, criteriaSame per-result price, richer data
Fast Mode (fastMode: true)5–10× fasterCore fields: id, title, company, location, linkSame per-result price, faster throughput

Input Schema

{
"mode": "search",
"keyword": "Data Engineer",
"location": "Indonesia",
"maxItems": 25,
"remoteOnly": false,
"experienceLevel": "mid",
"employmentType": "full-time",
"datePosted": "week",
"fastMode": false,
"enableAnalytics": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
},
"requestTimeoutSecs": 30,
"debugMode": false
}

Full Parameter Reference

ParameterTypeDefaultDescription
modeenum"search"search, batch_search, major_search, or analytics
keywordstringJob title, skill, or Boolean query. Supports AND, OR, NOT, "exact phrase"
keywordsstring[][]List of queries for batch_search mode (max 10)
majorNameenumAcademic major name for major_search mode (25+ options)
locationstringCountry, city, or region filter (leave empty for worldwide)
maxItemsinteger10Results per query (1–25)
remoteOnlybooleanfalseRemote positions only
experienceLevelenuminternship, entry, associate, mid, senior, director, executive
employmentTypeenumfull-time, part-time, contract, temporary, internship
datePostedenum"month""24h", "week", or "month"
fastModebooleanfalseSkip detail fetch — 5–10× faster, returns core fields only
enableAnalyticsbooleanfalseAppend a free analytics summary record to the dataset
proxyConfigurationobjectResidentialApify proxy settings (highly recommended)
requestTimeoutSecsinteger30HTTP request timeout (10–120 seconds)
debugModebooleanfalseEnable verbose structured logging

Enriched Output Sample

Every job listing is pushed to your dataset as a single flat record — no nesting surprises, CSV-export-ready on day one.

{
"id": 4435506324,
"title": "Data Engineer",
"company_name": "TechCorp Indonesia",
"company_industry": "Technology, Information and Internet",
"company_logo_url": "https://media.licdn.com/dms/image/...",
"company_linkedin_url": "https://www.linkedin.com/company/techcorp/",
"location_city": "Jakarta",
"location_state": "Jakarta",
"location_country": "Indonesia",
"location_formatted": "Jakarta, Indonesia",
"workplace_type": "Hybrid",
"employment_type": "Full-time",
"seniority_level": "Mid-Senior level",
"job_function": "Engineering",
"industries": ["Technology", "Information Services"],
"posted_at": "2026-08-06T00:00:00+00:00",
"posted_time_ago": "3 days ago",
"applicant_count": 47,
"salary_min": 15000000.0,
"salary_max": 25000000.0,
"salary_currency": "IDR",
"salary_period": "monthly",
"salary_raw": "Rp 15.000.000 - Rp 25.000.000",
"skills": [
{ "name": "Python", "category": "technical" },
{ "name": "SQL", "category": "technical" },
{ "name": "Apache Airflow", "category": "technical" },
{ "name": "Apache Spark", "category": "technical" },
{ "name": "AWS", "category": "technical" },
{ "name": "Communication", "category": "soft" }
],
"benefits": ["BPJS Kesehatan", "BPJS Ketenagakerjaan", "Remote Work Flexibility"],
"requirements": [
"3+ years of experience in data engineering",
"Strong proficiency in Python and SQL",
"Experience with Apache Airflow or similar orchestration tools"
],
"description_snippet": "We are looking for a Data Engineer to build and maintain our data platform. You will design ETL pipelines...",
"easy_apply": true,
"linkedin_url": "https://www.linkedin.com/jobs/view/4435506324",
"_query_keyword": "Data Engineer",
"_query_location": "Indonesia",
"scraped_at": "2026-08-09T06:00:00+00:00"
}

Analytics Summary (appended when enableAnalytics: true — no extra charge):

{
"type": "summary",
"query_keyword": "Data Engineer",
"query_location": "Indonesia",
"total_jobs_found": 25,
"top_skills": "Python, SQL, Apache Spark, AWS, ETL",
"salary_range": "8000000 – 35000000",
"workplace_distribution": { "On-site": 12, "Hybrid": 9, "Remote": 4 }
}

Quick Integration

Python (Apify SDK)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
# Launch the Actor and wait for completion
run = client.actor("galih_rakasiwi/linkedin-job-market-api").call(
run_input={
"mode": "search",
"keyword": "Data Engineer",
"location": "Indonesia",
"maxItems": 25,
"enableAnalytics": True
}
)
# Fetch results — flat JSON, ready for pandas
jobs = list(
client.dataset(run["defaultDatasetId"]).iterate_items()
)
# Load into DataFrame for analysis
import pandas as pd
df = pd.DataFrame(jobs)
print(f"Extracted {len(df)} jobs | Salary range: {df['salary_min'].min():.0f}{df['salary_max'].max():.0f} {df['salary_currency'].mode()[0]}")

cURL (REST API)

curl -X POST "https://api.apify.com/v2/acts/galih_rakasiwi~linkedin-job-market-api/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mode": "search",
"keyword": "Machine Learning Engineer",
"location": "Singapore",
"maxItems": 25,
"datePosted": "week",
"enableAnalytics": true
}'
# Fetch results after run completes
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=YOUR_API_TOKEN&format=json&clean=1"

Node.js (Apify SDK)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
const run = await client.actor('galih_rakasiwi/linkedin-job-market-api').call({
mode: 'batch_search',
keywords: ['Data Engineer', 'MLOps Engineer', 'Analytics Engineer'],
location: 'Indonesia',
maxItems: 15,
enableAnalytics: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} enriched job listings`);
// Filter for high-salary remote roles
const highValue = items
.filter(j => j.workplace_type === 'Remote' && (j.salary_min || 0) >= 20000000);
console.log(`${highValue.length} remote roles above 20M IDR`);

Apify CLI

apify call galih_rakasiwi/linkedin-job-market-api \
--input '{"mode": "search", "keyword": "Data Engineer", "maxItems": 25}' \
--output jobs.json

Pricing & Support

ItemPrice
Each job listing pushed to dataset$0.02 / result
Analytics summary recordFree — no charge
Failed run / zero resultsFree — you pay only for data you receive

You are never billed for compute time, retries, or empty runs. This is pure Pay-Per-Result — transparent, predictable, and aligned with your data needs.

Cost Estimator

ScenarioEstimated ResultsEstimated Cost
1 keyword × 10 jobs10$0.20
Batch 5 keywords × 10 jobs each50$1.00
Major search × 25 jobs25$0.50
Analytics mode (skill + salary insights)1 summary recordFree

How We Handle Stability & Anti-Bot

LinkedIn's public endpoints are rate-limited and subject to HTML structure changes. This Actor includes multiple layers of defense to maximize uptime and data consistency:

LayerMechanism
Token-Bucket Rate LimiterThrottles requests to ~8–10 req/s, preventing burst patterns that trigger IP blocks
Exponential Backoff Retry3 retries with 1s → 2s → 4s backoff on TimeoutException, ConnectError, RemoteProtocolError
Auth Wall DetectionMonitors redirects to /login, /checkpoint, /signup — surfaces clean errors instead of silent data loss
HTTP 429 HandlerRespects Retry-After headers when LinkedIn rate-limits, backing off gracefully
Session WarmupEstablishes guest cookies via a dedicated warmup request before any data fetch
Proxy IntegrationFirst-class Apify Residential Proxy support — rotates IPs to avoid geographic and volumetric blocking
Partial Result ResilienceIf one job detail fetch fails, the rest of the batch continues — no all-or-nothing failures
CSS Selector ConstantsAll HTML selectors are module-level constants. When LinkedIn changes markup, only selectors update — parsing logic stays intact
Circuit Breaker ReadyDetects consecutive failures and can halt requests during cool-down periods (configurable)

This isn't a naive requests.get() loop. It's a production-grade HTTP client with session orchestration, originally built as a FastAPI microservice with structured logging, type safety (mypy strict mode), and >80% test coverage on parser logic.


Perfect For

AudienceUse Case
Quantitative ResearchersLabor market econometrics, salary trend modeling, skill-demand forecasting
Data Scientists & ML EngineersBuild job recommendation engines, train skill-gap classifiers, feed RAG pipelines
AI DevelopersPower AI Career Agents with real-time structured job data + skill analytics
HR Tech & Recruiting PlatformsBackend job feed, competitive hiring intelligence, salary benchmarking
Universities & EdTechCareer center job matching, curriculum-to-market alignment analysis
Job Boards & AggregatorsStructured job feed with 25+ fields — no parsing needed
Government & Policy ResearchLabor market analysis, workforce planning, employment policy data

Tech Stack

FastAPI · httpx (HTTP/2) · BeautifulSoup4 + lxml · Pydantic v2 · Apify SDK (Python) · structlog (structured JSON logging) · MongoDB (optional, for major_search mode)


Development & Self-Hosting

This Actor is built on a standalone FastAPI microservice that can run independently outside Apify:

# Clone and set up
git clone <repo-url> && cd linkedin_api
uv sync
# Run as Apify Actor (local simulation)
uv run python src/main.py
# Run as REST API server
uv run uvicorn app.main:app --reload

Full technical documentation — architecture, data flow pipeline, parser strategy, configuration reference, and testing guide — is available in docs/DOCUMENTATION.md.


Disclaimer

This Actor accesses publicly available data from LinkedIn's guest (non-authenticated) endpoints. It does not bypass authentication, scrape logged-in content, or violate LinkedIn's robots.txt directives.

  • Data Rights: All job listing data remains the property of the respective employers and LinkedIn Corporation. Users are responsible for complying with LinkedIn's Terms of Service and applicable data protection laws in their jurisdiction.
  • No Affiliation: This Actor is not affiliated with, endorsed by, or connected to LinkedIn Corporation or Microsoft.
  • Accuracy: Salary data is extracted from job descriptions using heuristic parsing. Not all listings include salary information — null values indicate the employer did not disclose compensation.
  • Rate Limits: LinkedIn's guest API imposes a soft limit of ~50–75 results per query. The Actor respects these limits and surfaces them transparently.

License

MIT — see LICENSE.