Send Upwork Jobs to Slack: Real-Time Alerts in 10 Minutes
Upwork has no Slack integration and no public API. But if you run a freelance team — or you just live in Slack while you work — the place you want new jobs to show up is a channel, not another browser tab you have to remember to refresh.
The fix is a webhook relay. Vibeworker watches the Upwork feed around the clock, scores every job the moment it posts, and fires a POST request to any URL you give it when a job matches your filters. A ~20-line relay reformats that payload for Slack. Total setup is about ten minutes, and the result is a channel where good jobs appear seconds after they go live — already scored, so you're not wading through junk.
This is the difference from piping in a raw RSS feed: every job arrives with AI ratings for quick-win potential, scope clarity, and client red flags. Your channel only sees jobs that cleared your bar.
What you're building
Upwork → Vibeworker (scores the job) → webhook POST → tiny relay → Slack channel
The relay exists because Slack's incoming webhooks expect a { "text": ... } payload, while Vibeworker sends a structured job object. Twenty lines of translation, hosted free.
Step 1 — Create a Slack incoming webhook
In Slack, go to api.slack.com/apps → Create New App → From scratch. Enable Incoming Webhooks, add one to the channel you want, and copy the https://hooks.slack.com/services/... URL.
Step 2 — Deploy the relay
Any serverless host works. Cloudflare Workers is free at this volume and deploys in one command:
// Cloudflare Worker — relay Vibeworker webhooks to Slack
export default {
async fetch(request, env) {
const body = await request.json();
if (body.event !== 'job.matched') return new Response('ok');
const { job, match, client } = body;
const text = [
`*${job.title}*`,
`${job.budget.display} · ${job.type} · ${client.location ?? 'location n/a'}`,
`Quick Win ${match.scoreQuickWin}/10 · Scope ${match.scoreScopeClarity}/10 · Red Flags ${match.scoreRedFlags}/10 · ~${match.effortEstimateHours}h`,
`<${job.url}|View on Upwork>`,
].join('\n');
await fetch(env.SLACK_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text }),
});
return new Response('ok');
},
};
Deploy with wrangler deploy, set SLACK_WEBHOOK_URL as a secret (wrangler secret put SLACK_WEBHOOK_URL), and copy your worker's URL. Treat the worker URL like a password — anyone who has it can post to your channel, so don't publish it anywhere.
Rather hire someone than DIY? I take these gigs myself — yes, the founder of the Upwork tool freelances on the side; it keeps me honest. Email mike@voyagerappstudio.com with what you need and I'll scope it.
Step 3 — Point Vibeworker at it
In your Vibeworker dashboard, open the alert settings on the filter you want piped to Slack, enable the Webhook channel, and paste your worker URL. Then hit Preview alert — Vibeworker sends a real sample payload immediately, so you can confirm the message lands in your channel without waiting for a live job.
From then on, every job that matches that filter posts to Slack within seconds of appearing on Upwork. Webhook alerts are a Pro feature; if you're on the free plan, you can get the same data by polling the REST API on a schedule instead.
Keeping the channel useful
The failure mode of any job alert channel is noise — once people stop reading it, it's dead. You have two places to filter, and the order matters.
Filter in Vibeworker first. Your filter decides which jobs fire the webhook at all, and the scoring means you can set a real quality bar, not just keywords. A filter tuned to your skills with a red-flag floor produces a channel where most posts are worth a click.
The relay is your second pass for team-specific logic. One line drops anything below your bar before it reaches Slack:
if (match.scoreRedFlags < 7 || match.scoreQuickWin < 6) return new Response('ok');
For a team, the cleaner pattern is multiple filters in Vibeworker, each pointed at its own channel — #leads-react and #leads-wordpress with different bars, instead of one channel everyone tunes out.
Other destinations
The same relay pattern works anywhere that accepts a webhook — Discord is a near-identical setup with richer message formatting. Telegram needs no relay at all: Vibeworker sends Telegram alerts natively, so only build this if Slack is where your team already lives. And if you want multi-step logic — logging to a spreadsheet, drafting proposals — that's a job for a workflow tool, which we'll cover in an upcoming n8n guide.
Vibeworker watches the Upwork feed 24/7 and scores every job before it hits your Slack channel. 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
n8n Upwork Job Alerts: Webhook → AI Proposal → Gmail (Free Template)
Build an n8n workflow that catches new Upwork jobs via webhook, generates a draft proposal with AI, and emails it to you in under 20 minutes. Free importable template included.
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.
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.