Job Salary Transparency Scraper
Pricing
from $1.80 / 1,000 salary-job-results
Job Salary Transparency Scraper
Scrape public job listings and keep only jobs with visible salary. Returns flat, normalized salary rows - title, company, location, salary range, currency, pay period, remote status, and transparency tags. No login, no cookies, no residential proxy.
Pricing
from $1.80 / 1,000 salary-job-results
Rating
0.0
(0)
Developer
Delowar Munna
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share

Scrape public job listings and keep only the jobs that show real salary / pay data, normalized into clean, flat, CSV-ready rows. Every row carries first-class compensation fields: min/max salary, currency, pay period, range vs. exact, salary source, and a salary-transparency score. Built for compensation analysts, recruiters, HR-tech teams, labour-market researchers, and sales teams.
No login, no cookies, no session tokens, no residential proxy. The actor uses free public sources over HTTP, so it stays fast and cost-predictable. You pay one flat event per unique salary-visible job row that passes your filters.
✨ Why this scraper
- Salary-first — unlike generic job scrapers, this one filters and normalizes compensation as the headline output. No salary, no charge.
- Public sources only — public ATS JSON APIs (Greenhouse, Lever, Ashby, SmartRecruiters), the Remotive search API, and any career page that exposes JSON-LD
JobPostingdata. - No AI, no paid salary vendors — salary is parsed from structured fields, page JSON-LD, and visible text. Vague text like "competitive salary" is never turned into a fake number.
- 29 flat fields — drops straight into Sheets/Excel/CRMs.
- Pay-Per-Event — one flat
salary-job-resultevent per saved unique salary-visible job. Duplicates and filtered rows are never charged.
📥 Input
Provide at least one of Start URLs (URL mode) or Search keywords (query mode).
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | [] | Public board/career/job URLs. Greenhouse/Lever/Ashby/SmartRecruiters boards are detected automatically; any other page is read via JSON-LD. |
queries | array | [] | Keyword search terms (searched via Remotive — the only free cross-company keyword source). |
location | string | "" | Optional location filter. |
country | string | "US" | Salary currency default + location parsing. One of US, CA, UK, AU, DE, FR, IN, GLOBAL. |
sources | array | ["public_ats","remotive","google_jobs_compatible"] | Sources for query mode. custom_urls_only uses Start URLs exclusively. |
maxResults | integer | 100 | Max saved unique salary-visible rows (1–50000). |
salaryRequired | boolean | true | Save only rows with visible salary. |
minSalary | integer | null | Minimum salary (compared within matching period only). |
salaryPeriod | string | "any" | any, hour, day, week, month, year. |
currency | string | "any" | any, USD, CAD, GBP, AUD, EUR, INR. |
remoteOnly | boolean | false | Keep only remote/hybrid jobs. |
includeDescription | boolean | false | Store full job description (off = snippet only). |
deduplicate | boolean | true | Drop duplicate rows by job ID / canonical URL. |
proxyConfiguration | object | { "useApifyProxy": true } | Apify Datacenter / no proxy / custom URLs. Residential is rejected. |
Sample input — URL mode (public ATS boards)
{"startUrls": ["https://boards.greenhouse.io/figma","https://jobs.lever.co/voiceflow","https://jobs.ashbyhq.com/Notion"],"salaryRequired": true,"currency": "USD","maxResults": 100,"proxyConfiguration": { "useApifyProxy": true }}
Sample input — query mode (Remotive keyword search)
{"queries": ["software engineer", "data analyst"],"sources": ["remotive"],"country": "US","salaryRequired": true,"salaryPeriod": "year","minSalary": 90000,"remoteOnly": true,"maxResults": 100,"proxyConfiguration": { "useApifyProxy": true }}
📤 Output
The dataset opens on the Salary-visible jobs table view — one flat row per salary-visible job (29 fields):

Sample record — Salary-visible jobs
{"job_id": "rm_1919266","job_url": "https://remotive.com/remote-jobs/software-development/senior-independent-ai-engineer-architect-1919266","source": "remotive","source_company_board_url": "https://remotive.com","job_title": "Senior Independent AI Engineer / Architect","company_name": "A.Team","location": "Americas, Europe, Israel","country": "US","remote_type": "remote","employment_type": "contract","posted_at": "2026-05-16","scraped_at": "2026-06-07T04:46:16.652Z","salary_visible": true,"salary_text": "$120 - $170 /hour","salary_min": 120,"salary_max": 170,"salary_currency": "USD","salary_period": "hour","salary_is_range": true,"salary_confidence": "medium","salary_source": "description_text","salary_context": "$120 - $170 /hour Senior Independent AI Engineer / Architect Remote | Americas, Europe, or Israel. A·Team is an invite-only network of senior AI engineers, ML engineers, and AI architects building production AI systems…","transparency_reason_tags": "explicit_salary_range;hourly_pay_detected;currency_inferred_from_country;salary_from_description_text;remote_salary","description_snippet": "Senior Independent AI Engineer / Architect Remote | Americas, Europe, or Israel. Most AI engineers can find work. Finding work worth doing is harder. A.Team is an invite-only network of senior AI engineers, ML engineers, and AI architects building production AI systems for startups, enterprises, and global companies…","job_description": null,"input_url": "https://remotive.com","input_query": "data analyst","salary_transparency_score": 90,"salary_transparency_label": "strong"}
The run also writes a RUN_SUMMARY record to the default key-value store with counts for inputs, raw results, salary-visible found, results saved, duplicates removed, filtered out, charged events, blocked requests, retries, sources used, and runtime.
💲 Pricing — Pay Per Event
One event: salary-job-result, charged once per unique salary-visible row that passed all filters and was successfully pushed to the dataset. Duplicates, filtered-out rows, and failed requests are never charged.
🚦 Proxy policy
Use Apify Datacenter proxy or no proxy for normal runs — both work reliably for public ATS / career-page JSON at this actor's conservative concurrency.
Apify Residential proxy is not supported. The actor fails at startup if apifyProxyGroups includes RESIDENTIAL. Reason: in pay-per-event actors, residential bandwidth (~/GB) is billed to the developer, not the run user, so a single bandwidth-heavy run could exceed the per-result event revenue.
If you genuinely need residential routing, supply your own residential provider via the proxy editor's Custom proxy URLs field — that traffic goes through your provider, not Apify, and is unaffected:
http://user:pass@proxy.iproyal.com:12321http://user:pass@proxy.brightdata.com:22225http://user:pass@proxy.oxylabs.io:7777
ℹ️ Notes & limits
- Indeed and Seek are not supported in V1 — they are anti-bot heavy and unreliable over plain HTTP without a browser or residential proxy. They are planned as future sources.
- Public ATS boards have no cross-company keyword search, so keyword
queriesrun through Remotive. To scrape an ATS board, paste its URL instartUrls. - Salary is parsed from structured fields and JSON-LD first (high confidence), then from visible description text (medium/low). The original salary string is preserved verbatim in
salary_text. - No login, cookies, session tokens, or private API keys are used anywhere.