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

6K

Total users

1.4K

Monthly active users

3.6 hours

Issues response

13 days ago

Last modified

Categories

Share

Indeed Jobs Scraper

Collect Indeed job listings as structured dataset records.

Use it to compare roles and salaries, monitor company hiring, or build a job dataset. You can search Indeed or look up jobs that you already know.

Each job can include its title and description, Indeed and application URLs, occupation and skill labels, work arrangement, salary, benefits, location, company profile, application details, hiring signals, requirements, and source metadata. The available fields depend on the selected data depth and the job.

Search for jobs

Start with a keyword and location

Enter a keyword and location. Select a search mode when you need more than the default basic data.

{
"keyword": "data analyst",
"location": "New York, NY",
"country": "US",
"maxItems": 50,
"sort": "date"
}

Search within a postal-code radius

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

Search in kilometres

{
"keyword": "developer",
"location": "Berlin",
"country": "DE",
"radius": "50",
"radiusUnit": "km"
}

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.

{
"keyword": "title:(\"Senior Data Engineer\") -intern",
"location": "United States",
"maxItems": 100
}
{
"keyword": "company:Google",
"location": "San Francisco, CA",
"maxItems": 100
}

Search expressions can be combined:

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.

Choose the data depth

ModeUse it whenAdded dataAvailable result rangeFilter behaviour
basicYou need essential job data and broad search coverage.Standard job, company, salary, location, and classification fields.Up to 1,000 or more results when Indeed makes them available.A non-empty date filter takes precedence over job type and remote filters.
detailedYou need hiring insights and detailed requirements.Available hiring insights, benefits, and requirements with strength levels.Up to 1,000 or more results when Indeed makes them available.A non-empty date filter takes precedence over job type and remote filters.
richYou need the extra fields from Indeed's rich search route.Available salary details, working hours, application count, employer responsiveness, sponsorship, and branding.Up to approximately 450 results.Date, job-type, and remote filters can be combined.

Use rich to combine the date, job-type, and remote filters:

{
"keyword": "title:(\"Software Engineer\") -intern",
"location": "Austin, TX",
"country": "US",
"maxItems": 100,
"radius": "50",
"radiusUnit": "miles",
"sort": "date",
"fromDays": "7",
"jobType": "fulltime",
"remote": "hybrid",
"searchMode": "rich"
}

Look up known jobs

Copy the jk value from an Indeed URL and use it as a job key:

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

Lookups return full job data for active and expired jobs. Use them to check whether known jobs are still open: signals.isExpired is true when Indeed has closed the listing.

When jobKeys is not empty, search fields are ignored. searchMode still controls the detail request.

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 passed to Indeed.
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. When non-empty, search fields are ignored.
searchModestringbasicbasic, detailed, or rich. See the mode table above.
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.

Complete input reference example

Job output

Each dataset item is one job. A saved full job item is not available here. This sample shows selected values only. Use the field reference for the full output contract.

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}.

Limits

  • When jobKeys is non-empty, lookup mode ignores keyword, location, filters, and maxItems. searchMode still controls whether the Actor fetches additional job details.
  • maxItems: 0 removes the Actor-set cap. The run still ends when Indeed has no more results.
  • Some results do not contain all rich-only fields.
  • Detailed mode can save the standard job record when extra detail is unavailable.
  • Indeed does not show all fields on every job. Missing values use null, empty arrays, or empty maps, as shown in the field reference.
  • Broad keyword matching can include related roles. Use title:(...) when title matching is important.
  • Indeed can change or remove listings, so a result can disappear after collection.