An AI agent that audits your LinkedIn profile against general best practices and returns an actionable report: an overall score, per-section scores and critiques, ready-to-paste rewritten copy, and a suggested keyword list to improve how easily recruiters find you.
You give it your profile as a LinkedIn "Save to PDF" export — no LinkedIn login, no API keys for LinkedIn, no scraping. The agent parses the PDF, sends the sections to Claude in a single structured call, and renders a clean report in your browser.
Status: in active development. See
docs/superpowers/specs/2026-07-14-linkedin-profile-agent-design.mdfor the full design.
LinkedIn's profile-editing API is not available to most developers, and scraping public profiles violates LinkedIn's Terms of Service and is fragile. Exporting your own profile to PDF is fully within your rights, needs no authentication, and works for everyone. LinkedIn provides this via Profile → Resources → Save to PDF.
- Overall profile score (0–100) with a per-section breakdown.
- Section-by-section critique for Headline, About, Experience, Education, and Skills.
- Ready-to-paste rewrites of each section, with a copy-to-clipboard button.
- Keyword suggestions to improve search visibility for recruiters.
- Local-first & private — runs on your machine; your profile is only sent to the Anthropic API for analysis, never stored.
A fixed, easy-to-reason-about pipeline: parse → analyze → render.
Browser (upload page)
│ POST /analyze (your LinkedIn PDF)
▼
FastAPI backend
│
├─ pdf_parser PDF bytes ─► { headline, about, experience, education, skills }
│
├─ analyzer sections ─► Claude (one structured call) ─► Report
│
└─ render report page ◄── Report (scores, critiques, rewrites, keywords)
The agent scores your profile against these best practices:
| Section | What "good" looks like |
|---|---|
| Headline | More than a job title — states value/specialty, keyword-rich |
| About | Strong hook in the first lines, first person, quantified impact, clear CTA |
| Experience | Achievement-oriented bullets with metrics, not a list of duties |
| Skills | Covers relevant industry terms so recruiter searches surface you |
| Completeness | Every section present and with meaningful depth |
- Python 3.11+
- FastAPI + Uvicorn — backend and local server
- Jinja2 — server-rendered pages (no SPA, no build step)
- pypdf — PDF text extraction
- Anthropic SDK — Claude for the analysis
(default model
claude-sonnet-4-6, configurable)
These steps describe the intended setup. Application code is being implemented against the approved design spec.
git clone https://github.com/phpdev-expert/linked-in-AI-agent.git
cd linked-in-AI-agent
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtexport ANTHROPIC_API_KEY="sk-ant-..."
# optional: override the default model
export ANTHROPIC_MODEL="claude-sonnet-4-6"Get a key from the Anthropic Console.
uvicorn app.main:app --reloadOpen http://localhost:8000, upload your LinkedIn PDF export, and view the report.
- In LinkedIn, go to your profile → Resources → Save to PDF.
- Open the app at http://localhost:8000.
- Upload the downloaded PDF.
- Review your scores, critiques, and rewrites — copy the rewritten sections straight into LinkedIn.
app/
main.py FastAPI routes; serves the pages
pdf_parser.py PDF bytes → sectioned profile text (pure, no network)
analyzer.py sections → Report via Claude (LLM client injected)
models.py Pydantic schemas (also the JSON contract for Claude)
templates/
upload.html upload page
report.html report page (scores, critiques, rewrites, keywords)
docs/superpowers/specs/
2026-07-14-linkedin-profile-agent-design.md full design spec
tests/ unit + integration tests (LLM mocked)
Modules are intentionally small and independently testable:
pdf_parseris pure — unit-tested against a sample PDF fixture.analyzertakes the Anthropic client as a parameter, so tests run against a mocked client (no network, no cost).mainhas one integration test forPOST /analyzewith the LLM mocked.
pytestYour profile PDF is parsed locally and its text is sent to the Anthropic API only for the duration of the analysis request. The app does not persist your profile or the generated report.
MIT (to be added).