ZipRecruiter Jobs & Salary Scraper avatar

ZipRecruiter Jobs & Salary Scraper

Pricing

from $0.37 / 1,000 job with descriptions

Go to Apify Store
ZipRecruiter Jobs & Salary Scraper

ZipRecruiter Jobs & Salary Scraper

Scrape ZipRecruiter job listings by keyword and location, or from any search URL. Get job title, company, location, salary, employment type, posting date and the full job description. Every detail page is opened, and incomplete rows are flagged instead of silently returned empty.

Pricing

from $0.37 / 1,000 job with descriptions

Rating

5.0

(1)

Developer

rainminer

rainminer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

ZipRecruiter Jobs Scraper

ZipRecruiter

The ZipRecruiter Jobs Scraper extracts job listings from ZipRecruiter search result pages. Search by keyword and location or paste any ZipRecruiter search URL, then export structured job data — titles, companies, locations, salaries, posting dates, and the complete job description — to JSON, CSV, Excel, or via the Apify API.

Use it for job-market research, recruiting intelligence, salary benchmarking, aggregator feeds, or building a jobs dataset.

Why this scraper?

ZipRecruiter is protected by Cloudflare, and many scrapers succeed on the search page but return empty descriptions when the detail page is blocked — while still charging you for those broken rows. This Actor is built around a completeness guarantee:

  • Every job's detail page is opened to extract the full description.
  • If a description cannot be fetched, the row is still returned but clearly flagged with descriptionFetchFailed: true.
  • You are only charged for complete records (jobs that include a real description). Flagged, partial rows are never billed.

What can the ZipRecruiter Jobs Scraper do?

  • Scrape jobs from any ZipRecruiter search URL (keyword + location, filters, etc.).
  • Follow pagination automatically until your maxItems limit is reached (per start URL).
  • Extract the full job description from each listing's detail page.
  • Parse salary ranges, employment type, posting date, and remote status when available.
  • Flag incomplete records instead of silently returning empty descriptions.
  • Run on a schedule with Apify dataset exports, API access, webhooks, and proxy configuration.

How to use it

Enter a search keyword and optional location/filters, or paste existing ZipRecruiter search URLs into startUrls. When startUrls is provided, it takes precedence and all filters already present in those URLs are preserved.

Input

FieldTypeDescription
startUrlsstring[]ZipRecruiter search URLs; takes precedence over keyword fields.
searchstringKeyword, title, skill, or company.
locationstringCity, state, or ZIP code.
jobTypestringany, full_time, part_time, contract, internship, or temporary.
daysPostedintegerPosted within N days; 0 means any date.
radiusMilesintegerSearch radius; 0 uses ZipRecruiter's default.
remoteOnlybooleanRestrict keyword searches to remote-eligible jobs.
maxItemsintegerMaximum jobs to return per start URL (default 50).
fetchFullDescriptionbooleanExtended option: fetch full descriptions (default true).
proxyConfigurationobjectUS residential proxy settings (the compatible default).

Input example

{
"search": "software engineer",
"location": "Austin, TX",
"jobType": "full_time",
"daysPosted": 7,
"radiusMiles": 25,
"remoteOnly": false,
"maxItems": 25,
"fetchFullDescription": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Output

FieldDescription
typePro-compatible row type: job_ziprecruiter
idZipRecruiter card-level job identifier
jidJob ID parsed from the jid URL parameter
titleJob title
companyHiring company name
companyUrl / companyLogoCompany profile and logo URLs when available
locationJob location (city, region, country)
city / stateParsed city and two-letter state
isRemotetrue when the job is remote/telecommute, otherwise null
isHybridtrue when the location is hybrid, otherwise null
employmentTypeEmployment type (e.g. FULL_TIME) when available
salaryHuman-readable salary string when available
salaryMin / salaryMaxParsed salary bounds when available
salaryCurrency / salaryPeriodSalary currency and period (e.g. USD, year)
datePostedPosting date (ISO 8601)
validThroughApplication deadline when available
descriptionFull job description as plain text
descriptionHtmlOriginal description HTML when available
descriptionFetchFailedtrue when the full description could not be fetched (not billed)
urlCanonical job detail URL
searchUrlThe search URL this job came from
sourceAlways ziprecruiter
scrapedAtTimestamp of extraction (ISO 8601)

If an entire search is blocked after all retries, the Actor emits the same compatibility sentinel shape as the incumbent: {"type":"job_ziprecruiter_blocked","message":"...","requestedUrls":[...]}. Sentinel and incomplete rows are not billed.

Output example

{
"type": "job_ziprecruiter",
"id": "TT2JIBaZ_bbThXFmHQVtWw",
"jid": "abc123def456",
"title": "Senior Software Engineer",
"company": "Acme Corp",
"companyUrl": "https://www.ziprecruiter.com/co/Acme-Corp/Jobs/-in-Austin,TX",
"companyLogo": "https://www.ziprecruiter.com/svc/fotomat/example.png",
"location": "Austin, TX, US",
"city": "Austin",
"state": "TX",
"isRemote": null,
"isHybrid": null,
"employmentType": "FULL_TIME",
"salary": "USD 120000 - 160000 / year",
"salaryMin": 120000,
"salaryMax": 160000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"datePosted": "2026-08-01",
"validThrough": "2026-09-01",
"description": "We are hiring a Senior Software Engineer...",
"descriptionFetchFailed": false,
"url": "https://www.ziprecruiter.com/c/Acme-Corp/Job/Senior-Software-Engineer/-in-Austin,TX?jid=abc123def456",
"searchUrl": "https://www.ziprecruiter.com/jobs-search?search=software+engineer&location=Austin%2C+TX",
"source": "ziprecruiter",
"scrapedAt": "2026-08-08T06:40:00.000Z"
}

How much does it cost?

This Actor uses pay-per-event pricing plus platform usage:

ChargeAmount
Complete job (job-with-description)$0.49 per 1,000 on Free (down to $0.37 per 1,000 on higher plans)
Actor start$0.00005 per GB of memory
Apify platform usage (compute + residential proxy)Billed to your account at standard Apify rates

Two things worth knowing before you run it:

  • You are only charged for complete records. A job is billed when it includes a real job description. Rows returned with descriptionFetchFailed: true are still delivered so you can see what happened, but they are never charged.
  • You pay the platform usage. ZipRecruiter is behind Cloudflare, so this Actor drives a real browser through US residential proxies. In our measurements that works out to roughly $18 of Apify usage per 1,000 jobs, dominated by residential proxy traffic. The per-result fee above is a small maintenance fee on top, not the full cost — budget accordingly, and use maxItems to keep test runs cheap.

Notes and limitations

  • ZipRecruiter uses Cloudflare bot protection, so US residential proxies are strongly recommended (they are the default). Runs on datacenter IPs will typically be blocked.
  • Job availability changes quickly — treat scraped data as a point-in-time snapshot.
  • Only public search results are scraped. This Actor does not log in to any account.

This Actor extracts publicly visible job listing information. Use it responsibly, respect ZipRecruiter's terms, and ensure your use case complies with applicable laws and regulations. If you are unsure whether your use case is allowed, consult a legal professional.

Image Credit

Image credit: ziprecruiter.com