Skip to main content
Job data powers labor-market research, recruiting tools and salary benchmarks. This page covers three jobs: searching a job board, listing every opening a company publishes, and getting each posting’s details in bulk. All of it uses public job pages. Uses: Fetch with Adaptive Stealth Mode (mode=auto), Extract (extract=auto), Crawl, Batch, css_extractor

Ask your AI agent

With the Zenrows MCP server connected to Claude, Cursor or any MCP client, paste this prompt. Your agent picks the right Zenrows tools and settings on its own.

Search Indeed for jobs

Send an Indeed search URL with extract=auto. parsed.job_listings holds one entry per job card, with its title, company, location, pay and job key. extract_fields keeps only the fields you read.

Example output

Pay and job type arrive together in benefits, as Indeed shows them on the card. Omit extract_fields to also get each card’s snippet, detail_url and company_logo_url, plus search_context with the query and location.

List every opening on a company careers page

Many companies publish openings on a hosted job board. Point Crawl at the board and keep only job URLs with include_patterns. This example collects GitLab’s openings from its Greenhouse board:
Python (Requests)
depth: 1 reads the links on the board itself. The crawl fetched one page, so it cost one Fetch request. The same pattern works on any careers page: set include_patterns to the path its job links share.

Get every job’s details with Batch

Send the job URLs to one Batch job and pick the fields with css_extractor. On Greenhouse boards, the title is the h1 and the location is .job__location:
Python (Requests)
Add .job__description to the selectors for the full posting text, or set response_type: "markdown" instead of css_extractor to feed each posting to an LLM.

Customize it

Troubleshooting

  • job_listings is shorter than the page you see: Indeed shows a page of cards per request. Request the next pages with start=10, start=20.
  • REQS004 with an β€œAvailable fields” list: the field names differ on this kind of page. Pick names from the list in the error, or omit extract_fields. See REQS004.
  • The crawl returns no job URLs: the pattern doesn’t match the board’s links. Open the board, copy one job link, and use the path segment it shares with the others.
  • A Batch task comes back empty: that page uses different markup. Open it, adjust the selector, and rerun the failed tasks, see Retry failed requests.

Crawl a website from a start URL

Discover every page behind one start URL.

Scrape a list of URLs

Batch jobs from the API, SDKs and CLI.

Get structured JSON from any page

How extract=auto and prepared domains work.

Detect changes on any page and get alerted

Get alerted when new postings appear.