A Chrome extension that captures job data from LinkedIn as you browse, stores it locally, and analyzes common requirements using keyword extraction and optional LLM integration.
- Capture Jobs: Save job listings as you browse LinkedIn
- Local Storage: All data stored in your browser - no external servers
- Deduplication: Automatically prevents duplicate captures
- Export Data: Export to JSON or CSV formats
- Keyword Analysis: Built-in skill frequency analysis
- LLM Analysis: Optional deep analysis using OpenAI or Anthropic APIs
- Open Chrome and go to
chrome://extensions/ - Enable "Developer mode" (toggle in top right)
- Click "Load unpacked"
- Select the
extensionfolder from this project - The extension icon should appear in your toolbar
The analyzer scripts require Node.js 14 or higher.
# No npm install needed - uses only built-in Node.js modules
node analyzer/keyword_analyzer.js --help
node analyzer/llm_analyzer.js --help- Go to LinkedIn and navigate to a job listing
- Click the extension icon in your toolbar
- Click "Capture Current Job"
- The job details will be saved locally
You can also browse through your saved jobs on LinkedIn and capture each one as you view it.
Click the extension icon to see:
- Total number of captured jobs
- List of all captured jobs
- Storage usage
From the extension popup:
- Export JSON: Full job data including descriptions
- Export CSV: Spreadsheet-compatible format
Click "Analyze Requirements" in the popup to see:
- Most common skills by category
- Frequency counts and percentages
# Basic analysis
node analyzer/keyword_analyzer.js linkedin-jobs.json
# Show top 20 skills per category
node analyzer/keyword_analyzer.js linkedin-jobs.json --top 20
# Save results to JSON
node analyzer/keyword_analyzer.js linkedin-jobs.json --output results.json
# Output as CSV
node analyzer/keyword_analyzer.js linkedin-jobs.json --csv > skills.csvFor deeper insights using AI:
# Using Anthropic Claude (default)
export ANTHROPIC_API_KEY=your-api-key
node analyzer/llm_analyzer.js linkedin-jobs.json
# Using OpenAI
export OPENAI_API_KEY=your-api-key
node analyzer/llm_analyzer.js linkedin-jobs.json --provider openai
# Save analysis to file
node analyzer/llm_analyzer.js linkedin-jobs.json --output analysis.mdThe LLM analyzer provides:
- Categorized technical skills analysis
- Experience requirements summary
- Soft skills identification
- Industry trends
- Personalized recommendations
Convert exported data to different formats:
# Convert to CSV
node analyzer/export.js linkedin-jobs.json --format csv --output jobs.csv
# Create Markdown table
node analyzer/export.js linkedin-jobs.json --format markdown --output jobs.md
# Plain text for LLM input
node analyzer/export.js linkedin-jobs.json --format text --output descriptions.txt
# Compact summary by company
node analyzer/export.js linkedin-jobs.json --format summarylinkedin-optimizer/
├── extension/ # Chrome extension
│ ├── manifest.json # Extension configuration
│ ├── content.js # LinkedIn page data extraction
│ ├── background.js # Storage management
│ ├── popup/
│ │ ├── popup.html # Extension popup UI
│ │ ├── popup.js # Popup logic
│ │ └── popup.css # Styling
│ └── icons/ # Extension icons
├── analyzer/
│ ├── keyword_analyzer.js # Local keyword frequency analysis
│ ├── llm_analyzer.js # AI-powered deep analysis
│ └── export.js # Data export utilities
├── package.json
└── README.md
- All job data is stored locally in your browser using Chrome's storage API
- No data is sent to external servers (except when using the optional LLM analyzer)
- You control your data - export or delete it anytime
- The LLM analyzer sends job descriptions to OpenAI/Anthropic APIs - review their privacy policies
- Make sure you're on a LinkedIn job detail page (URL contains
/jobs/view/or/jobs/collections/) - Wait for the page to fully load before capturing
- Check the browser console for error messages
LinkedIn occasionally updates their page structure. If extraction fails:
- Open browser DevTools (F12)
- Inspect the job title/company/description elements
- Update the selectors in
content.jsif needed
Chrome extensions have storage limits. If you've captured many jobs:
- Export your data
- Clear captured jobs
- Consider deleting jobs you no longer need
The extension uses these selectors (may need updates if LinkedIn changes):
| Element | Primary Selector |
|---|---|
| Job Title | .job-details-jobs-unified-top-card__job-title |
| Company | .job-details-jobs-unified-top-card__company-name |
| Location | .job-details-jobs-unified-top-card__bullet |
| Description | .jobs-description__content |
MIT License - feel free to modify and use as needed.