LinkedIn Jobs Scraper: Job Listings by Keyword and Location Without Login
Scrape LinkedIn job listings by keyword and location: job title, company, seniority, applicant count, and job description. No LinkedIn login required.
The actor referenced in this article. Pay only for results delivered.
LinkedIn’s public job search is accessible without a login. Our LinkedIn Jobs Scraper targets the unauthenticated job listings page, paginates across results, and returns structured data per listing.
What you get per job
job_id— LinkedIn’s internal job IDjob_url— full LinkedIn job URLtitle— job titlecompany— company namecompany_url— LinkedIn company page URLlocation— job locationposted_at— relative posting date (e.g. “2 days ago”)job_type— Full-time, Part-time, Contract, or Remoteseniority_level— Entry, Associate, Mid-Senior, Director, Executivedescription— first 500 characters of the job descriptionapplicant_count— number of applicants shownscraped_at— ISO timestamp
Python example
import requests, time
run = requests.post(
"https://api.apify.com/v2/acts/themineworks~linkedin-jobs-scraper/runs",
headers={"Authorization": f"Bearer {APIFY_TOKEN}"},
json={
"keywords": "machine learning engineer",
"location": "San Francisco Bay Area",
"maxResults": 100
}
)
run_id = run.json()["data"]["id"]
while True:
r = requests.get(
f"https://api.apify.com/v2/actor-runs/{run_id}",
headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
).json()
if r["data"]["status"] in ("SUCCEEDED", "FAILED"):
break
time.sleep(5)
jobs = requests.get(
f"https://api.apify.com/v2/actor-runs/{run_id}/dataset/items",
headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
).json()
for job in jobs:
print(job["title"], "@", job["company"])
print(f" {job['location']} | {job['seniority_level']} | {job['applicant_count']} applicants")
Hiring signal analysis
import pandas as pd
df = pd.DataFrame(jobs)
# Which companies are hiring the most for this role?
print(df.groupby("company").size().sort_values(ascending=False).head(20))
# Seniority distribution
print(df["seniority_level"].value_counts())
# Average applicant count by seniority
print(df.groupby("seniority_level")["applicant_count"].mean())
Scheduled monitoring
To track new job postings over time, schedule this actor daily and deduplicate by job_id:
seen_ids = set(existing_df["job_id"].tolist())
new_jobs = [j for j in jobs if j["job_id"] not in seen_ids]
print(f"{len(new_jobs)} new postings since last run")
Use cases
Talent intelligence. Track which companies are hiring for a specific role and at what seniority to gauge growth direction.
Sales prospecting. Companies posting senior sales or growth roles are often expanding and receptive to new vendors.
Competitive hiring analysis. Monitor competitor job postings to infer product roadmap and team-building priorities.
Market research. Measure demand for a skill by counting job postings across cities, industries, and company sizes.
Job aggregation. Build a niche job board by combining this actor with Indeed and Glassdoor scrapers.
Pricing
$0.003 per job listing. Empty searches are not charged.
Available on Apify.
Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.
Airbnb Scraper: Listing Prices, Ratings, and Availability Without the API
Airbnb has no public listings API. Here's how to pull nightly price, rating, superhost status and coordinates from Airbnb search results using Python.
Maps Leads: Verified Email Extraction from Google Maps Business Listings
How to pull B2B leads from Google Maps with MX-verified emails, past the official API's 120-result cap, and pay only for contactable businesses.
Realtor.com Scraper: Property and Agent Data Without the MLS Paywall
Scrape Realtor.com listings in Python — price, beds, baths, county, and the listing agent + brokerage office on every record. No login, no API key.