Skip to main content
Automate job applications across multiple postings on any job portal. This cookbook creates a workflow that logs into a job portal, searches for relevant positions based on your resume, extracts job listings, and applies to each one with AI-generated responses tailored to the role.

What you’ll build

A workflow that:
  1. Parses your resume PDF to extract structured information
  2. Logs into a job portal using saved credentials
  3. Searches for relevant jobs based on your resume
  4. Extracts a list of matching job postings
  5. For each job: extracts details, generates tailored answers, and submits the application

Prerequisites

Install the SDK:
pip install skyvern
Set your API key:
export SKYVERN_API_KEY="your-api-key"

Sample Job Portal

We’ll use Job Stash, a fake job board website created for agent automation testing. Change job_portal_url to use your job portal’s URL.
FieldValue
URLhttps://job-stash.vercel.app
Login emaildemo@manicule.dev
Login passwordhelloworld
Job Stash, a demo job portal

Step 1: Store credentials

Before defining the workflow, store the login email and password Skyvern will use. This makes sure your passwords are never stored in the shareable workflow definition and never sent to LLMs.
1

Open Credentials

Go to Credentials in the sidebar. Choose Password after clicking on + Add.Creating a password credential on Skyvern
2

Create a credential

Click Create Credential. Set the name to Job Stash, add login page URL, and enter the username (demo@manicule.dev) and password (helloworld). Click Save.Fill username and password to add a credential to Skyvern
3

Copy the credential ID

Copy the credential ID (here: cred_504284876895871734). You’ll use this when configuring the workflow.Fill username and password to add a credential to Skyvern

Step 2: Create a new workflow

1

Create the workflow

Go to WorkflowsCreate Workflow. Name it “Search and Apply for Jobs Workflow”.Create a new workflow from Skyvern Dashboard

Set parameters

Parameters are the inputs your workflow accepts. Defining them upfront lets you reuse the same workflow against different job portals.
On the Start node, add the following parameters:
ParameterTypeNotes
resumeFile URLURL to your resume PDF
credentialsCredential IDSelect the credential you created in Step 1
job_portal_urlStringJob portal login URL
Setting input parameters in a workflow in Skyvern

Step 3: Add workflow blocks

The workflow chains together several blocks to automate the full job application process:
  1. PDF Parser block — Extracts structured data from your resume
  2. Login block — Authenticates to the job portal using stored credentials
  3. Navigation block — Searches for relevant jobs based on your resume
  4. Extraction block — Extracts a list of job postings from search results
  5. For loop (Go to URL + Extraction + Action + Extraction + Text Prompt + Navigation) — Iterates over each job to extract details, generates tailored answers using an LLM, and submits the application.
In the Cloud UI, click the + button after the Start node to add blocks sequentially. For SDK users, add each block to the blocks array in your workflow definition file.

PDF Parser block

The pdf_parser block extracts structured information from your resume PDF. Skyvern uses AI to identify your name, contact info, work experience, education, and skills.
Add a PDF Parser block. Set File URL to the resume parameter.Adding a block in a workflow in Skyvern
The parsed data is accessible as parsed_resume_output in subsequent blocks.

Login block

The login block authenticates using stored credentials. Skyvern injects the username/password directly into form fields without exposing them to the LLM.
Add a Login block. Configure it as follows:
  • URL: set to the job_portal_url parameter
  • Credential: Select the credentials parameter
  • Goal: “Log in using the provided credentials. Handle any cookie consent popups. COMPLETE when on the account dashboard or orders page.”

Search for jobs block

Navigate to the job search and find relevant positions based on the parsed resume.
Add a Navigation block. Configure it as follows:
  • URL: Leave empty (continues from the current page after login)
  • Goal: “Search for a relevant job based on the parsed resume.” The block will automatically reference the parsed_resume_output from the previous step.

Extract jobs list block

Extract job postings from the search results. The data_schema tells Skyvern exactly what structure to return.
Add an Extraction block. Configure it as follows:
  • Goal: “Extract all visible job profiles: job page url, title, employer, location, and type (full time, part time, etc)”
  • Data Schema: Paste the following JSON schema:
{
  "jobs": {
    "type": "array",
    "items": {
      "type": "object",
      "properties": {
        "job_page_url": { "type": "string", "description": "Link to the apply page for the job" },
        "title": { "type": "string", "description": "Title of the role offered" },
        "employer": { "type": "string", "description": "Name of the company posting the job profile" },
        "location": { "type": "string", "description": "Where is the job role based. City and country," },
        "type": { "type": "string", "description": "Type for employment: full-time. part-time, contractual, internship etc." }
      },
      "required": ["job_page_url", "title", "employer", "location"]
    }
  }
}
The output is accessible as jobs_list_extraction_output.jobs in subsequent blocks.

Apply to jobs loop

Iterate over each job posting and complete the application. This loop contains multiple blocks that work together:
  1. goto_url — Navigate to the job page
  2. extraction — Extract detailed job information
  3. action — Click the Apply button
  4. extraction — Extract application form questions
  5. text_prompt — Generate tailored answers using AI
  6. navigation — Fill out and submit the application
Add a For Loop block. Set the Loop Variable to jobs_list_extraction_output.jobs. Enable Continue on Failure and Next Loop on Failure.Inside the loop, add the following blocks in order:
1

Go to URL block

Add a Go to URL block. Set URL to the current_value.job_page_url variable.
2

Extract job details

Add an Extraction block. Set Goal to: “Extract every detail about the job role present on the page.”
3

Click Apply

Add an Action block. Set Goal to: “Find Apply button and click it. COMPLETE when the job application is visible on the screen.”
4

Extract form questions

Add an Extraction block. Set Goal to: “Extract every question in the job application form as a list.”
5

Generate answers

Add a Text Prompt block. Set the Prompt to reference the parsed resume, job details, and extracted questions so the AI generates tailored answers for each field.
6

Fill and submit

Add a Navigation block. Set Goal to: “Fill out all of the form fields using the generated answers, including optional fields. COMPLETE when the application form has been successfully submitted.”
Key pattern: continue_on_failure: true ensures that if one application fails, the workflow continues to the next job. Inside the loop, current_value gives you the current job being processed.

Complete workflow definition

Here’s a summary of the complete workflow you’ve built in the visual editor:
1

Create the workflow

Go to WorkflowsCreate Workflow. Name it “Search and Apply for Jobs Workflow.” On the Start node, set Proxy Location to Residential and add the parameters: resume, credentials, and job_portal_url.
2

Block 1: PDF Parser

Add a PDF Parser block. Set File URL to the resume parameter.
3

Block 2: Login

Add a Login block. Set URL to the job_portal_url parameter. Select the credentials parameter. Set the goal: “Log in using the provided credentials. Handle any cookie consent popups. COMPLETE when on the account dashboard or orders page.”
4

Block 3: Navigation — search for jobs

Add a Navigation block. Leave URL empty. Set the goal: “Search for a relevant job based on the parsed resume.”
5

Block 4: Extraction — job listings

Add an Extraction block. Set the goal: “Extract all visible job profiles: job page url, title, employer, location, and type.” Paste the jobs JSON schema into Data Schema.
6

Block 5: For Loop — apply to each job

Add a For Loop block. Set Loop Variable to jobs_list_extraction_output.jobs. Enable Continue on Failure and Next Loop on Failure. Inside the loop, add six blocks in order: Go to URL (job page), Extraction (job details), Action (click Apply), Extraction (form questions), Text Prompt (generate answers), Navigation (fill and submit the form).

Step 4: Run and monitor

Create the workflow from your definition file and execute it.
1

Run the workflow

Click Run in the workflow editor. Fill in the parameters:
  • resume: URL to your resume PDF
  • job_portal_url: https://job-stash.vercel.app
  • credentials: Select the Job Stash credential
2

Monitor the run

Watch the run in real time. Each block shows its status as it executes. The for loop will iterate over each job posting, and you can see the AI filling out application forms in the browser recording.

Resources

Workflow Blocks Reference

Complete parameter reference for all block types

Credential Management

Securely store and use login credentials

File Operations

Upload and parse files in workflows

Error Handling

Handle failures and retries in production