Indeed Jobs Scraper (Cheap)
Pricing
from $2.99 / 1,000 results
Indeed Jobs Scraper (Cheap)
Pulls job listings from Indeed by keyword, location, or company name. Run multiple searches at once and get titles, salaries, apply links, and posting dates back as structured data.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
Data API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Indeed Job Listings Scraper

Searching Indeed by hand gets old fast. You click through page after page, copy out a title here and a pay range there, then start over for the next city. This scraper handles that part. Give it a keyword and a place, and it returns the role title, employer, pay range, location, how recently the job went up, and a direct apply link as structured data. Pass it a few keywords and a few cities at once and every combination lands in one dataset, ready to export.
What you get
Every job card on the results page becomes one row with the same shape, so your columns stay predictable when you load them into a sheet or database. Anything the listing did not show comes back as null rather than dropping out. Each row carries:
- The role —
roleTitle,summaryText,employmentType,remoteFriendly,payRange - The employer —
employerName,employerRating - Where and when —
workLocation,listedDate - How to apply —
applyUrl,quickApply - Tracking —
postingId,collectedAt
Quick start
- Open the input form and type a role into Keyword (or paste several into Keywords).
- Set a Place, or leave it empty to search everywhere. Add more under Places if you want several cities at once.
- Optionally narrow things with Posted within, Employment type, or Remote only, or point Employer at one company.
- Press Start, then export the dataset as JSON, CSV, Excel, or XML once the run finishes.

Use cases
- Recruiters checking what a rival is hiring for this week without paging through the site by hand.
- Job-market analysts watching how demand for a skill shifts from one city to the next.
- Compensation teams building a pay benchmark from the ranges employers actually posted.
- Developers wiring a feed of fresh listings into alerts or a job board.
- Career coaches pulling current openings for a client across a few target markets in one pass.
Input
| Field | Type | Required | Description |
|---|---|---|---|
keyword | string | One of keyword or employer | A single role or search term, e.g. backend developer. Merged with keywords when both are set. |
keywords | array of strings | Optional | A batch of search terms, one per line; each runs as its own search. |
employer | string | One of keyword or employer | Limit results to a company's Indeed page. Switches to the /cmp/{company}/jobs route and skips the open search. |
place | string | No | A city, state, country, or Remote. Leave empty to cover everywhere. |
places | array of strings | No | Several areas to cover in one run, one per line. Merged with place when both are set. |
postedWithin | string | No | Recency window: any, last24h, last3days, last7days, or last14days. Default any. |
employmentType | string | No | Contract filter: any, fulltime, parttime, contract, temporary, or internship. Default any. |
remoteOnly | boolean | No | Keep only remote or work-from-home roles. Default false. |
timeoutSeconds | integer | No | Seconds to wait on each request before giving up. Default 120; raise it if later pages return 502s. |
Example input
{"keyword": "backend developer","place": "Austin","postedWithin": "last7days","employmentType": "fulltime","remoteOnly": false,"timeoutSeconds": 120}
Run several searches across several cities in one go:
{"keywords": ["backend developer", "ux designer", "marketing manager"],"places": ["Austin", "Remote", "Canada"],"postedWithin": "last3days"}
Pull everything from a single company:
{"employer": "Microsoft","place": "Austin"}
Output
Each job card on the results page becomes one row, and every field is always present — values the listing did not carry come back as null so the dataset stays rectangular.
Example output
{"postingId": "abc123def456","roleTitle": "Senior Backend Developer","employerName": "Acme Corp","employerRating": 4.2,"workLocation": "Austin, TX","payRange": "$130,000 - $160,000 a year","employmentType": "full-time","remoteFriendly": false,"listedDate": "2 days ago","summaryText": "We are looking for a Senior Backend Developer to join our growing platform team...","applyUrl": "https://www.indeed.com/viewjob?jk=abc123def456","quickApply": true,"collectedAt": "2026-06-29T10:30:00+00:00"}
Output fields
| Field | Type | Description |
|---|---|---|
postingId | string | Indeed's unique identifier for the listing. |
roleTitle | string | Position title as written by the employer. |
employerName | string | Name of the hiring company. |
employerRating | number | Company star rating when shown, e.g. 3.8. |
workLocation | string | City, state, or country attached to the role. |
payRange | string | Posted pay if listed, e.g. $80,000-$120,000 a year. |
employmentType | string | Contract kind such as full-time or contract. |
remoteFriendly | boolean | true when the listing reads as remote or work-from-home. |
listedDate | string | Relative posting date, e.g. 3 days ago. |
summaryText | string | Short description shown on the results card. |
applyUrl | string | Direct link to the job detail and apply page. |
quickApply | boolean | true when Indeed's quick-apply flow is offered. |
collectedAt | string | ISO 8601 timestamp of when the row was captured. |
Tips for best results
- Test with one keyword first. Run a single search before a wide sweep so URL or location quirks show up early.
- Combine keywords and places to cover a market. Three keywords across three cities gives you nine searches in one dataset — useful for comparing the same role between markets.
- Reach for
employerfor a single company. Drop a company name in and the scraper reads its/cmppage instead of the open search. - Expect blanks on sparse cards. Pay and rating are not on every listing; those fields return
nulland that is normal, not a failure. - Raise
timeoutSecondsif later pages stall. Push it toward 180 when you see repeated 502s deeper into a run.
How can I use Indeed job data?
How can I use the Indeed Job Listings Scraper to track hiring demand across cities?
Put your target roles in keywords and your markets in places. The scraper runs every keyword-and-city pair and returns each listing's title, employer, pay range, and location in one dataset. Group the rows by workLocation to compare how demand for a skill differs from one city to the next.
How do I scrape Indeed jobs from one specific company?
Set employer to the company name. The scraper switches to that company's /cmp page and returns its current openings with titles, locations, pay, and apply links — handy for keeping tabs on a competitor's hiring or researching an employer before you apply.
How can I build a salary benchmark from Indeed listings?
Search a role across your markets and read the payRange field, which carries the pay an employer actually posted. Filter with employmentType and postedWithin to keep the sample current, then export to CSV or Excel to chart pay by city or contract type.
How do I export Indeed job data for analysis? Every run writes to an Apify dataset you can download as JSON, CSV, Excel, or XML from the Storage tab. Each row follows the same schema, so it drops straight into a spreadsheet, a database, or a BI tool with no reshaping.
Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Support
Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.