6 min read

Build an Upwork Lead Machine with n8n (Step‑by‑Step)

Hero image for Build an Upwork Lead Machine with n8n (Step‑by‑Step)
Table of Contents

The Simple Approach

Upwork does not offer a public API. Forget complex integrations. The practical solution is straightforward: pull your Upwork email alerts from Gmail using n8n, parse the job data into a table, and hire a VA to bid on your behalf.

  • Outcome: a constantly updated lead database that a VA can work from
  • Audience: freelancers and agencies who want to scale without building complex automations
  • Stack: n8n, Gmail, Google Sheets or Airtable, and a VA added to your Upwork organization
flowchart TD
    A[Upwork Email Alerts] --> B[Gmail]
    B --> C[n8n Gmail Node]
    C --> D[Parse Job Data]
    D --> E[Store in Table]
    E --> F[VA Reviews Leads]
    F --> G[VA Submits Proposals]

    classDef trigger fill:#e1f5fe,stroke:#01579b
    classDef process fill:#fff3e0,stroke:#ef6c00
    classDef action fill:#e8f5e8,stroke:#2e7d32

    class A,B trigger
    class C,D,E process
    class F,G action

Step 1: Set Up Upwork Saved Searches

Create focused saved searches in Upwork that match your niche.

  • Use filters for category, keywords, budget range, and client history
  • Enable email alerts for each saved search
  • Use distinct subject lines or search names so you can identify which search triggered each alert

Upwork will send you an email every time a new job matches your criteria.


Step 2: Configure the n8n Gmail Node

Set up n8n to pull emails from your Gmail account every minute.

Create the workflow

  1. Add a Schedule Trigger node set to run every 1 minute
  2. Add a Gmail node configured to read emails
  3. Filter for emails from Upwork with your saved search subjects
  4. Mark emails as read after processing to avoid duplicates
flowchart TD
    S[Schedule Every 1 Min] --> G[Gmail Node]
    G --> F[Filter Upwork Emails]
    F --> P[Parse Content]

    classDef trigger fill:#e1f5fe,stroke:#01579b
    classDef process fill:#fff3e0,stroke:#ef6c00
    class S trigger
    class G,F,P process

Gmail node settings

  • Operation: Get Many
  • Filter by sender: [email protected] or similar
  • Filter by label or subject to match your saved searches
  • Limit to unread emails to avoid reprocessing

Step 3: Parse the Email Data

Extract the job details from each email and structure them for your database.

Fields to extract

  • Job title
  • Job URL
  • Budget (fixed or hourly range)
  • Skills required
  • Client info (spend history, rating, location if available)
  • Posted date

Use n8n’s Code node or Set node to parse the email body. Upwork emails follow a consistent format, so regex or string splitting works well.

Example parsed record

{
  "title": "Build a React dashboard",
  "url": "https://www.upwork.com/jobs/~01234567890",
  "budget": "$500-$1000",
  "skills": ["React", "TypeScript", "Tailwind"],
  "client_spend": "$10k+",
  "posted_at": "2025-12-16T10:30:00Z"
}

Step 4: Store Leads in a Table

Send the parsed data to Google Sheets, Airtable, or any database.

ColumnDescription
Job TitleThe job posting title
URLLink to the Upwork job
BudgetFixed price or hourly range
SkillsComma-separated list
Client SpendTotal client spend on platform
PostedWhen the job was posted
StatusNew, Reviewed, Applied, Won, Lost
VA NotesSpace for VA to add notes

n8n nodes to use

  • Google Sheets node to append rows
  • Or Airtable node if you prefer that interface
  • Add a duplicate check by job URL before inserting
flowchart TD
    P[Parsed Data] --> C[Check Duplicate]
    C -->|New| I[Insert Row]
    C -->|Exists| S[Skip]

    classDef process fill:#fff3e0,stroke:#ef6c00
    class P,C,I,S process

Step 5: Hire a VA and Add Them to Your Organization

Once your lead table is populating, hire a VA to handle the bidding.

Add the VA to your Upwork agency

  • Go to your Upwork agency settings
  • Invite the VA as a team member
  • They can now submit proposals on behalf of your organization

VA workflow

  1. VA reviews new leads in the table daily or multiple times per day
  2. For qualified leads, VA drafts a proposal using your templates
  3. VA submits the proposal through Upwork under your agency
  4. VA updates the status column in the table
  5. You handle interviews and closing

What to give your VA

  • Access to the lead table (Sheets or Airtable)
  • Two to three proposal templates for different job types
  • Guidelines on which leads to prioritize (budget, client spend, skills match)
  • A voice guide with your tone and key phrases

Callout: The VA bids through your official Upwork organization, so everything stays compliant with platform rules


Optional: Add AI Draft Assistance

If you want to speed up proposal writing, add an LLM step before the VA review.

Workflow addition

  1. After parsing, send job details to OpenAI or another LLM
  2. Generate a draft proposal based on your templates and the job description
  3. Store the draft in a new column in your table
  4. VA reviews and edits the draft before submitting

This reduces VA time per proposal while keeping human review in the loop.

flowchart TD
    J[Job Data] --> L[LLM Draft]
    L --> T[Store Draft in Table]
    T --> V[VA Reviews]
    V --> S[Submit on Upwork]

    classDef process fill:#fff3e0,stroke:#ef6c00
    classDef action fill:#e8f5e8,stroke:#2e7d32
    class J,L,T,V process
    class S action

Keeping It Running

Monitor the workflow

  • Check n8n execution logs weekly
  • Watch for parsing failures if Upwork changes email format
  • Keep Gmail storage clean to avoid sync issues

Track results

Add columns to your table for:

  • Proposal sent date
  • Interview scheduled
  • Contract won
  • Contract value

This lets you measure VA performance and ROI over time.


Summary

  1. Set up Upwork saved searches with email alerts
  2. Use n8n Gmail node to pull emails every minute
  3. Parse job data and store in Google Sheets or Airtable
  4. Hire a VA and add them to your Upwork organization
  5. VA reviews leads and submits proposals on your behalf

No API needed. No complex webhooks. Just email parsing, a simple table, and a VA who can scale your bidding while you focus on delivery.

Callout: Automate the data capture, delegate the bidding, and spend your time on interviews and client work

📧