Indeed Jobs Scraper - Most Comprehensive avatar

Indeed Jobs Scraper - Most Comprehensive

Pricing

from $0.04 / 1,000 jobs

Go to Apify Store
Indeed Jobs Scraper - Most Comprehensive

Indeed Jobs Scraper - Most Comprehensive

🔥 ~$0.05/1K jobs 🔥 Extract accurate, structured job data from Indeed. Get ALL page results, not just the first page. 60+ fields per job with pre-parsed salary, verified company profiles, GPS coordinates, and hiring signals. 54 countries. Fast, low cost

Pricing

from $0.04 / 1,000 jobs

Rating

4.3

(6)

Developer

Kai

Kai

Maintained by Community

Actor stats

38

Bookmarked

7.2K

Total users

1.5K

Monthly active users

3.6 hours

Issues response

4 days ago

Last modified

Categories

Share

Scrape Indeed job listings from 62 countries, with up to 190 fields per job: full descriptions, parsed salaries, skills and certifications as structured tags, complete company profiles, and apply links.

Choose from three data depths: basic, detailed, and rich. The deepest one, rich, adds hiring signals that other Indeed scrapers do not collect: reposts, employer responsiveness, hires needed, required and preferred skills, and sponsored jobs.

Starting at $0.04 per 1,000 jobs.

Why this scraper?

This scraperOther Indeed scrapers
Price per 1,000 jobs$0.04$0.07-6
Hiring signals: employer responsiveness, hires needed, required or preferred requirements, resume typeYesOnly a few return any of them
Skill and attribute codes as key and label pairsYesA few, without the hiring signals
Company profile: CEO, revenue, size, industry, and ratingYesMost
Working hours as minimum and maximum hoursYesNone
Employer branding reasonsYesNone
Indeed search expressions: title:, company:, and exclusionsDocumented and testedNot documented
Sponsored placements in search results, with their result positionYesA few return a sponsored flag
The sponsoring employer's ID, also when a sponsored job appears as an organic resultYesNone
Date, job type, and remote filters togetherYesSome
Direct lookupBy job key, for active and expired jobsA few, by job URL

Use cases

Recruiting and staffing leads

Find companies that hire now, with their size, revenue, website, and hiring needs.

{
"keyword": "title:(\"registered nurse\")",
"location": "New York, NY",
"country": "US",
"sort": "date",
"fromDays": "3",
"maxItems": 100,
"searchMode": "rich"
}

Use company.name, company.size, company.revenue, company.urls.website, company.socialLinks, signals.numHires, and apply.url.

Job market research

Compare salaries, skills, benefits, and requirements by role and region.

{
"keyword": "title:(\"data analyst\")",
"location": "New York, NY",
"country": "US",
"maxItems": 500
}

Use salary.min, salary.max, salary.period, classification.skills, benefits, requirements.educationLevel, and requirements.experienceLevel.

Hiring and labor market analytics

Track who hires, how fast they respond, which roles they repost, and how many people they need. Run the same input on an Apify schedule, and compare the results over time.

{
"keyword": "title:(\"software engineer\") -intern",
"location": "Seattle, WA",
"country": "US",
"sort": "date",
"fromDays": "7",
"jobType": "fulltime",
"maxItems": 100,
"searchMode": "rich"
}

Use signals.isRepost, signals.isLatestPost, signals.numHires, signals.employerResponsive, signals.hiringInsights, and dates.onIndeed.

Recruitment advertising intelligence

See which employers pay to promote jobs, for which searches, and at which result positions.

{
"keyword": "nurse",
"location": "New York, NY",
"country": "US",
"maxItems": 100,
"searchMode": "rich"
}

Keep jobs where signals.isSponsored is true. Use signals.sponsoredEmployerKey, meta.scrapingInfo.page, meta.scrapingInfo.index, and company.brandingReasons.

Job boards and aggregators

Publish fresh listings with full descriptions, parsed salaries, addresses, and coordinates.

{
"keyword": "software engineer",
"location": "United States",
"country": "US",
"sort": "date",
"fromDays": "1",
"maxItems": 0
}

Use title.text, description.html, salary.text, location, urls.apply, and dates.onIndeed. dates.onIndeed is the time the job reached Indeed, and fromDays filters on this date.

Job monitoring

Check whether known jobs are still open. Copy the jk value from an Indeed URL, and use it as a job key:

{
"jobKeys": ["5e5dafc2a80c214d"],
"country": "US"
}

signals.isExpired is true when Indeed has closed the listing. Lookups return full job data for active and expired jobs. A lookup ignores the search fields, the filters, and maxItems. searchMode still sets the data depth.

Choose a data depth

ModeFieldsResults per searchSponsored placementsDate, job type, and remote filtersBest for
basic (default)~165Up to 1,000 or moreNot includedA date filter replaces the other twoLarge searches, fastest
detailed~170Up to 1,000 or moreNot includedA date filter replaces the other twoHiring insights at full search size
rich~190Up to about 450IncludedAll three work togetherThe most data per job

Every job includes (basic):

  • Job: title, normalized title, full description as text and HTML, snippet, reference number
  • Links: Indeed job URL, employer job URL, apply URL
  • Classification: job types, occupations, primary occupation, skills, languages, and all Indeed attributes as key and label pairs
  • Salary: salary text, parsed minimum, maximum, or exact amount, currency, period, and extras such as bonuses
  • Benefits: benefit labels, such as health insurance, 401(k), and paid time off
  • Work arrangement: remote flag, shifts, schedules, travel
  • Location: full address, city, state, county, postal code, country, latitude, and longitude
  • Company: name, industry, size, revenue, descriptions, website, logos, ratings and review counts, CEO, social links, and response rate
  • Apply: Easy Apply flag, apply scopes
  • Dates: posted date, date on Indeed, expiry date, age text
  • Signals: expired, urgent hire, and high-volume hiring flags, and the sponsoring employer's ID for sponsored jobs
  • Requirements: experience level, education level, certifications, and other labeled requirements
  • Metadata: source, language, locale, search keyword, search location, result page and position

Detailed adds, when Indeed supplies them:

  • Hiring insights: candidates needed and hiring-event flag
  • Employer-provided attributes and occupations
  • Required documents, remote work type, and job photos

Rich adds everything in detailed, plus:

FieldWhat you getExample value
signals.isRepost, signals.isLatestPostWhether the employer posted this job before, and whether this is the newest posttrue, true
signals.employerResponsiveIndeed marks the employer as responsive to applicantstrue
signals.hiringInsights.employerLastReviewedDays since the employer last reviewed applications"4"
signals.numHiresNumber of people the employer wants to hire3
signals.isSponsoredWhether the job appeared as a paid placement in this search. See sponsored jobstrue
signals.isNewIndeed shows the job as newtrue
signals.hiringTagsHiring tags such as fair-chance hiring["Fair chance"]
requirements.attributesSkills and qualifications, each marked required or preferred{"label": "AWS", "requirementStrength": "preferred"}
requirements.physicalRequirementsPhysical requirements of the job["Ability to lift 50 pounds"]
workArrangement.workingHoursMinimum and maximum hours for each period{"minimumHours": 20, "period": "WEEKLY"}
apply.resumeTypeWhether Indeed Apply needs a resume"required"
locationCountNumber of locations for the same posting4
company.brandingReasons, company.featuredEmployerEmployer branding on Indeed["PAID_BRANDING"]
salary.extracted, salary.snippetIndeed's own salary parse and salary text{"min": 152200, "max": 243700, "type": "YEARLY"}
company.parentEmployerParent company name, key, and Indeed page{"name": "...", "key": "..."}

Rich mode also adds more benefits, job types, shifts, and schedules to the fields that every job includes.

Search options

Match the jobs you mean

Plain keywords use broad matching and can include related roles. Use Indeed search expressions when title or company matching is important.

ExpressionMeaning
"data engineer"Exact phrase in the posting.
title:(data engineer)Both words in the title.
title:("data engineer")Exact phrase in the title.
title:("data engineer" or "data scientist")Either phrase in the title.
nurse -travelInclude nurse and exclude travel.
company:GoogleJobs for the specified company expression.

Indeed supports and, or, not, exclusions, quotes, and parentheses. You can combine them.

Search within a radius

{
"keyword": "software engineer",
"location": "10001",
"country": "US",
"radius": "25",
"radiusUnit": "miles",
"maxItems": 50
}

Set radiusUnit to km for kilometers.

Input reference

FieldTypeDefaultDescription
keywordstringemptyJob title, skill, company expression, or search expression.
locationstringemptyCity, state, postal code, or other location text.
countrystringUSIndeed country site. Allowed codes are listed below.
maxItemsinteger20Maximum jobs to save. Minimum 0. Use 0 for no Actor-set result cap.
radiusstring35Search distance.
radiusUnitstringmilesmiles or km.
sortstringrelevancerelevance or date.
fromDaysstringemptyAny time, or jobs from the last 1, 3, 7, or 14 days.
jobTypestringemptyAny type, fulltime, parttime, contract, temporary, or internship.
remotestringemptyAny arrangement, remote, or hybrid.
jobKeysstring[][]Indeed job keys for direct lookup.
searchModestringbasicbasic, detailed, or rich. See Choose a data depth.
proxyConfigobject{"useApifyProxy":true}Apify connection configuration accepted by the Actor.

Allowed country codes:

US, UK, CA, AU, IN, DE, FR, JP, BR, MX, IT, ES, NL, BE, CH, AT, SG, HK, IE, NZ, AR, BH, CL, CN, CO, CZ, DK, FI, GR, HU, ID, IL, KW, LU, MY, MA, NO, OM, PE, PH, PL, PT, QA, RO, SA, ZA, KR, SE, TW, TR, UA, AE, VE, VN, CR, EC, EG, NG, PA, PK, TH, UY.

Output

Each dataset item is one job. Every documented field is present in every job.

Sample rich job

This redacted rich-mode job is from Visa in Bellevue, WA. Long arrays and maps keep a few items. Square brackets mark values removed from the documentation. It is not a saved Dataset item.

Full field reference

FieldType and contents
idstring. Indeed job key.
refNumstring or null. Source reference number.
titleobject. text is a string; normalized is a string or null.
urlsobject. indeed is a string. external, apply, and clickTracking are strings or null.
descriptionobject. text and html are strings or null.
snippetstring or null.
classificationobject. Contains the classification fields in the rows below.
classification.jobTypestring[].
classification.occupationsobject with dynamic string keys and string labels.
classification.primaryOccupation{key: string, label: string} or null.
classification.occupationMostLikelySuidstring or null.
classification.skills, classification.languagesArray of {key: string, label: string} objects.
classification.attributesobject. all is a dynamic string-to-string map. employerProvided is an array of {key: string, label: string} or null.
classification.employerProvidedOccupationsArray of {key: string, label: string} objects or null.
workArrangementobject. isRemote is boolean. locationType, remoteWorkType, and workSchedule are strings or null. shift, schedule, and travel are string arrays. remoteAttributes and workingSystem are arrays of {key: string, label: string}.
workArrangement.workingHoursobject or null. displayType, period, and source are strings; minimumHours and maximumHours are numbers.
salaryobject. text, minCents, maxCents, exactCents, currency, period, source, and detailed are strings or null. min, max, and exact are numbers or null. estimated is boolean. extras is string[].
salary.extracted{min: number, max: number, type: string} or null.
salary.snippet{currency: string, source: string, text: string} or null.
benefitsstring[].
socialInsuranceobject with dynamic string keys and string labels.
applyobject. url, indeedApplyKey, and resumeType are strings or null; isEasyApply is boolean; scopes is string[]; organicApplyStarts is a number or null.
locationobject. formatted, formattedShort, fullAddress, city, state, stateName, admin2Code, admin2Name, admin3Code, admin3Name, admin4Code, admin4Name, postalCode, streetAddress, country, and countryName are strings or null. latitude and longitude are numbers or null.
locationCountnumber or null.
companyobject. Contains the company fields in the rows below.
company text and list fieldsname, key, sourceName, tier, industry, size, revenue, briefDescription, fullDescription, brandColor, stockSymbol, and phone are strings or null. sectors, customContents, and addresses are string arrays. brandingReasons is string[] or null.
company flagssubsidiaryOptOut and featuredEmployer are booleans or null.
company.urlsobject. website and indeed are strings or null.
company.logosobject. square, rectangular, header, header1960x400, and headerAltText are strings or null. squareSizes is {url64: string, url96: string, url128: string, url256: string} or null.
company.ratingsobject. overall, count, and reviewCount are numbers or null. count is the number of star ratings; reviewCount is the number of written reviews. They often differ.
company.ceo{name: string or null, photoUrl: string or null} or null.
company.socialLinksobject. facebook, twitter, and instagram are strings or null.
company.responsivenessobject or null. averageResponseTimeDays, responseRate, and lastActivityTimeInDays are numbers or null; isActivelyReviewed is boolean or null.
company.parentEmployerobject or null. name and key are strings; indeedUrl is a string or null; subsidiaryOptOut is boolean or null.
photosstring[] or null. Job-level image URLs.
datesobject. posted, onIndeed, validThrough, and age are strings or null; postedToday is boolean.
signalsobject. isExpired, isUrgentHire, and isHighVolumeHiring are booleans. sponsoredEmployerKey is a string or null. isSponsored, isBrandedJob, isRepost, isLatestPost, isPlacement, isNew, employerResponsive, and jobPageExists are booleans or null. applyCount and numHires are numbers or null. hiringTags is string[].
signals.matchScoresArray of {key: string, value: string} objects.
signals.hiringInsightsobject or null. numOfCandidates is a number or null; employerLastReviewed and recurringHireText are strings or null; isHiringEvent is boolean.
requirementsobject. certifications, qualifications, physicalRequirements, eligibility, ageRequirement, and experienceDuration are string arrays. experienceLevel and educationLevel are strings or null.
requirements.attributesArray of {key: string, label: string, provenance: string, requirementStrength: string} objects or null.
requiredDocumentsArray of {key: string, label: string} objects or null.
metaobject. source is a string or null; language, locale, and scrapedAt are strings; workSetting is string[].
meta.feed{isDradis: boolean, sourceType: string or null}.
meta.searchobject. keyword and location are strings or null.
meta.scrapingInfo{page: number, index: number}.

FAQ

How many jobs can I collect?

maxItems is an upper limit, not a required result count. Indeed can return fewer jobs. Set maxItems to 0 to remove the Actor limit. The run then ends when Indeed has no more results. See Choose a data depth for the result range of each mode.

Does rich mode include sponsored jobs?

Yes. Rich mode returns the paid placements in each search, with signals.isSponsored set to true. The flag shows how the job appeared in this search. The same job can be sponsored in one search and organic in another. Use it to track ad placements, or to remove promoted listings.

signals.sponsoredEmployerKey is Indeed's ID for the employer that sponsors the job. It stays on the job in every search and in lookups, also when the job appears as an organic result.

Indeed selects the sponsored placements, so they can fall outside the title expression and the job type filter. They count toward maxItems. To analyze only organic results, keep jobs where signals.isSponsored is false.

Why are some fields empty?

Indeed does not show all fields on every job. Missing values are null, [], or {}, as shown in the field reference. Some rich jobs do not have every rich-mode field. In detailed mode, a job can have only the basic fields when extra detail is unavailable.

Can a job disappear after I collect it?

Yes. Indeed can change or remove listings at any time. Use a lookup to check whether a job is still open.