A Chrome extension that extracts job application data from LinkedIn, Indeed, YCombinator, Wellfound, Glassdoor, and Monster job postings and copies it to your clipboard in a customizable YAML format.
- Install the extension (see Installation)
- Navigate to a LinkedIn, Indeed, YCombinator, Wellfound, Glassdoor, or Monster job posting
- Press Ctrl+Shift+E (Windows/Linux) or Cmd+Shift+E (Mac)
- Paste the extracted data into your
applications.yamlfile
That's it! The job data is now in your clipboard, ready to track.
- Keyboard Shortcut - Fast extraction with Ctrl+Shift+E (Cmd+Shift+E on Mac)
- Customizable Templates - Configure your own YAML output format
- Auto-Generated Job IDs - Unique 10-character alphanumeric IDs
- Complete Job Descriptions - Full job description text with proper YAML formatting
- Clipboard Copy - Automatically copies formatted data to clipboard
- Visual Feedback - Chrome notifications confirm successful extraction
This extension is provided for personal productivity use only.
- Respect Terms of Service: Users are responsible for complying with each job site's Terms of Service when using this extension
- No Warranty: This software is provided "as is" under the MIT License, without warranty of any kind, express or implied
- Site Changes: Job sites may update their HTML structure at any time, which may temporarily break scrapers until updated
- Personal Use: This tool is designed for individual job seekers to organize their applications, not for bulk data collection or commercial scraping
- Rate Limits: Use responsibly and respect site rate limits and automated access policies
- Your Responsibility: By using this extension, you accept full responsibility for your usage and compliance with applicable terms and laws
✅ Extracts publicly visible job posting data from pages you're already viewing
✅ Formats the data for your personal job tracking workflow
✅ Copies the formatted data to your clipboard for manual pasting
❌ Scrape data in bulk or at scale
❌ Bypass authentication or paywalls
❌ Store or transmit your data to external servers
❌ Violate site terms of service (when used as intended for personal job tracking)
If you have concerns about using this tool, please review the Terms of Service for each job site you use it with.
- Download or clone this repository
- Open Chrome and navigate to
chrome://extensions/ - Enable "Developer mode" in the top right corner
- Click "Load unpacked"
- Select the
jobbernaut-extractfolder - The extension icon should appear in your Chrome toolbar
The extension works on both LinkedIn job search results pages and individual job posting pages.
Keyboard Shortcut:
- Navigate to a LinkedIn job page (search results or individual posting)
- Press Ctrl+Shift+E (Windows/Linux) or Cmd+Shift+E (Mac)
- The job data will be instantly extracted and copied to your clipboard
- You'll see a notification: "✓ Copied to clipboard!"
- Paste the data into your
applications.yamlfile
Tips:
- The keyboard shortcut is faster for extracting multiple jobs quickly
- Works on both search results pages and individual job postings
- On search results pages, click a job in the left sidebar first to load its details
- Navigate to
chrome://extensions/ - Find "Jobbernaut Extract" in the list
- Click "Details"
- Click "Extension options"
- The settings page will open in a new tab
In the settings page, you'll find:
These placeholders will be replaced with actual job data:
{job_id}- Auto-generated unique ID (e.g., "ABC123XYZ0"){job_title}- Job title from the posting{company_name}- Company name{location}- Job location{status}- Always set to "pending"{posting_link}- URL of the job posting{job_description}- Full job description (formatted with YAML pipe syntax)
- job_id: {job_id}
job_title: {job_title}
company_name: {company_name}
location: {location}
status: {status}
posting_link: {posting_link}
job_description: {job_description}- Edit the template in the text area
- Use any of the available field placeholders
- Click "Save Template" to save your changes
- The preview section shows how your output will look with sample data
- Click "Reset to Default" to restore the original template
When you extract a job posting, the output will look like this:
- job_id: K7M9N2P4Q1
job_title: Senior Software Engineer
company_name: Tech Company Inc.
location: San Francisco, CA (Remote)
status: pending
posting_link: https://www.linkedin.com/jobs/view/1234567890
job_description: |
We are seeking a talented Senior Software Engineer to join our team.
Responsibilities:
- Design and develop scalable applications
- Collaborate with cross-functional teams
- Mentor junior developers
Requirements:
- 5+ years of experience
- Strong knowledge of JavaScript/TypeScript
- Experience with React and Node.js- Content Script: When you visit a LinkedIn job page, the extension injects a content script that can read the page content
- Data Extraction: When you press Ctrl+Shift+E, it extracts:
- Job title
- Company name
- Location
- Full job description
- Posting URL
- Data Formatting: The extension:
- Generates a unique job ID
- Formats the job description with YAML pipe syntax for multi-line content
- Applies your custom template
- Escapes special YAML characters as needed
- Clipboard Copy: The formatted data is copied to your clipboard
- Notification: A Chrome notification confirms the successful extraction
jobbernaut-extract/
├── manifest.json # Extension configuration
├── background.js # Background service worker
├── content/
│ ├── shared-utils.js # Shared utilities for all scrapers
│ ├── linkedin-scraper.js # LinkedIn-specific scraper
│ ├── indeed-scraper.js # Indeed-specific scraper
│ ├── ycombinator-scraper.js # YCombinator-specific scraper
│ ├── wellfound-scraper.js # Wellfound-specific scraper
│ ├── glassdoor-scraper.js # Glassdoor-specific scraper
│ └── monster-scraper.js # Monster-specific scraper
├── options/
│ ├── options.html # Settings page
│ ├── options.css # Settings page styles
│ └── options.js # Settings page logic
├── icons/
│ ├── icon16.png # 16x16 icon
│ ├── icon48.png # 48x48 icon
│ └── icon128.png # 128x128 icon
└── README.md # This file
The extension uses a modular architecture with shared utilities to minimize code duplication:
All common functionality is centralized in a shared utilities module:
generateJobId()- Generates unique 10-character alphanumeric IDsformatJobDescription()- Formats job descriptions with YAML pipe syntaxescapeYAML()- Escapes special YAML charactersgetDefaultTemplate()- Returns the default YAML templateformatData()- Replaces template variables with actual datashowNotification()- Displays on-page success notificationsextractAndCopyJobData()- Generic extraction logic that works with any scrapersetupEventListeners()- Sets up message listeners and keyboard shortcuts
Each job board has a lightweight scraper that focuses only on extracting data:
linkedin-scraper.js(~100 lines) - LinkedIn-specific CSS selectors and logicindeed-scraper.js(~100 lines) - Indeed-specific CSS selectors and logicycombinator-scraper.js(~100 lines) - YCombinator-specific CSS selectors and logicwellfound-scraper.js(~100 lines) - Wellfound-specific CSS selectors and logic
✅ DRY (Don't Repeat Yourself) - No code duplication across scrapers ✅ Easy Maintenance - Bug fixes in one place benefit all scrapers ✅ Consistency - Same behavior across all job boards ✅ Extensibility - Adding new job boards requires minimal code (~100 lines) ✅ Testability - Shared utilities can be tested independently
Keyboard Shortcut (Ctrl+Shift+E)
↓
Content Script (extracts job data from page)
↓
Shared Utilities (formats data using template)
↓
Clipboard (copies YAML output)
↓
Notification (confirms success)
The extension requires the following permissions:
activeTab- To access the current LinkedIn job pagestorage- To save your custom templateclipboardWrite- To copy data to clipboardnotifications- To show success/error notificationsscripting- To inject the content scripthttps://www.linkedin.com/*- To access LinkedIn job pages
- Ensure you're on a valid LinkedIn job posting page
- LinkedIn may have changed their page structure - the extension may need updates
- Check that you have a valid template with at least one field
- Try resetting to default and customizing from there
- Make sure you've granted clipboard permissions to the extension
- Try pressing Ctrl+Shift+E again
The extension is designed to be easily extended to support additional job boards beyond LinkedIn.
Supported Job Boards:
- ✅ LinkedIn (built-in)
- ✅ Indeed (built-in)
- ✅ YCombinator (built-in)
- ✅ Wellfound (built-in)
- ✅ Glassdoor (built-in)
- ✅ Monster (built-in)
- 📝 Any other job board
The extension allows you to fully customize the YAML output format.
Example Custom Template:
- job_info:
id: {job_id}
title: {job_title}
company: {company_name}
application:
status: {status}
applied_date: ""
links:
posting: {posting_link}
description: {job_description}The extension uses a modular architecture:
Keyboard Shortcut
↓
Content Script (extracts job data from page)
↓
Template Engine (formats data)
↓
Clipboard (copies YAML output)
- Clone the repository
- Make your changes
- Test in Chrome:
- Go to
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the extension directory
- Go to
- Submit a pull request
- Initial release
- LinkedIn job extraction
- Customizable YAML templates
- Keyboard shortcut support
- Settings page
Extension doesn't work on LinkedIn
- Make sure you're on a job posting page (URL contains
/jobs/) - Try refreshing the page
- Check that the extension is enabled in
chrome://extensions/
Job description is incomplete
- LinkedIn may have changed their HTML structure
- Open an issue on GitHub with the job posting URL
Template not saving
- Ensure your template includes at least one variable
- Check browser console (F12) for errors
- Try resetting to default template
This project is open source. Feel free to use, modify, and distribute as needed.
Built for job seekers who want to efficiently track their applications in YAML format.