← All posts

n8n Upwork Job Alerts: Webhook → AI Proposal → Gmail (Free Template)

Four nodes. No code. A new Upwork job hits n8n, AI writes a draft proposal, and it lands in your Gmail before you've opened the browser. This tutorial walks through the full build and includes an importable template so you can skip the wiring.

What you'll need:

  • Vibeworker account (free tier works)
  • n8n account (cloud free tier or self-hosted)
  • OpenRouter API key (free credits included on signup)
  • Gmail connected to n8n

Build time: ~20 minutes


How it works

Vibeworker filter match
  → POST to your n8n webhook URL
  → AI Agent reads job title, description, budget, client data
  → Generates a draft proposal under 150 words
  → Gmail sends: job link + scores + draft proposal

The job arrives pre-scored — quick-win rating, scope clarity, red flags, estimated hours. The AI sees all of that alongside the job description, so the proposal draft is grounded in specifics rather than generic text.


Step 1: Import the template

Download the workflow template:

Download vibeworker-job-alert-proposal.json

In n8n: Workflows → Add workflow → Import from file. The four-node canvas loads immediately.


Step 2: Connect OpenRouter

The AI node uses OpenRouter as the LLM provider — it's free to start and lets you swap models (GPT-4o-mini, Claude, Mistral) without reconfiguring the workflow.

  1. Sign up at openrouter.ai and copy your API key
  2. In n8n, open the OpenRouter AI node
  3. Under Credentials, create a new OpenAI credential (OpenRouter uses the OpenAI-compatible endpoint)
  4. Set the Base URL to https://openrouter.ai/api/v1
  5. Paste your OpenRouter API key

The model is set to openai/gpt-4o-mini — fast and cheap. Change it to any model on OpenRouter's list.


Step 3: Connect Gmail

  1. Open the Send Job Alert Email node
  2. Under Credentials, create a Gmail OAuth2 connection and follow the Google auth flow
  3. Replace your@email.com in the To field with your address

The email template is already built — it sends the job title as a link, budget, which Vibeworker filter matched, and the AI-generated proposal draft in a pre-wrap block so whitespace is preserved.


Step 4: Copy the webhook URL

  1. Open the Vibeworker Job Alert node
  2. Copy the Production webhook URL — it looks like https://your-instance.app.n8n.cloud/webhook/vibeworker-job-alert

Keep the test URL handy too — you'll use it in the next step to send a sample payload without waiting for a live job match. For the full payload schema, see the webhook quickstart.


Step 5: Add the webhook to Vibeworker

  1. Open Vibeworker dashboard and open any filter
  2. Go to the filter's Alert settings → Webhook
  3. Paste the webhook URL and enable it
  4. Hit Preview alert — this POSTs a real sample payload to n8n immediately

In n8n, switch to Test mode before hitting Preview, so you can inspect the incoming data and see the AI output before activating.


Step 6: Activate and test

  1. Click Preview alert in Vibeworker with the n8n workflow in test mode
  2. Walk the execution through all four nodes and confirm the email arrives
  3. Once it looks right, toggle the workflow to Active (top-right in n8n)
  4. Switch Vibeworker's webhook from test mode to production

From this point, every job that matches your filter fires the full pipeline automatically.


Customise it

The template is a starting point. Common modifications:

Swap Gmail for Slack — replace the Gmail node with n8n's Slack node. Use the same job data expressions. The Slack alert guide covers the message format.

Add an IF filter — insert an IF node between the webhook and the AI Agent. Only run the proposal generation for jobs above a score threshold (e.g. scoreQuickWin >= 7). Saves LLM calls and keeps your inbox clean.

Log to Notion — add a Notion node after Gmail to write every matched job to a database. Useful for tracking pipeline and reviewing win/loss patterns.

Change the AI model — swap openai/gpt-4o-mini for anthropic/claude-haiku-3-5 or any other OpenRouter model. The prompt works with any instruction-following model.


The proposal prompt

The system prompt and user prompt are editable directly in the Generate Proposal node. The defaults:

System: You are an expert Upwork freelancer. Write compelling, personalized proposals that win contracts. Be direct, address the client's specific problem, and demonstrate you read the brief. Never use openers like 'I am writing to express my interest'.

User prompt: Job Title, Description, Budget, Client location/spend/verification → Write a concise Upwork proposal. Hook the client in the first line. Under 150 words. No generic openers.

Adjust the word count, add your niche context ("I specialise in React + TypeScript"), or include a call-to-action format that works for your style.


The free Vibeworker tier handles up to 100 job results per day — enough to cover most active niches. Get started free →


Michael Watkins

Michael Watkins

Founder of Vibeworker. Helping freelancers win the Upwork game through speed and data.

Stop missing the jobs that matter

Vibeworker watches the Upwork feed and alerts you the moment a high-fit job appears — before the proposals pile up.

Start free trial →