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
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
3
Monthly active users
a month 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.