ZipRecruiter Scraper | $1 / 1k | Fast & Reliable avatar

ZipRecruiter Scraper | $1 / 1k | Fast & Reliable

Pricing

$1.00 / 1,000 results

Go to Apify Store
ZipRecruiter Scraper | $1 / 1k | Fast & Reliable

ZipRecruiter Scraper | $1 / 1k | Fast & Reliable

Extract structured ZipRecruiter job listings with companies, locations, compensation ranges, employment types, contacts and full descriptions. Built for hiring intelligence, labor-market research, and automated recruiting or analytics pipelines.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

3

Bookmarked

68

Total users

23

Monthly active users

29 days

Issues response

16 hours ago

Last modified

Share

ZipRecruiter Scraper

Slug: fatihtahta/ziprecruiter-scraper

Overview

ZipRecruiter Scraper collects structured job listing data from ZipRecruiter, including job titles, listing URLs, posting dates, company details, location details, compensation ranges, employment attributes, and application links. It is designed for teams that need repeatable, structured access to public job market data without manually reviewing search pages one by one. ZipRecruiter is one of the most widely used job marketplaces in the United States, which makes its listing data valuable for hiring analysis, employer research, market tracking, and enrichment workflows. This actor automates keyword-based collection with practical filters so runs stay consistent as your scope grows. The output is organized for practical downstream use in analytics tools, spreadsheets, ETL jobs, and internal reporting systems.

Why Use This Actor

  • Market research and analytics teams: Track job volume, salary ranges, employer activity, location demand, and hiring patterns across roles, regions, and time windows.
  • Product and content teams: Discover trending job titles, compare how employers describe similar roles, and identify demand signals for new pages, reports, or editorial content.
  • Developers and data engineering teams: Feed structured job records into warehouses, dashboards, enrichment services, APIs, or recurring data pipelines without manual transformation.
  • Lead generation and enrichment teams: Identify active hiring companies, enrich company profiles with hiring context, and connect job activity to outreach, sales, or recruiting workflows.
  • Monitoring and competitive intelligence teams: Watch specific markets, employers, or role categories over time to detect changes in compensation, remote work mix, and competitor hiring activity.

Input Parameters

Provide one or more search queries and optional filters to control the scope of collection.

ParameterTypeDescriptionDefault
queriesstring[]Free-text job keywords such as software engineer, data analyst, or marketing manager. Each query can be combined with the optional filters below.
locationstringOptional location applied to every query. You can use a ZIP code, city, state, or City, ST format such as New York, NY.
location_remotebooleanWhen true, forces ZipRecruiter remote search mode by overriding location to US and remote_options to only_remote.false
radiusstringOptional distance filter in miles. Allowed values: 5, 10, 25, 50, 100.
remote_optionsstringOptional work arrangement filter. Allowed values: "" (all remote/on-site), no_remote (on-site), hybrid, only_remote (remote).
daysstringOptional date-posted filter. Allowed values: "" (posted anytime), 30, 10, 5, 1.
refineByEmploymentstringOptional employment type filter. Allowed values: "" (all employment types), employment_type:full_time, employment_type:part_time, employment_type:contract, employment_type:temporary, employment_type:other.
refineBySalaryintegerOptional minimum salary floor to include in query-based searches.
refineBySalaryCeilintegerOptional maximum salary ceiling to include in query-based searches.
refineByApplyTypebooleanWhen true, limits results to listings where Quick Apply is available.false
refineByExperienceLevelstring[]Optional experience level filter. Allowed values: no_experience, junior, mid, senior. You can provide one or more values.
limitintegerMaximum number of listings to save for each query or start URL seed.50000

Example Input

{
"queries": [
"software engineer",
"data analyst"
],
"location_remote": true,
"days": "10",
"refineByApplyType": true,
"limit": 1500
}

Output

6.1 Output destination

The actor writes results to an Apify dataset as JSON records. And the dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs without post-processing.

6.2 Record envelope (all items)

Every production record represents a single job listing and includes stable identifiers that can be normalized consistently in downstream systems.

  • type (string, required): Recommended logical record category. Use job.
  • id (string, required): Stable job identifier, available as job.id.
  • url (string, required): Canonical job URL, available as source.job_url.

Recommended idempotency key: type + ":" + id

Use record_id for deduplication and upserts when the same job appears in multiple searches, multiple locations, or repeated scheduled runs. The actor's internal runtime dedupe also preserves distinct seat-level jobs by preferring ZipRecruiter open-seat and listing identifiers before broader title or URL aliases.

6.3 Examples

Example: job (record_type = "job")

{
"record_type": "job",
"record_id": "0b406c8b73d05511",
"source_context": {
"source_id": "ziprecruiter_scraper",
"source": "ZipRecruiter",
"source_domain": "ziprecruiter.com",
"source_url": "https://www.ziprecruiter.com/c/Motion-Recruitment/Job/Java-Engineer-Banking-Iselin-Hybrid/-in-Iselin,NJ?jid=0b406c8b73d05511",
"search_results_url": "https://www.ziprecruiter.com/jobs-search?search=software+engineer&location=New+York%2C+NY",
"seed_type": "query",
"seed_value": "software engineer",
"search_query": "software engineer",
"page_number": 1,
"scraped_at": "2026-03-16T06:02:18Z",
"enrichment_status": "success",
"external_ids": {
"job_id": "0b406c8b73d05511",
"ziprecruiter_listing_key": "ywqwkkS7cBE__zoqkPyDLA",
"ziprecruiter_match_id": "019cf53c-efaa-7bbb-868e-2d9fbede3a30",
"ziprecruiter_open_seat_id": "0b406c8b73d05511"
}
},
"entity": {
"title": "Java Engineer / Banking / Iselin / Hybrid",
"name": "Java Engineer / Banking / Iselin / Hybrid",
"description": "Outstanding long-term contract opportunity! A well-known Financial Services Company is looking for a Java Software Engineer...",
"url": "https://www.ziprecruiter.com/c/Motion-Recruitment/Job/Java-Engineer-Banking-Iselin-Hybrid/-in-Iselin,NJ?jid=0b406c8b73d05511",
"status": "active",
"external_ids": {
"job_id": "0b406c8b73d05511",
"ziprecruiter_listing_key": "ywqwkkS7cBE__zoqkPyDLA",
"ziprecruiter_match_id": "019cf53c-efaa-7bbb-868e-2d9fbede3a30",
"ziprecruiter_open_seat_id": "0b406c8b73d05511"
}
},
"job": {
"job_id": "0b406c8b73d05511",
"job_title": "Java Engineer / Banking / Iselin / Hybrid",
"description": "Outstanding long-term contract opportunity! A well-known Financial Services Company is looking for a Java Software Engineer...",
"description_html": "<div>Outstanding long-term contract opportunity! ...</div>",
"posted_at": "2026-01-15T17:33:33Z",
"rolling_posted_at": "2026-02-14T17:33:33Z",
"status": {
"is_active": true
}
},
"company": {
"company_id": "KOwJGkdRvDNlur9AMC4w3HjpV+8=",
"company_name": "Motion Recruitment",
"company_url": "https://www.ziprecruiter.com/co/Motion-Recruitment/Jobs",
"company_website": "https://motionrecruitment.com",
"canonical_display_name": "motion recruitment",
"company_size": "501 - 1000 Employees",
"industries": ["Recruiting and Staffing Services"],
"profile": {
"uuid": "KOwJGkdRvDNlur9AMC4w3HjpV+8=",
"display_name": "Motion Recruitment"
},
"headquarters": {
"display_name": "Boston, MA, US",
"country": "US",
"state": "MA",
"city": "Boston"
}
},
"location": {
"address": "Iselin, NJ US 08830",
"display_name": "Iselin, NJ US 08830",
"city": "Iselin",
"region": "NJ",
"postal_code": "08830",
"country": "United States",
"country_code": "US",
"state_code": "NJ"
},
"compensation": {
"salary_min": 52.5,
"salary_max": 72,
"currency": "USD",
"pay_period": "Hour",
"salary_min_annual": 105000,
"salary_max_annual": 144000
},
"employment": {
"employment_types": [
"Other"
],
"location_types": [
"Hybrid"
]
},
"content": {
"descriptions": {
"summary": "A well-known Financial Services Company is looking for a Java Software Engineer...",
"html": "<div>Outstanding long-term contract opportunity! ...</div>",
"text": "Outstanding long-term contract opportunity! A well-known Financial Services Company is looking for a Java Software Engineer..."
}
},
"application": {
"application_url": "https://www.ziprecruiter.com/job-redirect?match_token=...",
"button": {"destination": "External"}
},
"media": {
"logo_url": "https://www.ziprecruiter.com/svc/fotomat/public-nosensitive-ziprecruiter-logos/company/5cef46a9.png"
},
"attributes": {
"ziprecruiter": {
"listing_key": "ywqwkkS7cBE__zoqkPyDLA",
"match_id": "019cf53c-efaa-7bbb-868e-2d9fbede3a30",
"open_seat_id": "0b406c8b73d05511"
}
}
}

Field reference

Job record fields (record_type = "job")

  • record_id (string, optional): Stable job identifier, usually a ZipRecruiter open-seat or listing identifier.
  • source_context (object, required): Source, input seed, result page, enrichment status, and crawl provenance metadata. This includes fields such as source_url, search_results_url, seed_type, seed_value, search_query, page_number, scraped_at, and external_ids.
  • entity (object, required): Core job identity: title, name, description, url, status, and external identifiers.
  • job (object, optional): Job-specific details such as job_id, job_title, full plain-text and HTML descriptions, status, posting timestamps, freshness flags, and ZipRecruiter-specific IDs.
  • company (object, optional): Employer name, IDs, profile details, jobs page, website, logo, headquarters, industries, social links, and similar companies when available.
  • location (object, optional): Display location, city, region, country, postal code, remote flag, ZipRecruiter location ID, and resolution metadata.
  • compensation (object, optional): Salary range, exact amount, currency, pay period, annualized range, and compensation metadata when exposed.
  • employment (object, optional): Employment type, workplace type, remote flag, employment/location type codes, and benefit details.
  • application (object, optional): Application URL, redirect URLs, canonical job page URL, current application state, and apply-button metadata.
  • content.descriptions (object, optional): Full description text and HTML when Breakroom detail enrichment succeeds, plus the shorter search summary when available.
  • benefits (array|object|string, optional): Benefits exposed by the listing or detail response.
  • media (object, optional): Company logo and other media URLs.
  • attributes.ziprecruiter (object, optional): Source-specific IDs and enrichment metadata that may be useful for troubleshooting or joins.

Many of the richer company, location, employment, content, and application fields are endpoint-dependent. Missing values should be treated as normal rather than as parsing failures. If detail enrichment is blocked or unavailable for a row, source_context.enrichment_status indicates that state and the record may contain only the shorter search-result description.

Data guarantees & handling

  • Best-effort extraction: fields may vary by region, session, availability, and UI experiments.
  • Optional fields: null-check in downstream code.
  • Deduplication: recommend record_type + ":" + record_id; runtime dedupe also prioritizes seat-level IDs before listing-level keys.

How to Run on Apify

  1. Open the Actor in Apify Console.
  2. Configure your search parameters, such as keywords, location, distance, remote preference, posting date, and employment filters.
  3. Set the maximum number of outputs to collect with the limit field.
  4. Click Start and wait for the run to finish.
  5. Download results in JSON, CSV, Excel, or another supported export format.

Scheduling & Automation

Scheduling

Automated Data Collection

You can schedule this actor to run automatically so your dataset stays current without manual intervention. This is useful for recurring market reports, employer monitoring, enrichment jobs, and periodic analytics refreshes.

  • Navigate to Schedules in Apify Console
  • Create a new schedule (daily, weekly, or custom cron)
  • Configure input parameters
  • Enable notifications for run completion
  • Optional: add webhooks for automated processing

Integration Options

  • Webhooks: Trigger downstream actions when a run completes
  • Zapier: Connect to 5,000+ apps without coding
  • Make (Integromat): Build multi-step automation workflows
  • Google Sheets: Export results to a spreadsheet
  • Slack/Discord: Receive notifications and summaries
  • Email: Send automated reports via email

Performance

Estimated run times:

  • Small runs (< 1,000 outputs): ~2-3 minutes
  • Medium runs (1,000-5,000 outputs): ~5-15 minutes
  • Large runs (5,000+ outputs): ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record.

Compliance & Ethics

Responsible Data Collection

This actor collects publicly available job listing and company information from ZipRecruiter for legitimate business purposes, including:

  • Labor market research and market analysis
  • Hiring trend monitoring
  • Data enrichment and internal reporting

Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, and the target site's terms. This section is informational and not legal advice.

Best Practices

  • Use collected data in accordance with applicable laws, regulations, and the target site’s terms
  • Respect individual privacy and personal information
  • Use data responsibly and avoid disruptive or excessive collection
  • Do not use this actor for spamming, harassment, or other harmful purposes
  • Follow relevant data protection requirements where applicable (e.g., GDPR, CCPA)

Support

If you need help, use the Issues tab or the actor page in Apify Console. Include the input you used with sensitive values redacted, the run ID, a short note describing expected versus actual behavior, and, if helpful, a small output sample that shows the issue clearly.