ZipRecruiter Jobs Scraper — Remote Jobs, Salaries & Details
Pricing
from $3.75 / 1,000 job extracteds
ZipRecruiter Jobs Scraper — Remote Jobs, Salaries & Details
Extract ZipRecruiter jobs by keyword, location, or direct URL. Supports remote filters, salary and apply fields, detail enrichment, US residential proxy defaults, and in-run deduplication.
Pricing
from $3.75 / 1,000 job extracteds
Rating
0.0
(0)
Developer
Crowd Pull
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
CrowdPull ZipRecruiter Jobs Search
Pure HTTP Apify actor for searching ZipRecruiter jobs by keyword and location.
This actor is designed for SignalApply-style job discovery pipelines:
- Search multiple titles/keywords across multiple locations.
- Start from ZipRecruiter search URLs or job detail URLs while preserving URL filters.
- Search generated keyword/location pairs across supported ZipRecruiter country domains.
- Emit normalized job rows into the default Apify dataset.
- Deduplicate results by external ID, URL, or title/company/location.
- Run in incremental mode so recurring runs emit only new or changed jobs.
- Save run metadata to
SEARCH_SPECSandSUMMARYkey-value records. - Run in API mode, pure HTTP web mode, auto mode, or fallback URL mode.
- Parse
/jobs-searchSchema.orgItemListresults and job-pageJobPostingJSON-LD. - Normalize richer fields when exposed by ZipRecruiter: typed salary ranges, remote/hybrid flags, company metadata, apply URLs, benefits, and geo fields.
Search Modes
auto: uses the ZipRecruiter Search API whenapiKeyis present and nostartUrlsare supplied, otherwise uses pure HTTP web search.api: requires a ZipRecruiter Search API key.web: fetches ZipRecruiter search URLs, parses result links, then optionally fetches job detail pages forJobPostingJSON-LD.fallbackUrls: emits search URLs only.
With empty input, the actor defaults to this remote-first sales search:
https://www.ziprecruiter.com/jobs-search?search=Sales&location=USA&refine_by_location_type=only_remote
Production Apify runs require a proxy. The default input uses US residential Apify Proxy because ZipRecruiter blocked direct Apify datacenter egress during remote testing, while US residential proxying allowed search results and better detail-page enrichment:
{"proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Input
{"startUrls": [{"url": "https://www.ziprecruiter.com/jobs-search?search=Sales&location=USA&refine_by_location_type=only_remote"}],"searchQueries": ["Sales"],"locations": ["USA"],"countryCodes": ["US"],"searchMode": "auto","apiKey": "YOUR_ZIPRECRUITER_SEARCH_API_KEY","maxItems": 100,"jobsPerPage": 25,"pagesPerSearch": 1,"radiusMiles": 25,"daysAgo": 7,"employmentType": "full_time","locationType": "only_remote","minAnnualSalary": 100000,"maxAnnualSalary": 180000,"applyType": "one_click_apply","experienceLevel": "senior_level","includeEmptyFilterParams": false,"seniorityFiltersExplicitlySet": false,"applyTypesExplicitlySet": false,"employmentTypesExplicitlySet": false,"locationTypesExplicitlySet": false,"linkKey": "hGEq63bjJQ2bOUaqEdaVJA","includeJobDetails": true,"fallbackToSearchUrls": true,"pushFallbackSearchUrls": true,"deduplicate": true,"incrementalMode": false,"incrementalStoreName": "ziprecruiter-incremental","delayMs": 250,"proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
You can also provide the API key as ZIPRECRUITER_SEARCH_API_KEY or ZIPRECRUITER_API_KEY.
Supported Search Filters
The actor currently maps these web search parameters:
locations: becomes ZipRecruiter'slocationparameter. Pass multiple locations to fan out searches.countryCodes: generated searches can targetUS,CA,GB,IE,IN,DE,FR, orNZ. URL-based searches use the domain from eachstartUrlsentry.startUrls: direct ZipRecruiter search or job URLs. Existing query parameters are preserved and paginated withpage.daysAgo: becomesdaysin web mode anddays_agoin API mode. Use1,7,14,30, etc.radiusMiles: becomesradiusin web mode andradius_milesin API mode. ZipRecruiter web search normalizes very small radii to 25 miles.employmentType: maps torefine_by_employment, e.g.full_time,part_time,contract,temporary,internship.locationType: maps torefine_by_location_type, e.g.remote,only_remote,hybrid,in_person,remote_optional.minAnnualSalaryandmaxAnnualSalary: map torefine_by_salaryandrefine_by_salary_ceil.applyType: maps torefine_by_apply_type, currentlyone_click_apply.experienceLevel: maps torefine_by_experience_level, e.g.entry_level,mid_level,senior_level.includeEmptyFilterParams: includes emptyrefine_by_*parameters for filters left asAny, matching ZipRecruiter's browser URLs more closely.seniorityFiltersExplicitlySet,applyTypesExplicitlySet,employmentTypesExplicitlySet, andlocationTypesExplicitlySet: add ZipRecruiter's*_explicitly_set=URL markers.linkKey: advanced passthrough for ZipRecruiter's opaquelkquery parameter when copied from a browser URL.extraSearchParams: raw escape hatch for newly discovered query parameters. Empty string values are preserved.incrementalMode: saves fingerprints in a named key-value store and emits only new or changed jobs on later runs.pushFallbackSearchUrls: set tofalsewhen using pay-per-job pricing so generated fallback links are saved toFALLBACK_SEARCH_URLSbut not counted as dataset result rows.proxyConfig: required for Apify runs. Defaults to US residential Apify Proxy (RESIDENTIAL, countryUS) because ZipRecruiter blocks direct Apify datacenter egress.
Recommended Pricing
Recommended launch pricing is pay-per-event with platform usage included:
| Event | Price | Notes |
|---|---|---|
apify-actor-start | $0.00005/run | Synthetic start event; keep Apify's default and do not charge manually in code. |
job-extracted | $3.75 / 1,000 jobs | Primary event, charged for job records pushed to the dataset. |
Configure these events in Apify Monetization before Store publication. The actor code emits job-extracted; the synthetic start event is handled by Apify.
This prices the actor between the cheapest direct ZipRecruiter competitors and the higher-priced detail-enrichment actors while protecting residential proxy margin. Fallback search_url rows should remain free or disabled with pushFallbackSearchUrls: false for paid Store runs.
Output
Job rows look like:
{"type": "job","source": "ziprecruiter","sourceMode": "web","countryCode": "US","searchQuery": "Fire Alarm Technician","searchLocation": "Westbury, NY","externalId": "VklYGmxpudK3jnCJl23TbA","listingVersionKey": "VklYGmxpudK3jnCJl23TbA","encryptedQuizId": "827e0df3","title": "Full-Time Alarm technicians","company": "Securetell Inc","companyUrl": "https://www.ziprecruiter.com/co/Securetell-Inc/Jobs","companyUuid": "zr_missing_company_default","location": "Westbury, NY","city": "Westbury","state": "NY","postalCode": "11590","latitude": 40.75566101074219,"longitude": -73.5876235961914,"url": "https://www.ziprecruiter.com/c/Securetell-Inc/Job/Full-Time-Alarm-technicians/-in-Westbury,NY?jid=dff3b05032fd7e28","applyUrl": "https://www.ziprecruiter.com/jobs/apply/...","directApply": true,"hasZipApply": true,"isExternalApply": false,"quickApplyUrl": "https://www.ziprecruiter.com/jobs/apply/...","description": "Growing Alarm Company based in Nassau County is looking for Full-Time technicians...","descriptionHtml": "<h3>Job Description</h3><div>...</div>","snippet": "Growing Alarm Company based in Nassau County is looking for Full-Time technicians...","salary": "$25 Hourly","formattedSalaryShort": "$25 / hr","salaryMin": 25,"salaryMax": 25,"salaryCurrency": "USD","salaryPeriod": "hour","salarySource": "provided","employmentType": "Full-Time","benefits": ["Paid Time Off", "Retirement"],"isRemote": false,"isHybrid": false,"postedAt": "2026-04-08T23:44:29Z","postedTime": "24 days ago","industry": "Real Estate","companyDetails": {"name": "Securetell Inc","city": "Westbury","state": "NY","countryCode": "USA","postalCode": "11590","joinedYear": "2021","followers": 14},"applyDetails": {"hasZipApply": true,"destination": "Internal","applyButtonType": "Open Apply Flow"},"statusDetails": {"isActive": true,"isClosed": false,"postedTime": "24 days ago"},"jobPageImage": {"url": "https://www.ziprecruiter.com/...","alt": "Securetell Inc job posting for a Full-Time Alarm technicians in Westbury, NY..."},"zipRecruiter": {"listingVersionKey": "VklYGmxpudK3jnCJl23TbA","encryptedQuizId": "827e0df3","impressionId": "5Z6lVs8Bhgoo29-8"},"fingerprint": "d9b8...","scrapedAt": "2026-04-23T12:00:00.000Z","raw": {},"rawSources": {}}
The actor keeps the stable fields above table-friendly while also preserving source payloads in raw and rawSources. When ZipRecruiter exposes richer page data, the output includes apply/status metadata, listing identifiers, salary display strings, company details, job page image data, and ZipRecruiter-specific metadata in normalized camelCase fields.
Fallback mode emits rows like:
{"type": "search_url","source": "ziprecruiter","searchQuery": "Senior Patching Engineer","searchLocation": "Remote","searchUrl": "https://www.ziprecruiter.com/Jobs/Remote-Senior-Patching-Engineer?search=Senior+Patching+Engineer&location=Remote","reason": "missing_api_key"}
Local Development
Install dependencies:
$npm install
Build:
$npm run build
Run locally with pure HTTP web search:
$CROWDPULL_DISABLE_DEFAULT_PROXY=1 apify run --input '{"searchMode":"web","searchQueries":["Senior Patching Engineer"],"locations":["Remote"],"daysAgo":7,"locationType":"remote","employmentType":"full_time","minAnnualSalary":100000,"maxItems":5,"includeJobDetails":true}'
Run locally with fallback URLs only:
$CROWDPULL_DISABLE_DEFAULT_PROXY=1 apify run --input '{"searchMode":"fallbackUrls","searchQueries":["Senior Patching Engineer"],"locations":["Remote"]}'
Dataset output is written under storage/datasets/default.
Run locally from a copied ZipRecruiter search URL:
$CROWDPULL_DISABLE_DEFAULT_PROXY=1 apify run --input '{"searchMode":"web","startUrls":[{"url":"https://www.ziprecruiter.com/jobs-search?search=data+engineer&location=Remote&days=7"}],"maxItems":5,"includeJobDetails":true}'
Run locally in incremental mode:
$CROWDPULL_DISABLE_DEFAULT_PROXY=1 apify run --input '{"searchMode":"web","searchQueries":["Senior Patching Engineer"],"locations":["Remote"],"maxItems":5,"incrementalMode":true,"incrementalStoreName":"ziprecruiter-incremental-dev"}'
CROWDPULL_DISABLE_DEFAULT_PROXY=1 is only for local development where Apify Proxy credentials are not available. Do not use it for production Apify runs.
SignalApply Integration
The SignalApply app can call this actor as a source adapter:
- Build search specs from the candidate profile and target roles.
- Run the actor in
autoorwebmode. - Pull dataset items from the run.
- Import
type: "job"rows into SignalApply'sjobstable. - Score, rank, and generate review-before-apply packets in the app.
No auto-submit is included. Application submission should remain human-approved.