linkedin-auto-apply

workflowv1.0.0

Automated LinkedIn job applications with headless Chromium and local LLM

Install

kdeps registry install linkedin-auto-apply

Then run locally:

kdeps exec linkedin-auto-apply

Configure LLM provider in ~/.kdeps/config.yaml (created automatically on first run).

README

linkedin-auto-apply

Automated LinkedIn job applicant powered by a headless Chromium browser and a local LLM.

Replicates the full auto-apply/ bot natively using kdeps browser resources: logs in, searches jobs with filters, scores each listing against your profile, and runs the complete Easy Apply form flow (fill questions, upload resume, submit) for every matched job.


Pipeline

StepResourceWhat it does
1load-profileParse YAML front matter from the file input source
2set-profilePopulate kdeps memory from parsed profile JSON
3validateCheck all required inputs
4loginChromium logs in to LinkedIn, session persisted
5search-jobsNavigate job search, extract listings via JS
6analyze-jobsLLM scores each job, filters by threshold, writes cover letter
7apply-jobPer matched job: click Easy Apply, fill form, upload resume, submit
8responseReturn applied/skipped/failed summary

Prerequisites

  • kdeps installed (kdeps --version)
  • Ollama running locally with llama3.2
    ollama pull llama3.2
    
  • A LinkedIn account with Easy Apply access
  • Your resume as a local PDF file

Profile file

Copy sample-profile.md to joel-profile.md (or any name) and fill in your details. The file uses YAML front matter between --- delimiters:

---
job_title: "Senior Software Engineer"
location: "Amsterdam, Netherlands"
candidate_name: "Jane Doe"
linkedin_email: "jane@example.com"
linkedin_password: "your-password"
resume_path: "/Users/jane/resume.pdf"
# ... see sample-profile.md for all fields
---

Run

Pass the profile file via --file, stdin, or KDEPS_FILE_PATH:

# --file flag (recommended)
kdeps run examples/linkedin-auto-apply --file joel-profile.md

# stdin pipe
cat joel-profile.md | kdeps run examples/linkedin-auto-apply

# environment variable
KDEPS_FILE_PATH=joel-profile.md kdeps run examples/linkedin-auto-apply

The workflow reads the markdown file, parses the YAML front matter, and runs the full browser automation pipeline without any API server or HTTP POST required.


How it compares to the Selenium bot

FeatureSelenium bot (auto-apply/)This workflow
LoginSelenium + credentialsPlaywright/Chromium + credentials
Job searchdriver.get(search URL)Browser resource navigate
FiltersClick UI filter elementsURL params (f_TPR, f_WT, f_LF)
Job scoringNot built-inLLM scores 0-100 against profile
Cover letterStatic text from configLLM generates per-job
Easy ApplySelenium click-throughBrowser evaluate JS
Form fillingLabel-match + config valuesLabel-match + config values (same logic)
Resume uploadinput.send_keys(path)Browser upload action
Submitwait_span_click("Submit")JS click submit button
Already-applied checkJob state footer textJS footer text check
SessionSelenium WebDriverPlaywright sessionId
Profile inputPython config filesFile input source (--file / stdin)

Tuning

Use a larger model for better job scoring in workflow.yaml:

model: deepseek-r1

Lower the score threshold in your profile file:

min_match_score: "40"

Remote jobs only:

remote_only: "true"

Versions

VersionPublishedStatus
1.0.04/11/2026active

Details

Author
kdeps
License
Apache-2.0
Latest Version
1.0.0
Published
4/11/2026

Tags

browserautomationllm