Job Description Normalizer — Skills, Comp, Visa
Pricing
from $2.57 / 1,000 job-normalizeds
Job Description Normalizer — Skills, Comp, Visa
Turn any job posting URL or raw text into one structured record: skills, seniority, years required, compensation range, visa sponsorship, remote type and employment type. Works across every ATS and board. Per-result pricing.
Pricing
from $2.57 / 1,000 job-normalizeds
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Share
Job Description Normalizer — Skills, Comp, Visa, Seniority
Turn any job posting — by URL or raw text — into one unified structured record, no matter which ATS or board it came from:
| Field | Example |
|---|---|
job_title, company, location | "Senior Backend Engineer", "Acme", "Remote" |
seniority | Intern / Junior / Mid / Senior / Lead / Principal |
employment_type | full-time / part-time / contract / internship |
remote_type | remote / hybrid / onsite |
years_min, years_max | 5, null |
salary_min, salary_max, salary_currency, salary_period | 160000, 190000, USD, annual |
visa_sponsorship | yes / no / unknown |
skills | ["Python", "Django", "PostgreSQL", "AWS"] |
Why this exists
Job boards each present postings differently — salary buried in prose, skills in a bullet list, visa policy in a footnote. Feeding heterogeneous postings into a talent map, a pricing model or a candidate-matcher means normalizing them first. This actor does exactly that, horizontally, across every source. Pair it with any job scraper: scrape → normalize → analyze.
Unlike keyword-only parsers, the extraction is correctness-focused: it reads
compensation ranges ($160k-$190k, £45,000–£60,000, $50/hour), visa
sponsorship language, and "5+ years" experience requirements that simple
keyword matchers miss.
Input
{"jobUrls": ["https://jobs.lever.co/spotify/<id>"],"jobTexts": ["Senior Backend Engineer. 5+ years Python… $160k-$190k. Visa sponsorship available."],"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
jobUrls— posting URLs (fetched proxy-first).jobTexts— raw description text (when you already have it).geminiApiKey(optional, BYO) — premium LLM extraction; never required, rule-based extraction runs by default at $0 extra cost.
Output
One record per posting with the fields above, plus parse_confidence,
fields_extracted and skill_count. URLs that are JS-only or blocked degrade to
low confidence rather than failing the run.
Pricing
Pay per job normalized (PPE). Runs on your Apify account — no subscription.