AI Job Match + LinkedIn Jobs Scraper: scored to your CV on the Apify Store →
A step-by-step tutorial with AI Job Match + LinkedIn Jobs Scraper on Apify — https://apify.com/rich_minds/linkedin-job-match-ai. Disclosure: written by the Actor's developer.
A LinkedIn search for "python developer" in the United States returns hundreds of jobs a week. To find the ten worth applying to you open every one, read the description against your CV, skip the reposts, the staffing agencies and the "we are unable to sponsor visas" posts, and then write a short note to whoever posted the job. At 10–15 minutes per job that is a few hours a week for an active job seeker, and a full day for a career coach running searches for several candidates.
A plain LinkedIn jobs scraper only speeds up the first step. You get every raw row — reposts, agencies and jobs you could never get included — and you pay for each of them. The reading, which is the slow part, is still yours.
What you actually want is a job match score: for every new job, a number from 0 to 100 that says how well it fits your CV, the skills you already have, the ones you would need to prepare, and whether the employer sponsors visas — with the junk gone before you ever see it. That is what this tutorial sets up, first on free sample data, then on your own LinkedIn search, then as a daily job alert.
Open https://apify.com/rich_minds/linkedin-job-match-ai and click Try it. The form is pre-filled with 7 sample LinkedIn jobs and a sample backend engineer's CV (the same input as storage-example/INPUT.json in the repo). Press Start.
In a few seconds the run drops the staffing-agency post, the "unable to sponsor visas" post and a repost of the same job under a new id — none of them charged — and returns 3 matched jobs. This is the real output of that demo, scored by the free rules (AI off):
| Rank | Job (sample data) | Score | Verdict | Skills you match | Skills to prepare | Salary |
|---|---|---|---|---|---|---|
| 1 | Senior Backend Engineer (Python) — Ledgerline | 91 | strong | Python, PostgreSQL, Kubernetes, AWS, Django, Redis | Celery | $150,000–$185,000 / yr |
| 2 | Staff Software Engineer, APIs — Orbital Freight | 85 | strong | Python, PostgreSQL, FastAPI, Kubernetes, AWS, GraphQL, Redis, Docker | Kafka, Terraform | $170,000–$210,000 / yr |
| 3 | Senior Python Engineer - Data Platform — Tidewater Analytics | 68 | good | Python, FastAPI, Kubernetes, AWS | SQL, Snowflake, Spark, Airflow, dbt, Terraform | $140,000–$170,000 / yr |
Every row also carries flags with the sentence they were read from: the first two jobs offer sponsorship, the third offers relocation, and all three have a low ghost-job risk. The Shortlist view in the Console shows exactly these columns, best match first.
Now point it at LinkedIn:
sourceMode) to Search LinkedIn.searchKeywords), a location and Posted within (datePosted: past week for the first run).candidateProfile, or put a link to your CV in candidateProfileUrl (PDF, DOCX or text — LinkedIn's More → Save to PDF export of your profile works).workplace: "remote", minSalary: 140000, needsVisaSponsorship: true and minScore: 60. These filters run on the returned fields after LinkedIn's own search, so a job that is not really remote or pays below your floor never reaches you — and is never charged.maxDiscoveryChargeUsd at $0.50 for the first run: it caps what the LinkedIn scraper can spend on your account.The live search runs curious_coder/linkedin-jobs-scraper on your own Apify account (a plan that can run Store Actors is needed), reads LinkedIn's public, logged-out job pages — no cookies, your LinkedIn account is never touched — and then does the reading for you.
Each job within 20 points of your minimum score gets one grounded model call. It returns a 0–100 AI match score with reasons that cite the description or your CV, the requirements quoted from the text (years, must-haves, degree, sponsorship, remote policy) and — for strong and good matches only — a ≤ 600-character note to the person who posted the job and a cover-letter opening. Skills, requirements and sponsorship are kept only when the description names them; invented numbers, salary talk and placeholders are removed in code.
You do not need an API key: the default model runs through Apify's model access on your plan. If you prefer your own OpenAI / Anthropic / Gemini / Groq key, set llmProvider: "byok" and llmApiKey.
Pricing is pay per result: one event per matched job, no start fee, and your first 25 matched jobs are free.
minScore, jobs that fail a filter, duplicates and reposts, jobs you already received.A worked example (an estimate until the first live run is published): 3 searches × 40 jobs = 120 scraped jobs at $0.002 each on your account = $0.24. If about 30 pass your filters and minimum score, the AI tier adds 30 × $0.01 = $0.30 plus ≈ $0.19 of tokens — ≈ $0.73 for the run. With the AI off it is ≈ $0.30. On your first run, 25 of those 30 matched jobs are free.
For comparison, $0.002 per matched job is 1.7× cheaper than the $0.0035 median unit price of the 10 job Actors the Store lists for "ai job match" (checked 2026-09-25) — and those charge per raw row.
Schedule the same input daily (Console → Actions → Schedule, 7:00) with datePosted: "past24Hours" and keep dedupeAcrossRuns: true. Every job you received is remembered for 60 days by its LinkedIn id and by company + title + location, so the next morning's run delivers — and charges — only what is new, reposts included. Type your address into notifyEmail and the digest (new jobs, top 10 with links and why they fit, a market report of salaries and most-asked skills) lands in your inbox.
Ready-made Tasks are in the repo's storage-example/tasks/: daily remote Python alerts with H-1B sponsorship, H-1B visa sponsorship alerts for ML / data roles, remote frontend jobs in Europe, new-grad software jobs, and weekly rosters for career coaches and recruiters.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("rich_minds/linkedin-job-match-ai").call(run_input={
"sourceMode": "actor",
"searchKeywords": ["senior python engineer", "django developer", "platform engineer"],
"location": "United States", "datePosted": "past24Hours",
"candidateProfile": "Backend engineer, 6 years of experience. Python (Django, FastAPI), PostgreSQL, Redis, Docker, "
"Kubernetes and AWS … Needs H-1B visa sponsorship.", # or "candidateProfileUrl": a PDF link
"workplace": "remote", "needsVisaSponsorship": True, "minScore": 65,
"maxDiscoveryChargeUsd": 0.5,
}, timeout_secs=1260)
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["rank"], job["title"], job["companyName"], job["matchScore"], job["applyUrl"])
The same Actor works as a tool for Claude, ChatGPT or any MCP client (https://mcp.apify.com/?actors=rich_minds/linkedin-job-match-ai), and webhookUrl sends each matched job to Zapier, Make, n8n, Notion or Airtable. A CSV application tracker template (Status, Applied on, Next follow-up, plus the Shortlist columns) is in docs/tracker/.
You have gone from reading every job ad to a ranked shortlist of the jobs that fit your CV, with the junk removed for free and a daily alert that only brings new jobs. Try the free demo at https://apify.com/rich_minds/linkedin-job-match-ai — and if it saves you time, a review on the Store helps other job seekers find it.
AI Job Match + LinkedIn Jobs Scraper: scored to your CV on the Apify Store →