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.
- Sign up at openrouter.ai and copy your API key
- In n8n, open the OpenRouter AI node
- Under Credentials, create a new OpenAI credential (OpenRouter uses the OpenAI-compatible endpoint)
- Set the Base URL to
https://openrouter.ai/api/v1 - 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
- Open the Send Job Alert Email node
- Under Credentials, create a Gmail OAuth2 connection and follow the Google auth flow
- Replace
your@email.comin 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
- Open the Vibeworker Job Alert node
- 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
- Open Vibeworker dashboard and open any filter
- Go to the filter's Alert settings → Webhook
- Paste the webhook URL and enable it
- 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
- Click Preview alert in Vibeworker with the n8n workflow in test mode
- Walk the execution through all four nodes and confirm the email arrives
- Once it looks right, toggle the workflow to Active (top-right in n8n)
- 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
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 →Keep reading
5 Upwork Automations You Can Build This Weekend
Five practical Upwork automations — Slack and Discord job alerts, an n8n filtering bot, a deal-finder script, and a personal market tracker — each buildable in under an hour, with guides and tested starter code.
Upwork Automation Without API: Webhooks, RSS & n8n
Discover how to build powerful Upwork automations without the official API. Learn to leverage webhooks, RSS feeds, n8n, Zapier, and scored job feeds for efficient freelancing workflows in 2026.
Vibeworker Webhook Quickstart: Real-Time Upwork Job Alerts
Set up Vibeworker webhooks in under five minutes. Full payload reference, security guide, and copy-paste receiver examples for n8n, Cloudflare Workers, Zapier, and curl.