Job Posting Enrichment
Pricing
Pay per event
Job Posting Enrichment
Enrich job postings from any source with structured skills, seniority, salary, work mode, and hiring urgency analysis. Provide job data as JSON — the actor does not fetch or scrape any websites.
Pricing
Pay per event
Rating
0.0
(0)
Developer

Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Enrich job postings from any source with structured skills, seniority, salary, work mode, and hiring urgency analysis. Provide job data as JSON — the actor does not fetch or scrape any websites.
What does Job Posting Enrichment do?
Job Posting Enrichment transforms raw job posting text into structured, analysis-ready data. It extracts and infers key attributes from job descriptions, including required skills, seniority level, salary range, work mode, hiring urgency, and more.
You provide job posting data (title, company, description, location) as JSON input. The actor analyzes the text and returns enriched results with structured fields. It works with job data from any source — LinkedIn, Indeed, Greenhouse, Lever, your own database, manual copy-paste, or any other job board or ATS.
This actor does not scrape or fetch any websites. All processing is done on data you provide.
Why use Job Posting Enrichment?
- Source-agnostic — Works with job data from any job board, ATS, or database
- No scraping — Pure text analysis, no network requests to third-party sites
- Structured output — Skills, seniority, salary, work mode, and more as clean fields
- Confidence scoring — Every result includes a confidence score so you know data quality
- Batch processing — Process up to 1,000 job postings in a single run
Use cases
- Lead generation — Identify companies hiring for specific roles and technologies to target with your products or services
- Job market analysis — Track skill demand trends, salary ranges, and hiring patterns across industries
- Recruitment intelligence — Enrich job listings with structured data for better candidate matching
- Competitor hiring tracking — Monitor what roles and skills competitors are hiring for
- Salary benchmarking — Extract and compare salary data across similar positions and locations
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
jobPostings | object[] | Yes | — | Job posting data as JSON objects. Each object must have at least a description field. Optional: title, companyName, location, url |
maxJobs | integer | No | 100 | Maximum number of job postings to process |
Job posting object format
{"title": "Senior Software Engineer","companyName": "Acme Corp","description": "Full job description text here...","location": "San Francisco, CA","url": "https://example.com/jobs/123"}
Only description is required. The more fields you provide, the higher the enrichment confidence score.
Output example
Each enriched job posting produces a result like this:
{"title": "Senior Software Engineer","companyName": "Acme Corp","location": "San Francisco, CA","description": "We are looking for a Senior Software Engineer...","jobUrl": null,"employmentType": null,"seniorityLevel": "senior","workMode": "remote","salaryMin": 150000,"salaryMax": 200000,"salaryCurrency": "USD","salaryPeriod": "yearly","skills": ["AWS", "Python", "React"],"technologies": ["AWS", "React"],"qualifications": ["Bachelor's degree"],"yearsExperienceMin": 5,"yearsExperienceMax": null,"hiringUrgency": "high","companyIndustry": "Software/SaaS","enrichmentConfidence": 86,"enrichedAt": "2026-03-01T12:00:00.000Z"}
Enrichment fields explained
| Field | Description | Values |
|---|---|---|
seniorityLevel | Inferred seniority from title and description | intern, junior, mid, senior, lead, manager, director, vp, c-level |
workMode | Work arrangement | remote, hybrid, onsite |
salaryMin / salaryMax | Parsed salary range | Numeric values |
salaryCurrency | Currency of salary | USD, EUR, GBP, etc. |
salaryPeriod | Pay period | yearly, monthly, hourly |
skills | Matched skills from a curated list of 200+ | Array of strings |
technologies | Subset of skills — platforms, databases, frameworks | Array of strings |
qualifications | Detected degrees and certifications | Array of strings |
yearsExperienceMin / Max | Parsed experience requirements | Numeric values |
hiringUrgency | Urgency signals detected in the description | high, medium, low |
companyIndustry | Inferred industry classification | String |
enrichmentConfidence | Overall data quality score | 0-100 |
How to enrich job postings with structured data
- Go to Job Posting Enrichment on Apify Store.
- Add your job posting data as JSON objects in the
jobPostingsfield -- each object needs at least adescription. - Optionally set
maxJobsto limit the number of postings processed. - Click Start and wait for the run to finish.
- Download enriched results as JSON, CSV, or Excel from the Dataset tab.
How much does it cost to enrich job postings?
Job Posting Enrichment uses pay-per-event pricing:
| Event | Price | Description |
|---|---|---|
| Actor start | $0.035 | Charged once per run |
| Job enriched | $0.005 | Charged per successfully enriched job posting |
Example costs:
- 10 jobs: $0.035 + (10 x $0.005) = $0.085
- 100 jobs: $0.035 + (100 x $0.005) = $0.535
- 1,000 jobs: $0.035 + (1,000 x $0.005) = $5.035
No proxy or browser costs — pure text processing.
Using the Apify API
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/linkedin-jobs-enrichment').call({jobPostings: [{title: 'Senior Software Engineer',companyName: 'Acme Corp',description: 'We are looking for a Senior Software Engineer with 5+ years...',location: 'San Francisco, CA',},],maxJobs: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((job) => {console.log(`${job.title} at ${job.companyName} — ${job.seniorityLevel}, ${job.workMode}`);console.log(`Skills: ${job.skills.join(', ')}`);console.log(`Salary: ${job.salaryCurrency} ${job.salaryMin}–${job.salaryMax} ${job.salaryPeriod}`);});
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("automation-lab/linkedin-jobs-enrichment").call(run_input={"jobPostings": [{"title": "Senior Software Engineer","companyName": "Acme Corp","description": "We are looking for a Senior Software Engineer with 5+ years...","location": "San Francisco, CA",},],"maxJobs": 10,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{job['title']} at {job['companyName']} — {job['seniorityLevel']}, {job['workMode']}")print(f"Skills: {', '.join(job['skills'])}")print(f"Salary: {job['salaryCurrency']} {job['salaryMin']}–{job['salaryMax']} {job['salaryPeriod']}")
Integrations
Connect Job Posting Enrichment with your recruitment and analytics tools:
- Google Sheets — Export enriched job data to a spreadsheet for salary benchmarking and skill trend analysis
- Zapier — Trigger alerts when jobs with specific skills or seniority levels are enriched
- Make — Build pipelines: scrape jobs with Indeed Scraper, enrich with structured data, then push to your ATS or dashboard
- Webhooks — Send enriched results to your own API for custom processing
- Other Apify actors — Chain with any job scraping actor to enrich raw listings with skills, salary, and seniority data
Use with cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~job-posting-enrichment/runs?token=YOUR_API_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"jobPostings": [{"title": "Senior Software Engineer","companyName": "Acme Corp","description": "We are looking for a Senior Software Engineer with 5+ years experience in Python and AWS...","location": "San Francisco, CA"}],"maxJobs": 100}'
Use with AI agents via MCP
Job Posting Enrichment is available as a tool for AI assistants that support the Model Context Protocol (MCP).
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com"}}}
Example prompts
Once connected, try asking your AI assistant:
- "Enrich these job posting URLs with structured data"
- "Get detailed job descriptions from these LinkedIn job links"
Learn more in the Apify MCP documentation.
Tips and best practices
- The more fields you provide in each job posting object, the higher the confidence score
- The
enrichmentConfidencescore helps you filter high-quality results — scores above 70 indicate good data coverage - Use
maxJobsto control costs when processing large batches - For best results, include the full job description text, not just a summary
Compliance
This actor processes only data that you provide as input. It does not scrape, fetch, or access any third-party websites. You are responsible for ensuring that you have the right to process the job posting content you supply.
FAQ
Why is the enrichment confidence score low for some jobs?
Confidence depends on how much data is available in the job description. Short descriptions or those that omit salary, requirements, and skills will score lower. Providing the title, companyName, and location fields alongside the description helps the enrichment engine produce better results.
Can I chain this with job scraping actors? Yes. A common workflow is: scrape job listings with Indeed Scraper, then pass the results to Job Posting Enrichment for structured skill extraction, salary parsing, and seniority classification. Use Make or Zapier to automate the pipeline.
What skills does the actor recognize? The actor matches against a curated list of 200+ skills covering programming languages, frameworks, databases, cloud platforms, tools, and soft skills. Skills are extracted from both the title and description text.
Does this actor fetch job URLs or scrape websites? No. This actor processes only the data you provide as JSON input. It does not make any network requests to third-party websites. If you need to scrape job listings first, use Indeed Scraper or another job scraping actor.
Other lead generation tools
- Email Enrichment -- enrich email addresses with domain, provider, and validation data
- Email Finder -- find email addresses for companies and contacts
- Google Maps Lead Finder -- extract business leads from Google Maps search results
- Multi-Source Lead Enrichment -- normalize, score, and deduplicate leads from any source
- Lead Enrichment Confidence Scorer -- score lead data quality and completeness
- Website Contact Finder -- extract contact information from company websites