Jobs Scraper — Indeed, LinkedIn & Glassdoor
Pricing
from $3.00 / 1,000 job results
Jobs Scraper — Indeed, LinkedIn & Glassdoor
Aggregate job listings from Indeed, LinkedIn and Glassdoor in one run. Returns title, company, location, salary, posted date, apply URL. $3/1K. MCP/API-ready.
Pricing
from $3.00 / 1,000 job results
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
325
Total users
29
Monthly active users
8 days ago
Last modified
Categories
Share
Apify Actor khadinakbar/jobs-scraper searches job listings across Indeed, LinkedIn, and Glassdoor in one run and returns one record per job listing. It accepts a job title or keyword, an optional location, platform selection, and result controls. Each record can include job title, company name, location, salary fields, remote status, posted date, apply URL, platform, source URL, company details, and skill signals, giving you a normalized dataset for spreadsheets, dashboards, API workflows, and Apify MCP.
Best fit and connected workflows
This Actor fits workflows that need one searchable view across multiple job boards while keeping the output schema consistent.
Use it when you want to:
- compare postings for the same role across Indeed, LinkedIn, and Glassdoor
- filter by role, location, remote status, job type, or recency
- build lead lists for recruiters, talent sourcers, or job market research
- feed structured job data into an internal app, CRM, or AI pipeline
- connect job search results to follow-up Actors that enrich company or contact data
For workflow routing, these verified related Actors are useful when your brief points to a more specific board or region:
- Use APEC Jobs Scraper when the search brief centers on APEC-related job boards, geography, or audiences.
- Use Ashby Jobs Scraper when the hiring source is Ashby and your workflow is source-specific.
- Use Bayt Jobs Data Scraper for MENA Listings when the brief is focused on Bayt listings or a MENA-centered market.
Practical scenario
Maya is a recruiter who starts with data engineer in New York, NY and selects Indeed and LinkedIn. The Actor returns listings with job_title, company_name, location, salary_range, posted_date, platform, and apply_url. Maya sees that several roles are remote, one listing includes a salary range, and one has easy_apply: true. She uses those fields to decide which listing to review first, then opens the apply URL to continue outreach or application tracking.
Input fields
| Field | Type | Default | Purpose |
|---|---|---|---|
searchQuery | string | software engineer | Job title, skill, or keyword to search |
location | string | United States | City, state, country, or Remote |
platforms | array | ["indeed","linkedin","glassdoor"] | Platforms to search |
maxResults | integer | 50 | Maximum total listings to return |
jobType | string | all | Employment type filter |
isRemote | boolean | false | Return remote jobs only when enabled |
hoursOld | integer | 0 | Posted within the last X hours |
deduplicate | boolean | true | Remove cross-platform duplicates |
Focused input example
{"searchQuery": "data engineer","location": "New York, NY","platforms": ["indeed", "linkedin"],"maxResults": 20,"jobType": "fulltime","isRemote": false,"hoursOld": 48,"deduplicate": true}
Output fields
Each dataset record contains the following fields when available in the source listing.
| Field | Type | Meaning |
|---|---|---|
job_title | string | Full job title |
company_name | string | Hiring company |
location | string | Job location |
is_remote | boolean | Remote or work-from-home status |
salary_min | number or null | Minimum salary value |
salary_max | number or null | Maximum salary value |
salary_currency | string or null | ISO currency code |
salary_period | string or null | Salary period such as yearly, monthly, or hourly |
salary_range | string or null | Human-readable salary display |
job_type | string or null | Employment type |
seniority_level | string or null | Experience level when available |
description | string | Full job description text |
skills | array or null | Skills detected from the description |
posted_date | string or null | ISO 8601 posted timestamp |
apply_url | string | Direct link to job listing |
easy_apply | boolean or null | Quick apply indicator when available |
platform | string | Source platform: Indeed, LinkedIn, or Glassdoor |
company_rating | number or null | Average company rating |
company_reviews_count | integer or null | Number of employee reviews |
company_size | string or null | Employee count range |
company_industry | string or null | Industry classification |
company_website | string or null | Company website URL |
source_url | string | Search results page that was scraped |
scraped_at | string | ISO 8601 scrape timestamp |
Illustrative output record
{"job_title": "Senior Data Engineer","company_name": "Airbnb","location": "San Francisco, CA","is_remote": false,"salary_min": 150000,"salary_max": 200000,"salary_currency": "USD","salary_period": "yearly","salary_range": "$150K-$200K/yr","job_type": "fulltime","seniority_level": "Mid-Senior level","description": "We are looking for a Senior Data Engineer to join the team...","skills": ["python", "sql", "aws", "spark"],"posted_date": "2026-03-28T09:00:00.000Z","apply_url": "https://www.linkedin.com/jobs/view/3987654321","easy_apply": true,"platform": "linkedin","company_rating": 4.3,"company_reviews_count": 3241,"company_size": "1001-5000 employees","company_industry": "Internet & Web Services","company_website": "https://airbnb.com","source_url": "https://www.linkedin.com/jobs/search/?keywords=data+engineer&location=United+States","scraped_at": "2026-03-31T10:30:00.000Z"}
How it works
The Actor searches job listings across the selected platforms using the keyword and location you provide. It can search Indeed, LinkedIn, and Glassdoor together, return a combined result set, and distribute the maxResults setting across the chosen platforms. It also supports job type filtering, remote-only filtering, a posted-within-hours filter, and cross-platform deduplication based on job title, company, and location. The dataset schema stores each job listing as one record.
Pricing
This Actor uses Pay per event pricing on Apify. The primary event is one Job Result, which is one scraped job listing from Indeed, LinkedIn, or Glassdoor. Apify platform usage is charged separately according to your account and execution settings, so review the live Pricing tab on the Actor page for current details.
Example in words: if a run returns one hundred job listings, it charges one hundred Job Result events, plus the Apify platform usage associated with the run.
Use with AI agents (MCP)
This Actor is usable through Apify MCP as a tool for job search and market research workflows. The exact Actor identity is khadinakbar/jobs-scraper.
Tool description:
- search job listings across Indeed, LinkedIn, and Glassdoor
- return structured records with titles, companies, locations, salary fields, remote status, apply URLs, and source metadata
- read results from the Apify dataset output for downstream reasoning, enrichment, or ranking
Search for "remote data engineer" roles in the United States, limit to 20 results, use LinkedIn and Indeed, then summarize the records by company, salary range, and apply URL.
Output interpretation:
- each dataset item is one job listing
source_urlshows the query page used for the recordscraped_athelps distinguish a fresh run from earlier dataplatformidentifies the source board for each recordsalary_*fields are normalized for analysis when available
Scope, pagination, and cost guidance:
maxResultssets the total result target across selected platforms- results are distributed across platforms
- use smaller values for fast tests and larger values when you want broader coverage
- each returned listing counts as one
Job Resultevent - platform usage is billed separately on Apify
- review the live Pricing tab before production use
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const actor = client.actor('khadinakbar/jobs-scraper');const run = await actor.call({searchQuery: 'data engineer',location: 'New York, NY',platforms: ['indeed', 'linkedin'],maxResults: 10,jobType: 'fulltime',isRemote: false,hoursOld: 72,deduplicate: true,});const dataset = client.dataset(run.defaultDatasetId);const { items } = await dataset.listItems();console.log(items);
Best results and outcome guidance
Use a focused searchQuery and a concrete location when you want cleaner search results. If you only need one source, set platforms to a subset. When you are comparing overlapping listings, keep deduplicate enabled so the same job appearing on more than one platform is handled as one record. When freshness matters, set hoursOld to a narrow window such as 24 or 48. For broad monitoring, keep jobType on all and widen the location scope.
Design note
I found that the live dataset contract exposes salary_period with the values yearly, monthly, and hourly, which makes the salary fields straightforward to use in spreadsheets and downstream analysis.
FAQ
Can I search more than one job platform in the same run?
Yes. Set platforms to include Indeed, LinkedIn, Glassdoor, or any combination of them.
How do I reduce duplicate listings?
Keep deduplicate set to true. The Actor matches on job title, company, and location, then keeps the record with the richer description.
How do I focus on remote jobs?
Set isRemote to true. You can also combine it with location and jobType for a narrower search.
What should I use for a quick test?
Start with a small maxResults value such as 5 or 10, then review the dataset output before running a larger search.
What field identifies where a listing came from?
Use platform for the source board and source_url for the search results page used to find the record.
When should I route to Ashby Jobs Scraper instead?
Use it when your search brief centers on employers hiring through Ashby and you want a source-specific workflow rather than a cross-board search.
When should I route to Bayt Jobs Data Scraper for MENA Listings instead?
Use it when the search is focused on Bayt listings or a MENA-centered market brief.
When should I route to APEC Jobs Scraper instead?
Use it when the research brief points to APEC-related job boards, geography, or audiences.
Responsible use
Use the Actor in ways that respect the terms of the source platforms and the Apify platform. Review the live Pricing tab before larger runs, and validate the returned fields in your own workflow before making operational decisions from the data.
Related Actors
When your search brief calls for a more specific source, these verified related Actors provide focused routing:
- Use APEC Jobs Scraper for APEC-centered searches when the next workflow needs that Actor's focused input and output contract.
- Use Ashby Jobs Scraper for Ashby-hosted listings when the next workflow needs that Actor's focused input and output contract.
- Use Bayt Jobs Data Scraper for MENA Listings for Bayt and MENA listings when the next workflow needs that Actor's focused input and output contract.