About this tool
Keep a private, searchable record of active job applications without creating an account or storing career data on a remote service.
Job Application Tracker is a small, single-page organizer for a job search. Each record holds a company, a role, one of six status stages, an application date, an optional link, a contact name, and free-form notes up to 5,000 characters. Everything is saved to localStorage in the current browser profile, with a hard ceiling of 500 records, so there is nothing to sign up for and no server holding your history. The list view shows a live count per status, a search box that matches across fields, and a status filter. Import CSV lets you bring in an existing spreadsheet, and Export CSV writes a UTF-8 file with formula-leading cells neutralized so Excel or Google Sheets will not execute them.
- Validates and stores up to 500 application records in local browser storage with add, edit, two-step delete, search, and status filtering.
- Tracks Interested, Applied, Interview, Offer, Rejected, and Withdrawn stages.
- Imports CSV files up to 2 MB and 1,000 rows with invalid and duplicate row counts, then exports UTF-8 CSV with spreadsheet formula neutralization.
How to use Application Tracker
Fill in the editor at the top: company and role are required, then pick a status from Interested, Applied, Interview, Offer, Rejected, or Withdrawn, and set the application date with the date picker. Add a posting URL (http or https only), a contact name, and notes, then save. The record appears in the list with its status badge. Use the search field or the Filter status dropdown to narrow the list as it grows. Click the edit icon on a row to load it back into the form and change its stage. Deleting takes two steps: the trash icon, then Confirm delete. Import CSV accepts files up to 2 MB and 1,000 data rows with company and role headers, and reports how many rows were imported, skipped as duplicates, or rejected as invalid.
When this tool is useful
- A new graduate juggling twenty or thirty applications who keeps losing track of which companies have already replied.
- A career changer who wants to record recruiter names and follow-up notes without putting personal job-search data in a cloud spreadsheet.
- Someone relocating who applies across several cities and needs to filter by status before a weekly follow-up session.
- A contractor tracking recurring client pitches, where Withdrawn and Rejected outcomes are as useful to keep as Offers.
- Anyone moving off a messy spreadsheet who wants a quick CSV import, then a cleaner list with proper status stages.
Practical tips
- Export a CSV right after any big update. Browser storage can be wiped by a cache clear, a profile reset, or private browsing, and the tool cannot recover it.
- When preparing a CSV to import, use lowercase headers such as company, role, status, appliedDate, url, contact, and notes, with dates written as YYYY-MM-DD.
- Duplicates are detected by matching company, role, application date, and URL together, so the same role applied on a different date will import as a separate record.
- The status field in an imported CSV is matched case-insensitively against the six stage names; anything else makes the row invalid rather than silently defaulting.
- If the page reports that browser storage is unavailable, your records will not persist; export immediately and try a normal browser window.
Examples you can test
Load an example, compare the result with the expected output, then replace it with your own input.
Move a candidate through the pipeline
Example input
Company: Northwind Labs, Role: Backend Engineer, Status: Applied, Date: 2026-08-14
Expected output
One record in the list; after an interview invite, edit it and change the status to Interview
The status counters above the list update immediately, giving you a one-line view of how many applications sit in each stage.
Import an existing spreadsheet
Example input
A 40-row CSV with company, role, status, appliedDate, and url columns
Expected output
Imported 37; skipped 2 duplicates and 1 invalid row
The invalid row was most likely a status outside the six supported names or a URL that did not start with http or https.
Validation checklist
- Confirm company and role are filled in before saving; both are required.
- Check that the application date is realistic and in the past, not a placeholder.
- Read the import summary counts before assuming every spreadsheet row arrived.
- Open the exported CSV in a spreadsheet to confirm columns and dates look right.
- Keep an exported backup somewhere outside the browser, since localStorage is not permanent.