Skip to content
Back to skills

Job Apply

ASecurity

Fill out and submit job applications on supported platforms

  • 57 stars
  • 0 votes
  • 0 copies
  • 7 views
  • Added May 31, 2026
content-marketinggogit

Works with

  • cli

Security analysis

A100/100

Scanned May 31, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill job-apply --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Job Apply?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Job Apply
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-job-apply/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-job-apply)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: job-apply
description: Fill out and submit job applications on supported platforms
user-invocable: true
---

# Job Application Skill

Fill out and submit job applications across LinkedIn, Indeed, Glassdoor, and ZipRecruiter.

## General Approach

For every application:
1. Navigate to the job posting URL
2. Read the full job description
3. Verify the job is still a good match (check requirements vs USER.md)
4. Click the apply button
5. Fill in all form fields using data from USER.md
6. Upload resume from `/home/ubuntu/job-apply/data/resume.pdf`
7. Generate a cover letter if required (follow SOUL.md rules)
8. Review the application before submitting
9. Submit
10. Take a screenshot of the confirmation page
11. Call `log_application` with the result

## Platform-Specific Instructions

### LinkedIn Easy Apply

1. On the job page, click the **"Easy Apply"** button
2. LinkedIn shows a multi-step modal form:
   - **Step 1 - Contact info:** Verify name, email, phone (pre-filled from LinkedIn profile). Correct if needed.
   - **Step 2 - Resume:** Click "Upload resume" and select `/home/ubuntu/job-apply/data/resume.pdf`. Remove any previously attached resume if it's not the current one.
   - **Step 3 - Additional questions:** These vary by job. Common fields:
     - Years of experience: Use value from USER.md
     - Work authorization: Use value from USER.md
     - Sponsorship required: Use value from USER.md
     - Willing to relocate: Based on USER.md location preferences
     - Salary expectations: Use USER.md salary range (pick the midpoint if a single number is required)
     - Start date: "Immediately" or "2 weeks notice" (use USER.md notes)
     - Cover letter: Generate one if the field is present
   - **Step 4 - Review:** Verify all fields, then click **"Submit application"**
3. Wait for confirmation message ("Your application was sent")
4. Take screenshot
5. Log with status "applied", platform "linkedin"

### LinkedIn Standard Apply (External)

1. Click **"Apply"** (non-Easy Apply) — this opens the company's external careers page
2. Wait for the external page to load fully
3. Look for the application form. Common patterns:
   - Greenhouse: `/jobs/[id]` forms
   - Lever: `jobs.lever.co/[company]/[id]`
   - Workday: `[company].wd5.myworkdayjobs.com`
   - Custom ATS or company website
4. Fill in standard fields:
   - First name, Last name
   - Email, Phone
   - Resume upload (find file input, upload PDF)
   - LinkedIn URL
   - Portfolio/GitHub URL
   - Cover letter (generate if required)
   - Work authorization questions
   - Demographic questions (skip or select "Decline to answer" / "Prefer not to say")
5. Submit and screenshot
6. Log result

### Indeed

1. On the job page, click **"Apply now"** or **"Apply on company site"**
2. If "Apply now" (Indeed's application):
   - Indeed shows a multi-step form:
     - Contact info: Verify/fill name, email, phone
     - Resume: Upload PDF or confirm Indeed resume
     - Questions: Answer job-specific questions using USER.md
     - Review & Submit
3. If "Apply on company site":
   - Follow the external site flow (similar to LinkedIn Standard Apply)
4. Screenshot confirmation
5. Log with platform "indeed"

### Glassdoor

1. On the job page, click **"Apply"** or **"Easy Apply"**
2. If Glassdoor Easy Apply:
   - Fill contact info
   - Upload resume
   - Answer additional questions
   - Submit
3. If external redirect:
   - Follow external site flow
4. Screenshot and log with platform "glassdoor"

### ZipRecruiter

1. On the job page, click **"Apply"** or look for **"1-Click Apply"**
2. If 1-Click Apply:
   - Confirm your ZipRecruiter profile details
   - Click submit
3. If standard apply:
   - Fill in the form fields
   - Upload resume
   - Submit
4. Screenshot and log with platform "ziprecruiter"

## Form Field Mapping

Map these common form fields to USER.md values:

| Form Field | USER.md Source |
|---|---|
| First Name / Last Name | Name (split on space) |
| Email | Email |
| Phone | Phone |
| City / Location | Location |
| LinkedIn URL | LinkedIn |
| GitHub / Portfolio | GitHub, Portfolio |
| Years of Experience | Years of Experience |
| Current Job Title | Derive from target roles |
| Desired Salary | Salary Range (midpoint or range) |
| Work Authorization | Work Authorization > Status |
| Sponsorship | Work Authorization > Sponsorship Required |
| Skills | Skills section |
| Education | Education section |

## Handling Dropdowns

- For dropdown menus, click to open, then look for the matching option
- If no exact match, pick the closest option
- For experience level dropdowns: map years to typical labels:
  - 0-2 years → "Entry level" or "Junior"
  - 3-5 years → "Mid-level" or "Associate"
  - 6-9 years → "Senior"
  - 10+ years → "Lead" or "Principal"

## Resume Upload

- The resume file is at `/home/ubuntu/job-apply/data/resume.pdf`
- Look for file input elements (`<input type="file">`)
- If there's a drag-and-drop zone, try clicking it to trigger the file dialog
- If upload fails, try finding alternative upload methods on the page

## Cover Letter Generation

When a cover letter is required:
1. Read the full job description
2. Generate a tailored cover letter following SOUL.md guidelines
3. Paste it into the cover letter field
4. Save the generated text in the `log_application` call (cover_letter field)

## Post-Submission

After each application:
1. Take a screenshot: save to `/home/ubuntu/screenshots/[platform]-[company]-[timestamp].png`
2. Call `log_application` with:
   - `platform`: linkedin | indeed | glassdoor | ziprecruiter
   - `company`: Company name
   - `title`: Job title
   - `url`: Job posting URL
   - `status`: applied | failed | skipped
   - `notes`: Any relevant notes (why it failed/was skipped)
   - `screenshotPath`: Path to the screenshot
3. Wait 30+ seconds before the next application (SOUL.md rate limiting)

## Error Recovery

- **Page won't load:** Wait 30 seconds, try once more, then skip
- **Form validation error:** Read the error message, try to fix, retry once
- **CAPTCHA appears:** Invoke the `captcha-solve` skill
- **"Already applied" message:** Log as "skipped" with note "already applied on platform"
- **Application limit reached:** Stop and notify user via WhatsApp

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.