Nimbryxo Studio

Indeed Global Job Scraper with Company Salary Reports

Search Indeed jobs across 62 countries by keyword, location, or filters for job type, remote status, experience, education, and salary. Returns full descriptions, structured salaries, and each employer's ratings and salary-by-title reports.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
positionstringoptionalJob title, skill or keywords, e.g. `web developer`, `nurse`. Search one company's jobs with `company:Amazon`, titles only with `title:(data analyst)`; quotes, OR and -exclusions work too.
locationstringoptionalCity, region or postal code, e.g. `San Francisco`, `Austin, TX`, `10001`, `London`. Leave empty to search the whole country.
companystringoptionalOnly jobs from one employer, e.g. `Amazon`, `Visa`, `DocuSign`. The name is resolved to Indeed's employer key so the company filter is applied by Indeed itself, then verified per job.
Show all input fields
FieldTypeRequiredDescription
positionstringoptionalJob title, skill or keywords, e.g. `web developer`, `nurse`. Search one company's jobs with `company:Amazon`, titles only with `title:(data analyst)`; quotes, OR and -exclusions work too.
locationstringoptionalCity, region or postal code, e.g. `San Francisco`, `Austin, TX`, `10001`, `London`. Leave empty to search the whole country.
companystringoptionalOnly jobs from one employer, e.g. `Amazon`, `Visa`, `DocuSign`. The name is resolved to Indeed's employer key so the company filter is applied by Indeed itself, then verified per job.
locationShardsarrayoptionalOptional list of extra locations to search separately with the same keywords and filters, e.g. `New York, NY`, `Chicago, IL`, `Remote`. Deduplication removes jobs found by more than one shard. This is the reliable way past the roughly 1,000-row cursor ceiling.
countrystringoptionalIndeed country site to search. Results come in the site's language and salaries in its currency.
maxItemsPerSearchintegeroptionalMaximum number of jobs to save for each search (the keyword search and each search URL). Indeed's cursor stops at roughly 1,000 fetched rows, including duplicates; use `locationShards` or more search URLs to collect more.
maxItemsintegeroptionalOptional hard cap across every search and pasted job URL. The run stops as soon as this many jobs are saved. Leave empty for no global cap.
shardByDatebooleanoptionalRun each keyword search five times, for the last 1, 3, 7, 14 and 30 days, and remove duplicates. Useful for freshness coverage when you need more than one cursor walk per search.
jobTypestringoptionalEmployment type.
workplaceTypestringoptionalWhere the work happens.
datePostedstringoptionalOnly jobs added to Indeed within this period.
experienceLevelstringoptionalRequired experience level.
educationLevelstringoptionalRequired education.
salaryMinintegeroptionalOnly jobs whose salary range reaches at least this yearly amount, in the country's currency (hourly and monthly pay is converted to yearly). Jobs without any salary information are excluded.
easyApplyOnlybooleanoptionalOnly jobs you can apply to directly on Indeed.
radiusintegeroptionalDistance around the location (Indeed's default is 25). Ignored without a location.
radiusUnitstringoptionalUnit of the search radius.
sortstringoptionalOrder of the search results.
startUrlsarrayoptionalIndeed search result URLs (any country, with their filters), job URLs (`…/viewjob?jk=…`) or job IDs. Each search URL is scraped as its own search; job URLs are fetched directly. Filters chosen above are added to search URLs.
includeCompanyRatingsbooleanoptionalAdd the employer's HTML company report: CEO approval, founding year, work wellbeing scores and average salaries by job title, plus an industry fallback. Ratings, review count and the five category ratings are always included from Indeed's app API at no extra request; this toggle adds the fields that require one company-page fetch per employer. Turn off for the fastest, cheapest runs.
includeSponsoredbooleanoptionalAdd `isSponsored` from Indeed's mobile search page for jobs that also appear there. This costs one extra lightweight page per search and is best effort: jobs outside the first mobile result page keep the field omitted rather than guessed.
includeDescriptionHtmlbooleanoptionalAlso save the job description as HTML (`descriptionHtml`) with its formatting. The plain-text `description` is always included.
saveOnlyUniqueItemsbooleanoptionalSave each job once even when several searches find it. Jobs are always unique within one search.

Download the published input schema

View complete JSON
{
  "description": "Search Indeed jobs by keywords, location and company in 62 countries, or paste Indeed search, company and job URLs. Every job comes with its full description, salary, job types, benefits, coordinates, contacts and the employer's ratings and salary report.",
  "properties": {
    "company": {
      "description": "Only jobs from one employer, e.g. `Amazon`, `Visa`, `DocuSign`. The name is resolved to Indeed's employer key so the company filter is applied by Indeed itself, then verified per job.",
      "editor": "textfield",
      "title": "Company",
      "type": "string"
    },
    "country": {
      "default": "US",
      "description": "Indeed country site to search. Results come in the site's language and salaries in its currency.",
      "editor": "select",
      "enum": [
        "US",
        "AR",
        "AU",
        "AT",
        "BH",
        "BE",
        "BR",
        "CA",
        "CL",
        "CN",
        "CO",
        "CR",
        "CZ",
        "DK",
        "EC",
        "EG",
        "FI",
        "FR",
        "DE",
        "GR",
        "HK",
        "HU",
        "IN",
        "ID",
        "IE",
        "IL",
        "IT",
        "JP",
        "KW",
        "LU",
        "MY",
        "MX",
        "MA",
        "NL",
        "NZ",
        "NG",
        "NO",
        "OM",
        "PK",
        "PA",
        "PE",
        "PH",
        "PL",
        "PT",
        "QA",
        "RO",
        "SA",
        "SG",
        "ZA",
        "KR",
        "ES",
        "SE",
        "CH",
        "TW",
        "TH",
        "TR",
        "UA",
        "AE",
        "GB",
        "UY",
        "VE",
        "VN"
      ],
      "enumTitles": [
        "United States",
        "Argentina",
        "Australia",
        "Austria",
        "Bahrain",
        "Belgium",
        "Brazil",
        "Canada",
        "Chile",
        "China",
        "Colombia",
        "Costa Rica",
        "Czech Republic",
        "Denmark",
        "Ecuador",
        "Egypt",
        "Finland",
        "France",
        "Germany",
        "Greece",
        "Hong Kong",
        "Hungary",
        "India",
        "Indonesia",
        "Ireland",
        "Israel",
        "Italy",
        "Japan",
        "Kuwait",
        "Luxembourg",
        "Malaysia",
        "Mexico",
        "Morocco",
        "Netherlands",
        "New Zealand",
        "Nigeria",
        "Norway",
        "Oman",
        "Pakistan",
        "Panama",
        "Peru",
        "Philippines",
        "Poland",
        "Portugal",
        "Qatar",
        "Romania",
        "Saudi Arabia",
        "Singapore",
        "South Africa",
        "South Korea",
        "Spain",
        "Sweden",
        "Switzerland",
        "Taiwan",
        "Thailand",
        "Turkey",
        "Ukraine",
        "United Arab Emirates",
        "United Kingdom",
        "Uruguay",
        "Venezuela",
        "Vietnam"
      ],
      "prefill": "US",
      "title": "Country",
      "type": "string"
    },
    "datePosted": {
      "default": "",
      "description": "Only jobs added to Indeed within this period.",
      "editor": "select",
      "enum": [
        "",
        "1",
        "3",
        "7",
        "14",
        "30"
      ],
      "enumTitles": [
        "Any time",
        "Last 24 hours",
        "Last 3 days",
        "Last 7 days",
        "Last 14 days",
        "Last 30 days"
      ],
      "title": "Date posted",
      "type": "string"
    },
    "easyApplyOnly": {
      "default": false,
      "description": "Only jobs you can apply to directly on Indeed.",
      "prefill": false,
      "title": "Easy apply only",
      "type": "boolean"
    },
    "educationLevel": {
      "default": "",
      "description": "Required education.",
      "editor": "select",
      "enum": [
        "",
        "noDegree",
        "highSchool",
        "associate",
        "bachelor",
        "master",
        "doctoral"
      ],
      "enumTitles": [
        "Any",
        "No degree required",
        "High school diploma or GED",
        "Associate degree",
        "Bachelor's degree",
        "Master's degree",
        "Doctoral degree"
      ],
      "title": "Education level",
      "type": "string"
    },
    "experienceLevel": {
      "default": "",
      "description": "Required experience level.",
      "editor": "select",
      "enum": [
        "",
        "noExperience",
        "entry",
        "mid",
        "senior"
      ],
      "enumTitles": [
        "Any",
        "No experience needed",
        "Entry level",
        "Mid level",
        "Senior level"
      ],
      "title": "Experience level",
      "type": "string"
    },
    "includeCompanyRatings": {
      "default": true,
      "description": "Add the employer's HTML company report: CEO approval, founding year, work wellbeing scores and average salaries by job title, plus an industry fallback. Ratings, review count and the five category ratings are always included from Indeed's app API at no extra request; this toggle adds the fields that require one company-page fetch per employer. Turn off for the fastest, cheapest runs.",
      "prefill": false,
      "sectionCaption": "Output",
      "title": "Include full company report",
      "type": "boolean"
    },
    "includeDescriptionHtml": {
      "default": false,
      "description": "Also save the job description as HTML (`descriptionHtml`) with its formatting. The plain-text `description` is always included.",
      "prefill": false,
      "title": "Include description HTML",
      "type": "boolean"
    },
    "includeSponsored": {
      "default": true,
      "description": "Add `isSponsored` from Indeed's mobile search page for jobs that also appear there. This costs one extra lightweight page per search and is best effort: jobs outside the first mobile result page keep the field omitted rather than guessed.",
      "prefill": false,
      "title": "Include sponsored flag",
      "type": "boolean"
    },
    "jobType": {
      "default": "",
      "description": "Employment type.",
      "editor": "select",
      "enum": [
        "",
        "fulltime",
        "parttime",
        "contract",
        "temporary",
        "internship",
        "permanent",
        "seasonal",
        "perdiem",
        "freelance",
        "apprenticeship",
        "volunteer"
      ],
      "enumTitles": [
        "Any",
        "Full-time",
        "Part-time",
        "Contract",
        "Temporary",
        "Internship",
        "Permanent",
        "Seasonal",
        "Per diem",
        "Freelance",
        "Apprenticeship",
        "Volunteer"
      ],
      "sectionCaption": "Filters",
      "sectionDescription": "Indeed's own search filters. Every job returned matches all selected filters.",
      "title": "Job type",
      "type": "string"
    },
    "location": {
      "description": "City, region or postal code, e.g. `San Francisco`, `Austin, TX`, `10001`, `London`. Leave empty to search the whole country.",
      "editor": "textfield",
      "prefill": "San Francisco",
      "title": "Location",
      "type": "string"
    },
    "locationShards": {
      "description": "Optional list of extra locations to search separately with the same keywords and filters, e.g. `New York, NY`, `Chicago, IL`, `Remote`. Deduplication removes jobs found by more than one shard. This is the reliable way past the roughly 1,000-row cursor ceiling.",
      "editor": "stringList",
      "title": "City or region shards",
      "type": "array"
    },
    "maxItems": {
      "description": "Optional hard cap across every search and pasted job URL. The run stops as soon as this many jobs are saved. Leave empty for no global cap.",
      "maximum": 10000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max jobs for the whole run",
      "type": "integer"
    },
    "maxItemsPerSearch": {
      "default": 100,
      "description": "Maximum number of jobs to save for each search (the keyword search and each search URL). Indeed's cursor stops at roughly 1,000 fetched rows, including duplicates; use `locationShards` or more search URLs to collect more.",
      "maximum": 10000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max jobs per search",
      "type": "integer"
    },
    "position": {
      "description": "Job title, skill or keywords, e.g. `web developer`, `nurse`. Search one company's jobs with `company:Amazon`, titles only with `title:(data analyst)`; quotes, OR and -exclusions work too.",
      "editor": "textfield",
      "prefill": "web developer",
      "title": "Position or keywords",
      "type": "string"
    },
    "radius": {
      "description": "Distance around the location (Indeed's default is 25). Ignored without a location.",
      "maximum": 500,
      "minimum": 0,
      "title": "Search radius",
      "type": "integer"
    },
    "radiusUnit": {
      "default": "miles",
      "description": "Unit of the search radius.",
      "editor": "select",
      "enum": [
        "miles",
        "kilometers"
      ],
      "enumTitles": [
        "Miles",
        "Kilometers"
      ],
      "title": "Radius unit",
      "type": "string"
    },
    "salaryMin": {
      "description": "Only jobs whose salary range reaches at least this yearly amount, in the country's currency (hourly and monthly pay is converted to yearly). Jobs without any salary information are excluded.",
      "maximum": 10000000,
      "minimum": 0,
      "title": "Minimum yearly salary",
      "type": "integer"
    },
    "saveOnlyUniqueItems": {
      "default": true,
      "description": "Save each job once even when several searches find it. Jobs are always unique within one search.",
      "prefill": true,
      "title": "Remove duplicates across searches",
      "type": "boolean"
    },
    "shardByDate": {
      "default": false,
      "description": "Run each keyword search five times, for the last 1, 3, 7, 14 and 30 days, and remove duplicates. Useful for freshness coverage when you need more than one cursor walk per search.",
      "prefill": false,
      "title": "Split by date window",
      "type": "boolean"
    },
    "sort": {
      "default": "relevance",
      "description": "Order of the search results.",
      "editor": "select",
      "enum": [
        "relevance",
        "date"
      ],
      "enumTitles": [
        "Relevance",
        "Date (newest first)"
      ],
      "title": "Sort by",
      "type": "string"
    },
    "startUrls": {
      "description": "Indeed search result URLs (any country, with their filters), job URLs (`…/viewjob?jk=…`) or job IDs. Each search URL is scraped as its own search; job URLs are fetched directly. Filters chosen above are added to search URLs.",
      "editor": "stringList",
      "sectionCaption": "Indeed URLs",
      "title": "Indeed URLs",
      "type": "array"
    },
    "workplaceType": {
      "default": "",
      "description": "Where the work happens.",
      "editor": "select",
      "enum": [
        "",
        "remote",
        "hybrid",
        "inPerson"
      ],
      "enumTitles": [
        "Any",
        "Remote",
        "Hybrid",
        "In-person"
      ],
      "title": "Remote / hybrid / in-person",
      "type": "string"
    }
  },
  "schemaVersion": 1,
  "title": "Indeed Jobs Scraper",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
jobsstringoptionalJobs
salariesstringoptionalSalaries
companiesstringoptionalCompanies
locationsstringoptionalLocations
contactsstringoptionalContacts

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "One record per Indeed job listing, with title signals, normalized salary, location, benefits, contacts, coverage counts, and the employer's rating and salary-by-title report.",
  "properties": {
    "companies": {
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=companies",
      "title": "Companies",
      "type": "string"
    },
    "contacts": {
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=contacts",
      "title": "Contacts",
      "type": "string"
    },
    "jobs": {
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Jobs",
      "type": "string"
    },
    "locations": {
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=locations",
      "title": "Locations",
      "type": "string"
    },
    "salaries": {
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=salaries",
      "title": "Salaries",
      "type": "string"
    }
  },
  "title": "Indeed Global Job Scraper with Company Salary Reports Output",
  "type": "object"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "title": "Indeed jobs",
  "views": {
    "companies": {
      "display": {
        "component": "table",
        "properties": {
          "company": {
            "format": "text",
            "label": "Company"
          },
          "companyCeoApproval": {
            "format": "number",
            "label": "CEO approval %"
          },
          "companyFounded": {
            "format": "number",
            "label": "Founded"
          },
          "companyHeadquarters": {
            "format": "text",
            "label": "Headquarters"
          },
          "companyIndustry": {
            "format": "text",
            "label": "Industry"
          },
          "companyRevenue": {
            "format": "text",
            "label": "Revenue"
          },
          "companySize": {
            "format": "text",
            "label": "Employees"
          },
          "companyUrl": {
            "format": "link",
            "label": "Indeed company page"
          },
          "companyWebsite": {
            "format": "link",
            "label": "Website"
          },
          "rating": {
            "format": "number",
            "label": "Rating"
          },
          "reviewsCount": {
            "format": "number",
            "label": "Reviews"
          }
        }
      },
      "title": "Companies",
      "transformation": {
        "fields": [
          "company",
          "rating",
          "reviewsCount",
          "companyCeoApproval",
          "companyIndustry",
          "companySize",
          "companyRevenue",
          "companyFounded",
          "companyHeadquarters",
          "companyWebsite",
          "companyUrl"
        ]
      }
    },
    "contacts": {
      "display": {
        "component": "table",
        "properties": {
          "company": {
            "format": "text",
            "label": "Company"
          },
          "companyWebsite": {
            "format": "link",
            "label": "Company website"
          },
          "emails": {
            "format": "array",
            "label": "Emails"
          },
          "externalApplyLink": {
            "format": "link",
            "label": "Apply link"
          },
          "location": {
            "format": "text",
            "label": "Location"
          },
          "phoneNumbers": {
            "format": "array",
            "label": "Phone numbers"
          },
          "positionName": {
            "format": "text",
            "label": "Job title"
          },
          "url": {
            "format": "link",
            "label": "Indeed link"
          }
        }
      },
      "title": "Contacts",
      "transformation": {
        "fields": [
          "positionName",
          "company",
          "emails",
          "phoneNumbers",
          "externalApplyLink",
          "companyWebsite",
          "location",
          "url"
        ]
      }
    },
    "locations": {
      "display": {
        "component": "table",
        "properties": {
          "city": {
            "format": "text",
            "label": "City"
          },
          "company": {
            "format": "text",
            "label": "Company"
          },
          "countryCode": {
            "format": "text",
            "label": "Country"
          },
          "latitude": {
            "format": "number",
            "label": "Latitude"
          },
          "longitude": {
            "format": "number",
            "label": "Longitude"
          },
          "positionName": {
            "format": "text",
            "label": "Job title"
          },
          "postalCode": {
            "format": "text",
            "label": "Postal code"
          },
          "remoteWorkType": {
            "format": "text",
            "label": "Workplace"
          },
          "state": {
            "format": "text",
            "label": "State/region"
          },
          "streetAddress": {
            "format": "text",
            "label": "Street"
          }
        }
      },
      "title": "Locations",
      "transformation": {
        "fields": [
          "positionName",
          "company",
          "streetAddress",
          "city",
          "state",
          "postalCode",
          "countryCode",
          "latitude",
          "longitude",
          "remoteWorkType"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "company": {
            "format": "text",
            "label": "Company"
          },
          "displayTitle": {
            "format": "text",
            "label": "Display title"
          },
          "easyApply": {
            "format": "boolean",
            "label": "Easy apply"
          },
          "isRepost": {
            "format": "boolean",
            "label": "Repost"
          },
          "isSponsored": {
            "format": "boolean",
            "label": "Sponsored"
          },
          "jobType": {
            "format": "text",
            "label": "Job type"
          },
          "location": {
            "format": "text",
            "label": "Location"
          },
          "positionName": {
            "format": "text",
            "label": "Job title"
          },
          "postedAt": {
            "format": "text",
            "label": "Posted"
          },
          "rating": {
            "format": "number",
            "label": "Company rating"
          },
          "remoteWorkType": {
            "format": "text",
            "label": "Workplace"
          },
          "salary": {
            "format": "text",
            "label": "Salary"
          },
          "searchFacetTotal": {
            "format": "number",
            "label": "Reported total"
          },
          "searchRetrieved": {
            "format": "number",
            "label": "Retrieved"
          },
          "url": {
            "format": "link",
            "label": "Indeed link"
          }
        }
      },
      "title": "Jobs",
      "transformation": {
        "fields": [
          "positionName",
          "displayTitle",
          "company",
          "rating",
          "location",
          "salary",
          "jobType",
          "remoteWorkType",
          "postedAt",
          "isRepost",
          "isSponsored",
          "easyApply",
          "searchFacetTotal",
          "searchRetrieved",
          "url"
        ]
      }
    },
    "salaries": {
      "display": {
        "component": "table",
        "properties": {
          "company": {
            "format": "text",
            "label": "Company"
          },
          "location": {
            "format": "text",
            "label": "Location"
          },
          "payTypes": {
            "format": "array",
            "label": "Pay"
          },
          "positionName": {
            "format": "text",
            "label": "Job title"
          },
          "salaryAnnualMax": {
            "format": "number",
            "label": "Annual max"
          },
          "salaryAnnualMin": {
            "format": "number",
            "label": "Annual min"
          },
          "salaryCurrency": {
            "format": "text",
            "label": "Currency"
          },
          "salaryMax": {
            "format": "number",
            "label": "Max"
          },
          "salaryMin": {
            "format": "number",
            "label": "Min"
          },
          "salaryPeriod": {
            "format": "text",
            "label": "Period"
          },
          "salarySource": {
            "format": "text",
            "label": "Source"
          },
          "url": {
            "format": "link",
            "label": "Indeed link"
          }
        }
      },
      "title": "Salaries",
      "transformation": {
        "fields": [
          "positionName",
          "company",
          "location",
          "salaryMin",
          "salaryMax",
          "salaryPeriod",
          "salaryCurrency",
          "salarySource",
          "salaryAnnualMin",
          "salaryAnnualMax",
          "payTypes",
          "url"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Indeed Global Job Scraper with Company Salary Reports

Scrape Indeed jobs from 62 country sites by keyword, location, company and Indeed's own filters. Every row includes the full description, normalized salary, location with coordinates, benefits, recruiter contacts, freshness signals and the employer's Indeed rating report — with no Indeed account, login, cookies or proxy setup.

What this actor does

  • Search, URLs and filters: search by position, location and company, or paste Indeed search URLs, company job pages, job URLs and bare job IDs; apply date, salary, job type, workplace, easy apply, experience, education, radius and sort, with every result re-checked before saving
  • Salary that compares: hourly, daily, weekly and monthly pay is converted to a yearly figure, with the original text, currency, period and source kept
  • Company report in the same row: app-API ratings (overall, five category ratings, review count) always; optional HTML report adds CEO approval, founding year, wellbeing scores, industry fallback and average pay by job title
  • Freshness and coverage signals: displayTitle, refNum, isRepost, isLatestPost, isSponsored and retrieved-vs-reported counts so a short run is visible instead of silent
  • Empty fields are omitted: a value Indeed does not have for a job is left out of that row, never replaced with null or a guess

Output per job

Group Fields
Job id, positionName, displayTitle, normalizedTitle, refNum, url, description, descriptionHtml (when includeDescriptionHtml is on), jobType, jobTypes, remoteWorkType, experienceLevel, educationLevels, workSchedule (rare), occupations, attributes, language, source, sourceEmployerName
Salary salary (as shown on Indeed), salaryMin, salaryMax, salaryPeriod, salaryCurrency, salaryAnnualMin, salaryAnnualMax, salarySource, payTypes
Benefits & schedule benefits, schedules
Location location, streetAddress, neighborhood, city, county, state, stateName, postalCode, countryCode, countryName, latitude, longitude
Dates & freshness postedAt, postingDateParsed, datePostedISO, datePublishedISO, isRepost, isLatestPost, isExpired, validThrough (rare)
Applying & signals easyApply, externalApplyLink, isSponsored, emails, phoneNumbers (international format), urgentlyHiring, highVolumeHiring
Coverage searchFacetTotal (Indeed-reported upper bound), searchRetrieved (unique jobs retrieved by that search when the row was saved; the last row carries the final run count), searchCoverage (retrieved ÷ reported)
Company ratings (always, when the employer has reviews) rating, reviewsCount, companyRatings (work-life balance, compensation and benefits, job security and advancement, management, culture)
Company report (when includeCompanyRatings is on) companyCeoApproval, companyFounded, companySalaries (average pay by title with category, period and reported-salary count), companyWorkWellbeing (happiness, purpose, satisfaction, stress-free and more 0–100 scores)
Company company, companyId, companyUrl, companyLogo, companySize, companyRevenue, companyIndustry, companyWebsite, companyDescription, companyCeo, companyHeadquarters, companyInfo (addresses, stock symbol, social links and more)
Context searchQuery, searchLocation, searchCompany, country, scrapedAt

If a pasted job URL can no longer be loaded from Indeed's job API or the mobile fallback, the run saves a truthful error row with recordType: "error", jobKey, error, country and scrapedAt instead of a fabricated job.

Fields Indeed does not return

The app API does not expose estimatedSalary/estimated, detailedSalary, expiry or isPlacement for this key, so they are omitted rather than guessed. expirationDate is not output separately; it is normalized to validThrough only when present. workSchedule is rare free text (not a structured object); both rare fields are copied when present and left out otherwise.

Sample output row

{
  "id": "6b86092e2a95d2c2",
  "positionName": "Sr. Machine Learning Engineer",
  "displayTitle": "Senior Machine Learning Engineer",
  "refNum": "2605",
  "company": "DocuSign",
  "url": "https://www.indeed.com/viewjob?jk=6b86092e2a95d2c2",
  "city": "Seattle",
  "state": "WA",
  "salary": "$178,900 - $262,825 a year",
  "salaryAnnualMin": 178900,
  "salaryAnnualMax": 262825,
  "salaryCurrency": "USD",
  "salaryPeriod": "YEARLY",
  "salarySource": "EMPLOYER",
  "jobTypes": ["Permanent", "Full-time"],
  "remoteWorkType": "Hybrid",
  "isRepost": false,
  "isLatestPost": true,
  "benefits": ["Paid parental leave", "Health insurance", "Paid time off"],
  "rating": 3.5,
  "reviewsCount": 139,
  "companyRatings": {
    "workLifeBalance": 3.8,
    "compensationAndBenefits": 4.0,
    "jobSecurityAndAdvancement": 3.1,
    "management": 3.1,
    "culture": 3.5
  },
  "companySalaries": [
    { "title": "Software Engineer", "salary": "$170,461", "amount": 170461, "period": "YEARLY", "reportedSalaries": 17 }
  ],
  "searchFacetTotal": 9615,
  "searchRetrieved": 808,
  "searchCoverage": 0.084,
  "scrapedAt": "2026-10-08T06:59:29Z"
}

Input

Field Type Default Description
position string – Job title, skill or keywords. Supports company:Name, title:(…), quotes, OR and -exclusions
location string – City, region or postal code; leave empty to search the whole country. remote (or anywhere, work from home) becomes the remote workplace filter
company string – Only jobs from one employer. The name is resolved to Indeed's employer key and verified per job
locationShards array – Extra city/region searches with the same keywords and filters. Deduplicated; the reliable way past the per-search ceiling
country string US Indeed country site to search (62 countries)
maxItemsPerSearch integer 100 Max jobs saved per search, i.e. the keyword search and each search URL
maxItems integer – Optional hard cap for the whole run, across every search and pasted job URL
shardByDate boolean false Run each keyword search for the last 1, 3, 7, 14 and 30 days and deduplicate
jobType string "" (any) fulltime, parttime, contract, temporary, internship, permanent, seasonal, perdiem, freelance, apprenticeship, volunteer
workplaceType string "" (any) remote, hybrid or inPerson
datePosted string "" (any time) 1, 3, 7, 14 or 30 days
experienceLevel string "" (any) noExperience, entry, mid or senior
educationLevel string "" (any) noDegree, highSchool, associate, bachelor, master or doctoral
salaryMin integer – Minimum yearly salary in the country's currency; jobs with no salary are excluded when set
easyApplyOnly boolean false Only jobs you can apply to directly on Indeed
radius integer – Search radius around location (Indeed's own default is 25); ignored without a location
radiusUnit string miles miles or kilometers
sort string relevance relevance or date (newest first)
startUrls array – Indeed search URLs, company job pages (/cmp/Name/jobs), job URLs or job IDs. The filters above are added to search URLs that do not set their own
includeCompanyRatings boolean true Add the HTML company report: CEO approval, founded, wellbeing, salary by title and industry fallback. Core ratings are always included
includeSponsored boolean true Add isSponsored from Indeed's mobile results page where the job appears
includeDescriptionHtml boolean false Also save descriptionHtml; the plain-text description is always included
saveOnlyUniqueItems boolean true Save each job once even when several searches find it

Date, salary, job type, workplace, easy apply and company filters are applied natively by Indeed's search API. Salary, date, job type, workplace, easy apply and company are then re-checked on each job, so a loose native match is not saved as a false positive. Indeed's easy-apply filter changes the result set but not the reported facet total.

Example: remote full-time data analyst jobs from the last week

{
  "position": "data analyst",
  "country": "US",
  "workplaceType": "remote",
  "jobType": "fulltime",
  "datePosted": "7",
  "maxItemsPerSearch": 200
}

Example: senior engineering jobs paying at least $150,000 in Seattle

{
  "position": "software engineer",
  "location": "Seattle, WA",
  "experienceLevel": "senior",
  "salaryMin": 150000,
  "maxItemsPerSearch": 500,
  "maxItems": 1000
}

Example: all current Visa jobs with the full company report

{
  "company": "Visa",
  "country": "US",
  "datePosted": "14",
  "maxItemsPerSearch": 100,
  "includeCompanyRatings": true
}

Example: several city shards plus one specific job

{
  "position": "electrician",
  "locationShards": ["Denver, CO", "Boulder, CO", "Colorado Springs, CO"],
  "startUrls": ["https://www.indeed.com/viewjob?jk=6b86092e2a95d2c2"],
  "maxItemsPerSearch": 300
}

Use cases

  • Job market and salary research — compare pay by title, city and country with yearly-normalized salary fields and employer salary reports
  • Recruiter and staffing lead generation — find companies hiring now, with size, revenue, industry and contact details written in the posting
  • Employer reputation research — compare employers by Indeed rating, review count, category ratings and CEO approval
  • Job board aggregation — pull deduplicated listings with full descriptions and apply links
  • Competitor hiring intelligence — track the roles one employer opens with company, or paste their company jobs page
  • Remote-work, benefits and freshness analysis — measure remote share, benefits, reposts and sponsored placements by role or region

FAQ

How many jobs can I get from one search? Indeed's cursor returns roughly 1,000 fetched rows and then stops, including duplicates; the unique yield is usually lower. maxItemsPerSearch is a save cap, not a promise that Indeed has that many reachable rows. To go deeper, add locationShards or separate search URLs and keep deduplication on. The run reports searchFacetTotal, searchRetrieved and searchCoverage; the facet number is an upper bound, not the reachable count.

Why is searchFacetTotal much larger than what I received? It is Indeed's own count for the search, and its API exposes only the first cursor window of that set. A search reporting 100,000 matches may still return only a few hundred unique jobs. The actor states this in the run status instead of presenting the facet count as delivered data. Per-row coverage is a save-time snapshot, except the last row of each search, which carries the final retrieved count and coverage.

Why do some jobs have no salary? Many employers do not publish pay on Indeed. Salary fields appear only when the employer publishes them, and coverage varies by country: the United States and United Kingdom are usually well covered, Germany much less. salaryAnnualMin and salaryAnnualMax convert hourly, daily, weekly and monthly pay to a yearly figure. Indeed's own estimated salary is not returned because the app API does not populate it.

How does the minimum salary filter work? Indeed filters natively on the annual salary field, but it also keeps jobs with no salary at all. The actor then re-checks every job and keeps only those whose published range reaches your minimum. Jobs without salary data are excluded when salaryMin is set.

How do I get all jobs from one company? Use the company input, or search company:CompanyName as the position, or paste the company's Indeed jobs page URL. The actor resolves the company name to Indeed's employer key so the filter is native, then verifies the employer on each saved job.

Does it extract contact details? Emails and phone numbers that the employer wrote directly into the job description are saved in emails and phoneNumbers (international format). Most employers ask candidates to apply through Indeed or their careers site, so only a minority of jobs contain contact details this way.

Which countries are supported? 62 Indeed sites, including the United States, United Kingdom, Canada, Australia, India, Germany, France, Japan, Brazil and Mexico. Results come back in the local language with salaries in the local currency, and the locale is pinned to the job's country so salary data is not dropped.

Why is isSponsored missing on some rows? Sponsored placement is not part of Indeed's app job API. The actor reads it from the mobile results page, where about 47 jobs are visible per request; a job outside that window keeps the field omitted rather than guessed. Turn includeSponsored off for the cheapest run.

What happens if a pasted job URL is expired or removed? The actor first retries the job API, then tries Indeed's mobile job page. If both fail, it saves an error row (recordType: "error") with the job key, URL and reason, so the dataset tells you what happened instead of silently dropping the URL.

Is this affiliated with Indeed? No. This is an independent, third-party actor that reads publicly available job listings. It is not operated by or affiliated with Indeed.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build lqQyrji8BaXSFlXeb. Documentation is regenerated from the default published build; private drafts are not included.