A Chrome extension that helps you track job applications by extracting job descriptions from web pages, uploading your resume and cover letter to Google Drive, and logging everything to a Google Sheet.
- Dynamic Sheet Discovery: Automatically finds existing JobTracker sheets or creates new ones with unique IDs
- Session-Based Operation: No persistent storage - always discovers sheets fresh via API
- Smart Extraction: Automatically extracts company name, job title, and description from job posting pages
- Organized File Storage: Files are organized by company in
Job Tracker/[Company Name]/folders - File Upload: Upload resume and cover letter files to Google Drive with automatic organization
- Enhanced Google Sheets: 8-column tracking with status dropdown (applied, waitlist, interview, offer, rejected)
- Professional Formatting: Text wrapping for descriptions, clipped links, and optimized column widths
- Trash-Aware: Automatically handles trashed sheets and creates new ones seamlessly
- Pure Text Extraction: Filters HTML and extracts only clean text content
- Easy Tracking: Keep track of all your job applications in one place
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the following APIs:
- Google Drive API
- Google Sheets API
- Go to "Credentials" → "Create Credentials" → "OAuth 2.0 Client ID"
- Choose "Chrome Extension" as the application type
- Copy your Client ID
- Create a
.envfile in the project root - Add your Client ID:
CLIENT_ID=your-client-id.apps.googleusercontent.com - Run:
node update-from-env.js(this will create manifest.json from manifest.template.json with your CLIENT_ID)
Note: Make sure your .env file has the format:
CLIENT_ID=xxxxxx-xxxxx.apps.googleusercontent.com
Security Note: The manifest.json file is now generated and ignored by git to prevent committing your CLIENT_ID to version control.
- Open Chrome and go to
chrome://extensions/ - Enable "Developer mode" (toggle in top right)
- Click "Load unpacked"
- Select the folder containing this extension
- The extension should now appear in your extensions list
- Click the extension icon in your Chrome toolbar
- Click "Authenticate & Setup"
- Grant permissions for Google Drive and Google Sheets
- The extension will automatically:
- Search for existing JobTracker sheets via Google Drive API
- Use the first found JobTracker sheet, or create a new one named "JobTracker-{randomID}"
- Create a "Job Tracker" folder in your Google Drive (if it doesn't exist)
- Set up the sheet for current session use
- Navigate to a job posting page
- Click the extension icon in your Chrome toolbar
- Click "Extract from Page" to automatically fill in:
- Company Name
- Job Title
- Job Description
- Upload your resume and/or cover letter files (optional)
- Click "Save to Google Sheet"
The extension will:
- Upload your files to Google Drive in
Job Tracker/[Company Name]/folder - Create shareable links for your files
- Add a new row to your JobTracker sheet with:
- Date
- Company Name
- Job Title
- Job Description (text wrapped)
- Resume Link (text clipped)
- Cover Letter Link (text clipped)
- Job URL (text clipped)
- Status (dropdown: applied, waitlist, interview, offer, rejected)
The extension automatically creates a professionally formatted JobTracker sheet with:
Header Row (blue background, white bold text):
- Date (100px width)
- Company Name (150px width)
- Job Title (200px width)
- Job Description (300px width, text wrapped)
- Resume Link (200px width, text clipped)
- Cover Letter Link (200px width, text clipped)
- Job URL (250px width, text clipped)
- Status (120px width, dropdown validation)
Status Column Features:
- Dropdown menu with 5 options:
applied,waitlist,interview,offer,rejected - Automatically set to "applied" for new entries
- Users can manually update status to track application progress
Sheet Naming:
- New sheets are named
JobTracker-{randomID}(e.g.,JobTracker-A7B3X9) - Existing sheets are discovered automatically via Google Drive API
Files are automatically organized in Google Drive:
Job Tracker/
├── Company A/
│ ├── Resume.pdf
│ └── Cover Letter.pdf
├── Company B/
│ ├── Resume.pdf
│ └── Cover Letter.pdf
└── ...
Each company gets its own subfolder, making it easy to find files for specific applications.
The extension requires the following permissions:
activeTab: To access the current page and extract job informationidentity: To authenticate with Google services- Google APIs: To upload files, manage sheets, and search for existing JobTracker sheets
- Make sure you've set up the OAuth 2.0 Client ID correctly in Google Cloud Console
- Ensure the Client ID in
manifest.jsonmatches your Google Cloud project
- Check that Google Drive API is enabled in your Google Cloud project
- Ensure you're authenticated (click "Authenticate with Google")
- Verify your Google Sheet ID is correct
- Make sure Google Sheets API is enabled
- Ensure the sheet is accessible (not restricted)
- Some job sites may have unique structures
- You can always manually enter the job title and description
To modify the extension:
- Make your changes to the files
- Go to
chrome://extensions/ - Click the refresh icon on the extension card
- Test your changes
- Dynamic Discovery: Extension searches for existing JobTracker sheets on every authentication (no persistent storage)
- Trash Handling: Automatically detects trashed sheets and creates new ones seamlessly
- Professional Formatting: Job descriptions wrap properly, links are clipped to prevent overflow
- Status Tracking: Built-in dropdown for tracking application status through the hiring pipeline
- Company Organization: Files are organized by company name in subfolders
- File Sharing: Files are made publicly viewable (anyone with the link can view)
- Smart Extraction: Uses multiple regex patterns to extract company name, job title, and description
- Pure Text: All extracted content is filtered to remove HTML and return only clean text
- Works Best With: Standard job posting sites (LinkedIn, Indeed, company career pages, etc.)
- Manual Entry: You can always manually enter information if extraction doesn't work for a specific site