Skip to content

muhammad-saadd/applyai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ApplyAI

AI-Powered Job Application Assistant for Chrome

Fill job applications on Greenhouse, Lever, Ashby, Workday, and SmartRecruiters with tailored, resume-aware content generated by OpenAI — in one click.


Chrome Extension Manifest V3 OpenAI License: MIT Version Privacy First


ApplyAI is a free, open-source Chrome extension that reads any job listing, understands the role, and fills the application form with answers tailored to your resume and writing style. No backend, no tracking, no data stored off your machine.

Features · Installation · Setup · Usage · Supported Portals · How It Works · Privacy · Development · Contributing


Table of Contents


Overview

ApplyAI turns the most tedious part of a modern job search — filling out the same form on Greenhouse for the hundredth time — into a one-click action. It:

  1. Detects when you are on a job application form on a supported portal.
  2. Extracts the job title, company, and full job description from the page.
  3. Reads your resume (and optional writing sample) from local storage.
  4. Generates tailored answers for every field using OpenAI.
  5. Fills the form with the generated content — you review and submit.

Everything runs in your browser. Your API key, resume, and personal data never touch a server you do not control.

Perfect for: software engineers, product managers, designers, and any job seeker applying to many roles at modern tech companies that use Greenhouse, Lever, Ashby, Workday, or SmartRecruiters.


Features

Feature Description
One-Click Auto-Fill Detect a job form, click once, walk away with a fully filled application.
Tailored Cover Letters Cover letters are written specifically for the role and company, never generic.
Resume-Aware Answers The AI matches your real experience to the job requirements — no hallucinated skills.
Tone Matching Provide a writing sample and the AI mirrors your voice, vocabulary, and formality.
Multi-Portal Support Works on Greenhouse, Lever, Ashby, Workday, and SmartRecruiters out of the box.
Privacy First No backend, no telemetry, no accounts. Data stays in your browser.
Bring Your Own Key Use your own OpenAI API key. You pay OpenAI directly — typically less than $0.01 per application with gpt-4o-mini.
Configurable Behavior Toggle auto-detect, auto-fill, and cover letter generation per your workflow.
Context Menu Action Right-click anywhere on a job page to analyze with ApplyAI.
Open Source (MIT) Audit the code, fork it, self-host it.

Installation

ApplyAI is a Manifest V3 Chrome extension. Install it as an unpacked extension from source in under two minutes.

Prerequisites

  • Google Chrome, Microsoft Edge, Brave, Arc, or any Chromium-based browser (version 114+ recommended)
  • An OpenAI API key (instructions below)

Step 1 — Get the Code

Clone the repository:

git clone https://github.com/muhammad-saadd/applyai.git
cd applyai

Or download the latest release as a ZIP from the Releases page and extract it.

Step 2 — Load the Extension in Chrome

  1. Open your browser and navigate to chrome://extensions (or edge://extensions, brave://extensions, etc.).
  2. Toggle Developer mode on (top-right corner).
  3. Click Load unpacked.
  4. Select the applyai folder you just cloned or extracted.
  5. The ApplyAI icon appears in your toolbar. Pin it for easy access (puzzle-piece icon → pin).

Step 3 — Verify the Install

Click the ApplyAI icon. You should see the popup with status indicators. If you see warnings about a missing API key or resume, that is expected — proceed to setup.


Setup

1. Get an OpenAI API Key

  1. Go to platform.openai.com/api-keys.
  2. Sign in (or create an account).
  3. Click Create new secret key.
  4. Name it (e.g., "ApplyAI") and copy the key. It starts with sk-....
  5. Add a payment method under Billing if you have not already.
  6. (Optional but recommended) Set a usage limit under Usage limits.

Cost note: A typical application fill with gpt-4o-mini costs less than $0.01. One hundred applications cost roughly $0.50–$1.00.

2. Add Your Resume

Open the ApplyAI options page (right-click the icon → Options, or click the icon → Open Settings).

  • Recommended: Paste your resume text directly into the Resume textarea.
  • Alternative: Upload a .txt or .pdf file. (PDF support uses basic text extraction; for best results, copy-paste.)
  • Click Save.

3. (Optional) Add a Writing Sample

Paste a cover letter, email, or any writing that represents your natural voice. ApplyAI will mirror your tone, sentence length, and vocabulary when generating cover letters and short answers.

4. Configure Behavior

In Behavior Settings, toggle:

  • Auto-detect job pages — show the floating ApplyAI banner automatically.
  • Auto-fill on detection — generate and fill without a second click (use with care).
  • Generate cover letter — turn off if you only want short-answer fields filled.

5. Save Your API Key

In the API Key field, paste your sk-... key and click Save.

You are ready to apply.


Usage

Method A — The Floating Banner (Recommended)

  1. Navigate to a job application page on a supported portal.
  2. The ApplyAI banner slides in from the top: "ApplyAI: Job application detected."
  3. Click Fill with AI.
  4. A modal appears showing the generated content for each field.
  5. Review and edit anything you want to change.
  6. Click Fill All Fields.
  7. The form is populated. Add the final touches (resume file upload, references) and submit.

Method B — The Toolbar Popup

  1. On any job listing or application page, click the ApplyAI icon.
  2. The popup shows the detected job title and company (or a warning if none is detected).
  3. Click Generate & Fill Application.
  4. Review the modal, edit, and confirm.

Method C — Right-Click Context Menu

  1. Right-click anywhere on the page.
  2. Select Analyze this job with ApplyAI.
  3. The fill flow starts.

Supported Job Portals

Portal Domain Status Notes
Greenhouse greenhouse.io Primary Most reliable detection and field extraction.
Lever lever.co Primary Full support for Lever-hosted application forms.
Ashby ashbyhq.com Secondary Tested against Ashby v2 application flows.
Workday myworkdayjobs.com Secondary Heavy SPA — some variants may need a manual refresh.
SmartRecruiters smartrecruiters.com Experimental Varying form implementations; results may vary.
Other sites any Fallback A generic extractor attempts to detect and fill any standard form.

Want support for a new portal? Open an issue with the URL pattern and, if possible, a sample page.


How It Works

ApplyAI follows a clean, five-stage pipeline that runs entirely in your browser.

+-------------+     +---------------+     +----------------+     +----------------+     +-------------+
|  1. Detect  | --> |  2. Extract   | --> |  3. Build Prompts| -> |  4. Generate   | --> |  5. Fill    |
|    Portal   |     |   Job + Form  |     |   (system+user) |     |   via OpenAI   |     |   the Form  |
+-------------+     +---------------+     +----------------+     +----------------+     +-------------+
       |                   |                     |                       |                   |
   hostname          DOM scan &            Resume + JD +           gpt-4o-mini         Unique selector
   matching          portal-specific       field schema            chat completion     + native input
                     extractors                                                      event dispatch

Stage 1 — Detect

content_scripts/detector.js matches window.location.hostname to a known portal (Greenhouse, Lever, Ashby, Workday, SmartRecruiters) or falls back to a generic detector.

Stage 2 — Extract

A portal-specific extractor (greenhouse.js, lever.js, ashby.js, workday.js, or generic.js) walks the DOM to capture:

  • Job title and company name
  • Full job description text
  • A list of fillable form fields with their names, types, and current values

Stage 3 — Build Prompts

The service worker assembles two prompts:

  • System prompt — defines the AI's role as an expert job application assistant, with optional tone-matching instructions derived from your writing sample.
  • User prompt — contains your resume, the extracted job data, and the list of fields to fill.

Stage 4 — Generate

A single POST to https://api.openai.com/v1/chat/completions returns a JSON object keyed by field name. Field types drive instructions (e.g., short text vs. 2-3 paragraph cover letter).

Stage 5 — Fill

For each generated value, the content script:

  1. Locates the target input/textarea using a robust unique-selector algorithm (id → data-automation-iddata-testidnamearia-label → CSS path).
  2. Sets the value via the native HTMLInputElement value setter (bypasses React/Vue controlled-input guards).
  3. Dispatches input and change events so the framework registers the update.
  4. Highlights the field briefly so you can see what was changed.

You review, edit, and submit. ApplyAI never clicks submit for you.


Configuration

All configuration lives in the Options page and is persisted via chrome.storage.local.

Setting Default Description
apiKey (empty) Your OpenAI API key. Stored locally.
aiModel gpt-4o-mini Any chat-completion model. gpt-4o-mini is the best cost/quality balance.
resumeText (empty) Your resume, plain text.
writingSample (empty) Optional. Used for tone matching.
settings.autoDetect true Show the floating banner on supported portals.
settings.autoFill false Skip the modal and fill the form immediately (review afterward).
settings.includeCoverLetter true Generate cover_letter and why_this_company fields.

Project Structure

applyai/
├── manifest.json                    # Extension manifest (V3)
├── background/
│   └── service_worker.js            # Message broker + OpenAI client
├── content_scripts/
│   ├── detector.js                  # Portal detection + banner + orchestrator
│   ├── modal.js                     # Review-and-fill modal + toast UI
│   ├── greenhouse.js                # Greenhouse extractor
│   ├── lever.js                     # Lever extractor
│   ├── ashby.js                     # Ashby extractor
│   ├── workday.js                   # Workday extractor
│   └── generic.js                   # Fallback extractor
├── popup/
│   ├── popup.html
│   ├── popup.js
│   └── popup.css
├── options/
│   ├── options.html
│   ├── options.js
│   └── options.css
├── utils/
│   ├── ai.js                        # OpenAI client + prompt builders
│   ├── parser.js                    # Resume and job-description helpers
│   └── storage.js                   # chrome.storage.local wrappers
├── icons/
│   ├── icon16.png
│   ├── icon48.png
│   └── icon128.png
├── LICENSE                          # MIT
├── README.md                        # You are here
└── .gitignore

Privacy & Security

ApplyAI is designed with a zero-server architecture.

  • No backend. There is no ApplyAI server. The extension only talks to OpenAI's API.
  • Local storage only. Your API key, resume, and writing sample are stored in chrome.storage.local and never leave your machine except in direct API calls to OpenAI.
  • No telemetry. No analytics, no crash reporting, no usage tracking, no fingerprinting.
  • Minimal permissions. The extension requests only storage, activeTab, scripting, and contextMenus — and only runs content scripts on the five supported portal domains.
  • You stay in control. ApplyAI never submits an application on your behalf. You always review and click submit yourself.
  • Open source. Every line of code is auditable in this repository.

What gets sent to OpenAI?

When you trigger a fill, ApplyAI sends OpenAI:

  • The job title, company, and full job description (extracted from the page).
  • Your resume text.
  • Your writing sample, if you provided one.
  • The list of field names and types being requested.

OpenAI's API data usage policy applies. As of 2024, OpenAI does not use API inputs to train models by default.


Known Limitations

  • PDF parsing is basic. For best results, copy-paste your resume as plain text.
  • Workday is heavy. Workday uses deep SPAs; some field variants may not be detected on first load. A manual page refresh usually helps.
  • SmartRecruiters is experimental. Form implementations vary by tenant.
  • SPA in-page navigation is not tracked. If a portal navigates you to the application without a full reload, hit refresh once.
  • File inputs are not auto-filled. Browser security restrictions prevent JS from setting the value of <input type="file">. Upload your resume manually.
  • OpenAI costs are yours. You pay OpenAI directly. Monitor usage in your OpenAI dashboard.
  • AI can be wrong. Always review generated content before submitting. You are responsible for the truthfulness of your application.

Troubleshooting

The banner does not appear

  • Confirm the URL matches one of the supported portals.
  • Refresh the page.
  • Check that the extension is enabled on that site (chrome://extensions → ApplyAI → Site access).
  • Open the browser DevTools console and look for ApplyAI log messages.

"API key not configured" error

  • Open the Options page and confirm the key starts with sk- and was saved.
  • Test the key with curl:
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer sk-YOUR-KEY"

A 200 response means the key is valid.

"Resume not found" error

  • Add your resume on the Options page and click Save.

Fields are detected but content is missing

  • The job description might be empty. ApplyAI needs a job description to generate tailored content.
  • Your resume might be too short. Add more detail.
  • Try a more capable model (e.g., gpt-4o) in the Options page.

Form fields do not update visually

  • Some frameworks aggressively reset inputs. Click into the field and type a character — the AI-filled value usually "wakes up" the controlled state.
  • File an issue with the portal name and a screenshot.

Development

Tech Stack

  • Vanilla JavaScript (no build step, no framework)
  • Chrome Extensions Manifest V3
  • OpenAI Chat Completions API
  • HTML / CSS for the popup and options pages

Running Locally

  1. Clone the repo.
  2. Make your changes.
  3. In chrome://extensions, click the Reload button on the ApplyAI card.
  4. Refresh any open application pages.

Code Style

  • 2-space indent, single quotes, semicolons, trailing commas.
  • No external dependencies — keep it that way.
  • Module namespacing under the global ApplyAI object inside content scripts.

Testing Manually

(Replace example with any real company using the platform.)


Roadmap

  • LinkedIn Easy Apply support
  • Indeed application support
  • Custom prompt templates
  • Multi-language cover letters
  • Application tracking dashboard
  • Chrome Web Store listing
  • Firefox port
  • Local LLM support (Ollama, llama.cpp)
  • Resume improvement suggestions

Contributing

Contributions are welcome and appreciated.

  1. Fork the repository.
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Commit your changes: git commit -m "Add your feature"
  4. Push to the branch: git push origin feature/your-feature
  5. Open a Pull Request with a clear description of the change.

For new portal extractors, please open an issue first to discuss the approach. For bug reports, include the URL, browser version, and a screenshot or console output.


License

Released under the MIT License. You are free to use, modify, and distribute this project — commercially or otherwise — as long as the copyright notice is preserved.


Author

Muhammad Saad

If ApplyAI saved you time, consider starring the repo — it helps others find it.


Acknowledgments

  • Built on top of the OpenAI Chat Completions API.
  • Inspired by the universal pain of filling out yet another Greenhouse form.
  • Thanks to every contributor and user who reports bugs and suggests features.

If this project helped you land an interview, pay it forward — open a PR, file an issue, or star the repo.

Made with care for job seekers everywhere.

About

ApplyAI is a free, open-source Chrome extension that auto-fills job applications on Greenhouse, Lever, Ashby, Workday, and SmartRecruiters with tailored, resume-aware answers and cover letters generated by OpenAI. Privacy-first, no backend, MIT licensed.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors