AI Job Match + LinkedIn Jobs Scraper: scored to your CV on the Apify Store →

How to get an AI job match for every new LinkedIn job (and stop reading 200 job ads a week)

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.

The problem

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.

Step 1 — the free demo (30 seconds, any Apify plan)

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):

RankJob (sample data)ScoreVerdictSkills you matchSkills to prepareSalary
1Senior Backend Engineer (Python) — Ledgerline91strongPython, PostgreSQL, Kubernetes, AWS, Django, RedisCelery$150,000–$185,000 / yr
2Staff Software Engineer, APIs — Orbital Freight85strongPython, PostgreSQL, FastAPI, Kubernetes, AWS, GraphQL, Redis, DockerKafka, Terraform$170,000–$210,000 / yr
3Senior Python Engineer - Data Platform — Tidewater Analytics68goodPython, FastAPI, Kubernetes, AWSSQL, 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.

Step 2 — your own LinkedIn job search

Now point it at LinkedIn:

  1. Set Where do the jobs come from? (sourceMode) to Search LinkedIn.
  2. Type 1–5 search terms (searchKeywords), a location and Posted within (datePosted: past week for the first run).
  3. Paste your CV summary into 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).
  4. Set the filters that matter to you. For example 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.
  5. Keep 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.

Step 3 — turn the AI match on

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.

What a run costs

Pricing is pay per result: one event per matched job, no start fee, and your first 25 matched jobs are free.

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.

Step 4 — make it a daily job alert

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.

Step 5 — call it from code, an agent or your tracker

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/.

Wrap-up

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 →