Indeed Jobs Scraper: Salaries, Contacts & Apply URLs
Pricing
from $2.29 / 1,000 indeed jobs
Indeed Jobs Scraper: Salaries, Contacts & Apply URLs
Scrape Indeed jobs by keyword, location, URL, or job ID. Extract full descriptions, salaries, skills, public emails and phones, company profiles, logos, ATS providers, apply links, and listing changes.
Pricing
from $2.29 / 1,000 indeed jobs
Rating
0.0
(0)
Developer
Shadow Extractor
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
๐ผ Indeed Jobs Scraper: Salaries, Contacts & Apply URLs
Turn public Indeed listings into clean job-market data. Search by keyword and location, enrich known job URLs or IDs, normalize salaries, extract skills and public contacts, identify apply destinations, build company summaries, and monitor listing changes between runs.
Data availability: fields are returned only when they are publicly available for the selected listing, country, and enrichment options. Use Compact clean results to omit unavailable fields automatically.
โจ What you can collect
- Job title, company, location, job type, remote status, and posting date
- Full job descriptions, requirements, benefits, shifts, and schedules
- Salary text plus normalized min, max, currency, unit, and annual values
- Skills grouped from the public job content
- Public email addresses and phone numbers found in job or company content
- Company website, social links, rating, size, industry, revenue, addresses, logos, and photos when published
- Indeed Apply or external application links with ATS detection
- Candidate-to-job skill match and salary-fit signals
- New, updated, reposted, unchanged, and expired listing monitoring
- Separate jobs, contacts, companies, errors, changes, and run-summary outputs
๐ Quick start
- Open the Actor Input tab.
- Choose Search jobs.
- Add a job title or keyword such as
python developer. - Add one or more locations such as
New York, NY. - Choose the Indeed country.
- Set the number of jobs.
- Select Fast listing cards for discovery or Full details, contacts & media for richer records.
- Start the run and open the Jobs, Contacts, or Job details output.
Recommended first run
{"mode": "SEARCH","country": "us","queries": ["python developer"],"locations": ["New York, NY"],"maxResults": 10,"maxPagesPerSearch": 1,"postedWithinDays": "7","sort": "date","enrichmentMode": "fast","outputMode": "compact"}
๐งญ Three workflows
1. Search jobs
Use SEARCH to discover listings from keyword and location combinations or from complete Indeed search URLs.
queries ร locationsโIndeed result pagesโclean job rowsโ optional full enrichmentdetails + contacts + salary + skills + apply data
Every query is combined with every location. For example, 2 queries and 3 locations create 6 search combinations. maxResults remains the global result limit for the run.
2. Enrich job URLs or IDs
Use DETAIL when you already know the listings you need. Provide direct Indeed job URLs in startUrls or job keys in jobIds.
{"mode": "DETAIL","country": "us","startUrls": [{ "url": "https://www.indeed.com/viewjob?jk=de07417d37bb4b34" }],"jobIds": [],"maxResults": 10,"enrichmentMode": "full","outputMode": "compact"}
DETAIL requires at least one direct job URL or job ID. Country is used to build a matching Indeed detail URL for raw job IDs.
3. Auto detect
Use AUTO to let the Actor choose from your input:
- search queries or search URLs select search mode
- direct URLs or job IDs select detail mode when no search input is present
- mixed input can collect search results and direct listings in one run
- empty input uses a safe sample search for
python developerinNew York, NY
๐ฌ Choose your data depth
| Capability | Fast listing cards | Full details |
|---|---|---|
| Title, company, location | โ | โ |
| Visible salary and posting data | โ | โ |
| Full description | Limited | โ |
| Requirements and benefits | Limited | โ |
| Public job contacts | Limited | Best coverage |
| Skill extraction | From available card text | From full description |
| Apply metadata | When visible | Best coverage |
| Requests per job | Lower | Higher |
Use enrichmentMode: "fast" for broad discovery. Use enrichmentMode: "full" when descriptions, contacts, skills, or apply data matter.
๐ Supported Indeed countries
| Value | Country |
|---|---|
us | United States |
gb | United Kingdom |
ca | Canada |
au | Australia |
de | Germany |
fr | France |
nl | Netherlands |
es | Spain |
it | Italy |
br | Brazil |
in | India |
sg | Singapore |
za | South Africa |
Use the country matching the listing or search domain for the most predictable URLs, filters, salary currency, and locale.
๐๏ธ Search controls
| Input | Purpose |
|---|---|
queries | Job titles, skills, employers, or search terms |
locations | Cities, states, countries, or Remote |
maxResults | Global maximum number of job rows |
maxPagesPerSearch | Pagination limit for each query/location or search URL |
postedWithinDays | Any time or last 1, 3, 7, 14, or 30 days |
jobType | Full-time, part-time, contract, temporary, internship, or commission |
remote | Remote, hybrid, on-site, or any |
radius | Search radius from 0 to 100 miles where supported |
sort | Relevance or newest first |
dedupe | Remove repeated listings across searches |
Indeed filters vary by country. The remote and radius controls are best-effort and may behave differently across local Indeed domains.
๐ง Enrichment options
Normalize salary
normalizeSalary: true converts a visible salary label into analysis-friendly fields:
salaryMinsalaryMaxsalaryCurrencysalaryUnitsalaryAnnualMinsalaryAnnualMaxsalaryConfidence
When no public salary is present, salary fields are omitted in compact output.
Extract skills
extractSkills: true groups recognized skills from the available description and attributes. Full details provides the best input text.
Resolve apply URLs
resolveApplyUrls: true follows an available application link and adds the final destination when it can be resolved:
applyUrlexternalApplyUrlfinalApplyUrlatsProviderapplyUrlStatus
Keep this off for fast job discovery. Some listings use Indeed Apply and do not expose a separate employer or ATS URL.
Add company profile data
enrichCompanyProfiles: true can add public employer information such as:
- website and social links
- logo, header image, and company photos
- industry, company size, revenue, and founded data
- rating and company description
- addresses and public company contacts
Availability differs by company. This option adds work per unique employer, so enable it only when company intelligence is useful.
Candidate matching
Add at least one target skill to candidateProfile:
{"candidateProfile": {"skills": ["python", "sql", "aws"],"targetSalaryAnnual": 120000}}
Each matching job can receive:
{"candidateFit": {"matchScore": 66.67,"matchedSkills": ["python", "sql"],"missingSkills": ["aws"],"salaryFit": true}}
This is a transparent rule-based comparison, not an employment decision or ranking recommendation.
๐ฅ Complete examples
Full jobs with public contacts
{"mode": "SEARCH","country": "us","queries": ["account executive", "sales representative"],"locations": ["Austin, TX", "Remote"],"maxResults": 50,"maxPagesPerSearch": 3,"postedWithinDays": "7","sort": "date","enrichmentMode": "full","normalizeSalary": true,"extractSkills": true,"resolveApplyUrls": false,"enrichCompanyProfiles": false,"outputMode": "compact"}
Company intelligence and media
{"mode": "SEARCH","country": "gb","queries": ["data analyst"],"locations": ["London"],"maxResults": 25,"enrichmentMode": "full","enrichCompanyProfiles": true,"normalizeSalary": true,"extractSkills": true,"outputMode": "compact"}
Search from an Indeed URL
{"mode": "SEARCH","country": "us","queries": [],"locations": [],"startUrls": [{ "url": "https://www.indeed.com/jobs?q=product+manager&l=Chicago%2C+IL" }],"maxResults": 50,"maxPagesPerSearch": 3,"enrichmentMode": "full"}
Monitor a repeatable search
{"mode": "SEARCH","country": "us","queries": ["machine learning engineer"],"locations": ["San Francisco, CA"],"maxResults": 100,"maxPagesPerSearch": 5,"postedWithinDays": "30","sort": "date","enrichmentMode": "full","enableDeltaMonitoring": true,"outputMode": "compact"}
Use the same Actor task and equivalent input on later runs so the comparison represents the same market slice.
๐ค Output views
๐ผ Jobs
The clean default table with company image, title, company, location, salary, remote status, job type, date, contact preview, and canonical URL.
๐ Contacts
Focuses on public contact and company-link fields:
- primary email and phone
- all email and phone values
- contact count
- company website and social links
- job and company context
๐ข Companies & media
Shows public company profile and image fields attached to job rows. Enable enrichCompanyProfiles for the richest coverage.
๐ Company summary
One aggregated row per employer in the separate companies dataset:
- open jobs count
- top roles and locations
- average annual salary when available
- remote share
- top skills
- public company contacts and profile fields
๐ Job details
Full descriptions, requirements, benefits, work systems, extracted skills, normalized salary, and source URL.
๐ Apply links
Application status, ATS provider, source apply link, external destination, and final resolved URL.
โ ๏ธ Errors
Recoverable page-level diagnostics live in the separate errors dataset. They are not mixed into normal job rows. If no jobs can be collected, the default dataset receives one clearly labeled diagnostic row so the Output tab does not look silently empty.
๐ Run summary
One row in the separate summary dataset with counts, quality rates, pages and details processed, source issue status, runtime, and timestamps.
๐งฉ Complete job data
The curated complete job schema for inspection and integrations. Apify also adds its own system All fields tab, which displays every key physically present in the dataset. Use Complete job data for the Actor's stable field order and the system All fields tab only for raw inspection.
๐งพ Example compact job
{"type": "job","jobKey": "de07417d37bb4b34","title": "Senior Python Engineer","companyName": "Example Labs","companyImageUrl": "https://example.com/company-logo.png","location": "New York, NY","remoteType": "hybrid","salaryText": "$130,000 - $165,000 a year","salaryCurrency": "USD","salaryUnit": "year","salaryMin": 130000,"salaryMax": 165000,"salaryAnnualMin": 130000,"salaryAnnualMax": 165000,"employmentType": ["FULL_TIME"],"descriptionSnippet": "Build reliable data services...","extractedSkills": {"all": ["AWS", "Python", "SQL"]},"applyUrlStatus": "external","atsProvider": "Greenhouse","canonicalUrl": "https://www.indeed.com/viewjob?jk=de07417d37bb4b34"}
This is an illustrative record. Exact values and fields depend on the public listing and selected options.
๐ฆ Compact vs full output
Compact clean results
Recommended for people, spreadsheets, and most automations. Empty strings, empty arrays, empty objects, and unavailable fields are omitted.
{"outputMode": "compact"}
Full stable schema
Recommended when downstream code requires the same keys in every row. Unavailable values remain as stable empty collections or null placeholders.
{"outputMode": "full"}
๐ Delta monitoring
With enableDeltaMonitoring: true, the Actor compares the current result set with the previous state stored for the task.
Possible changeStatus values:
newupdatedrepostedunchangedexpired
Changed or expired records are written to the separate changes dataset. The main job row also receives changeStatus, and updated jobs can include changedFields.
The first monitoring run establishes the baseline. Use stable queries, locations, filters, and limits between runs; changing the search can make unrelated jobs appear new or expired.
โ Data-quality behavior
- Duplicate job keys and equivalent title/company/location rows can be removed with
dedupe. - Detail enrichment keeps the original search card if an individual detail page is temporarily unavailable.
- Compact mode removes unavailable values instead of showing filler text.
- Public contacts are never guessed.
- Salary normalization runs only on salary text published by the source.
- Error rows are separated from successful jobs.
maxResultsis an upper limit. The final count can be lower when fewer matching public jobs exist.
๐ก Recommended settings
| Goal | Recommended settings |
|---|---|
| Fast market scan | SEARCH, fast, 1-3 pages, compact output |
| Full job export | SEARCH, full, salary and skills enabled |
| Contact discovery | full, compact output, company profiles only if needed |
| Apply-link research | full, resolveApplyUrls: true |
| Employer intelligence | full, enrichCompanyProfiles: true |
| Known listing enrichment | DETAIL with job URLs or IDs |
| Change monitoring | Repeatable search plus enableDeltaMonitoring: true |
| Stable database schema | outputMode: "full" |
โ FAQ
Why are some fields missing?
Indeed does not publish every field for every listing or country. Full enrichment improves coverage, but it cannot create data that is not public.
Why are there no email addresses or phone numbers?
Many employers route applications through Indeed or an ATS and publish no direct contact information. The Actor returns contacts only when found in public job or company content.
Why does the apply URL still point to Indeed?
The listing may use Indeed Apply or may not expose an external destination. Enable resolveApplyUrls to follow an available apply path, but some jobs legitimately remain on Indeed.
Why did a DETAIL run return nothing?
Check that startUrls contains a public job URL or jobIds contains a valid Indeed job key. Expired or removed listings may no longer provide a job record.
Can I mix search URLs and direct job URLs?
Yes. Mixed input can collect both. Keep maxResults high enough for the combined run and leave deduplication enabled.
How do I avoid null and empty placeholders?
Use outputMode: "compact", which is the default.
Can I export to CSV or Excel?
Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.
โ๏ธ Responsible use
Use public job and company data responsibly. Follow applicable privacy, employment, anti-spam, copyright, and data-protection requirements. Candidate matching fields are analytical helpers and should not be used as the sole basis for employment decisions.
๐ท๏ธ Good for
Indeed jobs ยท job scraping ยท salary intelligence ยท public contacts ยท ATS links ยท company intelligence ยท skills extraction ยท job monitoring ยท recruiting automation