SimplyHired Scraper - Jobs, Salaries USA
Pricing
Pay per event
SimplyHired Scraper - Jobs, Salaries USA
Scrape SimplyHired job listings: title, company, location, parsed salary, remote flag, benefits, requirements. 20+ structured fields per job. HTTP-only, fast.
Pricing
Pay per event
Rating
0.0
(0)
Developer
deusex machine
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
SimplyHired Scraper API — Jobs, Salaries, Companies USA
A high-performance SimplyHired scraper that extracts complete job listings from SimplyHired.com, one of the largest job aggregators in the United States. Pull 20+ structured fields per job — title, company, location, parsed salary, remote flag, job type, benefits, requirements, snippet — without writing any HTML scraping logic.
Built for recruiters tracking US labor supply, market analysts comparing aggregator data against LinkedIn Jobs, Indeed, and Glassdoor, compensation consultants, founders monitoring competitor hiring, and ML teams training resume-to-job matching models. Output is clean JSON aligned with schema.org JobPosting downstream pipelines, ready for Google BigQuery, Snowflake, Postgres or Google Sheets.
What this SimplyHired scraper does
This actor automates the SimplyHired search the way a real visitor does. It hits the public search results, walks through pagination, and parses the SSR Next.js __NEXT_DATA__ payload embedded in every page. Each search returns 20 jobs with full structured data — no captcha solving, no headless browser.
The scraper is HTTP-only, runs at 512 MB RAM, and uses Apify residential proxies out of the box. A typical 100-job run completes in well under a minute.
Data fields the SimplyHired scraper extracts
Every record contains these fields when present:
Identity & links
jobKey— Unique SimplyHired job identifiertitle— Position titlejobUrl— Canonical job URLbotUrl— Canonical SimplyHired URLclickUrl— Decoded click-through URL
Company
company— Hiring companycompanyPageUrl— SimplyHired company profile URLcompanyRating— Star rating when published
Location
location— Display location stringremote— Boolean: is this a remote job?remoteAttributes— Object with remote-specific attributes
Salary
salaryText— Human-readable salary stringsalaryMin— Lower boundsalaryMax— Upper boundsalaryType—"yearly","hourly", etc.salaryCurrency— Currency code (typically"USD")
Description & filters
snippet— Clean text excerptsnippetHtml— Original HTML markupbenefits— Array of benefits when publishedrequirements— Array of requirement chipsjobTypes— Array of types ("Full-time","Contract", etc.)
Posting flags
postedRelative— "2 weeks ago", "1 month ago", "Today"postedDate— ISO 8601 timestampsponsored— Paid placementindeedApply— Indeed Apply available
Use cases for this SimplyHired data API
- Recruitment talent radar — Daily stream of new postings filtered by keyword, location, remote flag.
- Compensation benchmarking — Aggregate
salaryMin/salaryMaxby location and role to produce pay bands. - Hiring intelligence — Track which companies post specific roles most often.
- ML training data — Use
title,snippet,requirementsarrays to train job-matching models. - Lead generation — Identify companies hiring specific roles in your target city.
- Cross-portal comparison — Combine with Indeed and Glassdoor data for a multi-source US labor view.
How to use this SimplyHired scraper
Mode 1 — Search by keywords
{"mode": "keywords","keywords": ["python developer", "data engineer"],"location": "United States","maxJobs": 100}
Mode 2 — Search by URLs
{"mode": "urls","searchUrls": [{ "url": "https://www.simplyhired.com/search?q=remote+python&l=&job_types=fulltime" }],"maxJobs": 50}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | enum | "keywords" | "keywords" or "urls" |
keywords | array | ["python developer"] | Search keywords |
location | string | "United States" | Location filter |
searchUrls | array | [] | Pre-built URLs |
maxJobs | integer | 50 | Cap per keyword/URL |
proxyConfiguration | object | RESIDENTIAL | Apify proxy |
Output example (single record, JSON)
{"jobKey": "BTNoUIy-flw5zkmW8V2PJsXjKOZJwf2U-FwkmUHzs3eFJqVFkCg-PA","title": "DeepTech AI/Capital Markets company","company": "Purple Shaman","location": "Remote","remote": true,"salaryText": "$120,000 - $180,000 a year","salaryMin": 120000,"salaryMax": 180000,"salaryType": "yearly","salaryCurrency": "USD","jobTypes": ["Full-time"],"benefits": ["Health insurance", "401(k)"],"requirements": ["3+ years Python", "AWS experience"],"snippet": "AI-assisted research agents capable of aggregating and structuring information...","postedRelative": "2 weeks ago","postedDate": "2026-05-09T00:00:00+00:00","sponsored": false,"indeedApply": false,"jobUrl": "https://www.simplyhired.com/job/BTNoUIy-flw5zkmW8V2PJsXjKOZJwf2U-..."}
How to call this SimplyHired scraper from your code
From the Apify API (curl)
curl -X POST "https://api.apify.com/v2/acts/makework36~simplyhired-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"keywords","keywords":["data engineer"],"location":"New York, NY","maxJobs":100}'
From Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("makework36/simplyhired-scraper").call(run_input={"mode": "keywords","keywords": ["python developer"],"location": "United States","maxJobs": 200,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job["company"], job.get("salaryText"))
From Node.js (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('makework36/simplyhired-scraper').call({mode: 'keywords',keywords: ['software engineer'],location: 'Seattle, WA',maxJobs: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} jobs`);
Export to CSV
$curl "https://api.apify.com/v2/acts/makework36~simplyhired-scraper/runs/last/dataset/items?format=csv&token=$APIFY_TOKEN" -o simplyhired_jobs.csv
Performance & cost
Pure HTTP with __NEXT_DATA__ parsing — no detail fetches needed.
| Run size | Time |
|---|---|
| 15 jobs | ~10 s |
| 100 jobs | ~50–70 s |
| 1,000 jobs | ~8–10 min |
Each page is ~370 KB. For 1,000 jobs (~50 pages) expect ~18 MB of residential proxy traffic.
SimplyHired scraper comparison
| Feature | This actor | Browser-only with proxy | Headless w/ captcha solver |
|---|---|---|---|
| Output fields | 20+ structured | 10–15 | 12 |
| Salary parsed | ✅ | partial | partial |
| Remote flag auto-detected | ✅ | manual | ❌ |
| Pure HTTP | ✅ | ❌ | ❌ |
| Memory | 512 MB | 4 GB | 4 GB |
| Pricing | PAY_PER_EVENT tiered | flat | flat |
Step-by-step tutorial — your first run in 2 minutes
- Click Try for free at the top of this page.
- Leave
modeaskeywords. - Set a target keyword (e.g.
"data analyst") and adjustlocationif needed. - Set
maxJobsto20for a quick first run. - Click Start. The run finishes in ~10–15 seconds.
- Open the dataset; you'll see a table with titles, companies, locations, salaries.
- Export as CSV, JSON or Excel.
- Scale
maxJobsor schedule a recurring run as needed.
Advanced usage patterns
Pattern A — Cross-portal aggregation
Combine SimplyHired output with Indeed and Glassdoor datasets. Deduplicate by (title, company, location) to build a wider US labor view.
Pattern B — Remote-only feed
Filter outputs where remote == true. Combine with a salary floor for premium remote tech jobs.
Pattern C — Trending skills tracker
Aggregate requirements array across all jobs. Plot top skills over weekly cron runs to spot rising tools.
Pattern D — Benefits comparison report
Parse the benefits array. Compare frequency of "Health insurance", "401(k)", "Remote work" across companies in your sector.
Pattern E — Lead generation for B2B services
Pull all companies hiring "growth marketer" or "VP of marketing". Use company + location to build outreach lists.
Troubleshooting
Some salary fields are null.
Not every SimplyHired posting includes salary. About 50% of US listings have it. The salaryMin/salaryMax fields populate only when the employer publishes the range.
HTTP 403 errors in the logs. SimplyHired rate-limits each IP. The actor rotates Apify residential proxy sessions automatically. As long as the final job count is non-zero, the scraper recovered.
The jobUrl is encoded.
SimplyHired returns redirect URLs with percent-encoding. The actor decodes them automatically to a clean URL.
My run hit a proxy budget limit. Each page is ~370 KB. For 1,000 jobs (~50 pages) expect ~18 MB. Check your Apify residential allowance.
I want only remote jobs.
The actor doesn't filter pre-extract, but post-filter on remote == true is straightforward in the dataset export.
Pricing
This actor uses PAY_PER_EVENT pricing with tiered volume discounts.
| Tier | Per job ($/1K) |
|---|---|
| FREE | $2.00 |
| BRONZE | $1.50 |
| SILVER | $1.10 |
| GOLD | $0.75 |
| PLATINUM | $0.55 |
| DIAMOND | $0.40 |
Plus a one-time $0.001 per actor run.
FAQ
Is scraping SimplyHired legal? This actor accesses publicly available pages — no login, no paywall bypass. Always check SimplyHired's terms of service and consult counsel for your jurisdiction.
How fresh is the data? The scraper fetches in real time. SimplyHired updates listings continuously.
Can I scrape SimplyHired without writing code? Yes — use the input form on this page, click Start, then download the dataset.
Why is this scraper cheaper than other actors? It's pure HTTP — no headless browser. That's a 10× memory saving, passed back as lower pricing.
Does the scraper deduplicate?
Yes. jobKey is tracked across pages to skip duplicates.
Why does the scraper need Residential proxies? SimplyHired rate-limits datacenter IPs. Apify residential proxies route through real households, which SimplyHired accepts.
Can I scrape SimplyHired UK / Canada? Currently the actor targets the US SimplyHired domain. International coverage is on the roadmap.
Is there a rate limit on my side? The actor uses small jitter between pages and rotates proxy sessions. For very large runs split across multiple Apify Tasks.
Changelog
- 0.1 (2026-05) — Initial release. Keywords + URLs modes. SSR
__NEXT_DATA__parsing. 20+ fields. Residential proxy default.
Related scrapers from the same author
makework36/indeed-scraper— Indeed.com US jobsmakework36/glassdoor-scraper— Glassdoor jobs + salariesmakework36/naukri-scraper— Naukri.com India jobs
Legal & ethics note
This SimplyHired scraper accesses publicly available information. It does not bypass authentication, paywalls, or extract personally identifiable information beyond what employers and SimplyHired display publicly. Users are responsible for complying with SimplyHired's terms of service, the Computer Fraud and Abuse Act, and any applicable data protection regulations. The author of this actor accepts no responsibility for misuse.