Upwork to Google Sheets, WhatsApp job alerts
Checking Upwork “just in case” turns into a habit. And a time sink. You refresh, you scroll, you miss the good ones anyway.
Freelancers feel it first, because speed wins deals. Agency owners feel it when the team’s pipeline is “whatever someone remembered to screenshot.” Even a busy marketing lead who occasionally hires contractors runs into the same mess. This Upwork WhatsApp alerts automation catches new listings, filters them, and pings you fast.
This guide shows what the workflow does, what you need to run it, and how to think about customizing it so the alerts stay useful (not noisy).
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Upwork to Google Sheets, WhatsApp job alerts
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n1@{ icon: "mdi:database", form: "rounded", label: "Update Sheet Row", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Job Fields", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Score Threshold Check", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Alert Payload", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Inbound Webhook Trigger"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Return Webhook Reply"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Upwork API Request"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/whatsapp.svg' width='40' height='40' /></div><br/>WhatsApp Alert Send"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>RapidAPI Alert Call"]
n4 --> n5
n6 --> n8
n3 --> n4
n5 --> n7
n5 --> n9
n5 --> n10
n8 --> n1
n1 --> n3
end
subgraph sg1["Utility: Scheduled Start Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Utility: Scheduled Start", pos: "b", h: 48 }
end
subgraph sg2["Utility: Manual Start Flow"]
direction LR
n2@{ icon: "mdi:play-circle", form: "rounded", label: "Utility: Manual Start", pos: "b", h: 48 }
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n2 trigger
class n4 decision
class n1 database
class n6,n7,n8,n10 api
class n9 disabled
classDef customIcon fill:none,stroke:none
class n6,n7,n8,n9,n10 customIcon
Why This Matters: Missing Good Upwork Jobs (and Wasting Time)
Upwork is a race, but it’s also a distraction. You open it for a minute, then realize you’ve scanned 40 listings that were never a fit. Meanwhile, the one job that matched your niche went live, got five proposals, and is already “interviewing.” The worst part is the mental load. You keep thinking, “I should check again,” because you know the window is short. After a week of that, you’ve spent hours hunting instead of selling, writing proposals, or doing billable work.
It adds up fast. Here’s where it usually breaks down.
- You end up checking Upwork many times a day, which quietly steals about an hour.
- Relevant jobs get buried under “almost relevant” ones, so you respond later than you should.
- Copy-pasting job details into a tracker leads to messy notes and missed follow-ups.
- If more than one person is watching listings, duplicates and confusion show up immediately.
What You’ll Build: Filtered Upwork Listings Logged to Sheets + WhatsApp Alerts
This workflow watches Upwork for you using an Upwork scraper on RapidAPI, then turns raw job data into something you can actually act on. It can run on a schedule (hourly is common) or be triggered by a webhook when you want an on-demand check. Once it pulls the newest listings, it writes them into a Google Sheet so you have a clean, searchable backlog. Then it maps the useful fields (title, budget, link, description, category) and checks them against your “is this worth my time?” rules. When a job passes your threshold, the workflow packages the details and sends a WhatsApp message so you see it immediately, even if you’re not at your desk.
The workflow starts with a request to RapidAPI for recent Upwork jobs. Next, it saves each job to Google Sheets and scores or filters it using an IF check. Finally, it sends a WhatsApp alert (and can also call an extra HTTP endpoint for logging or monitoring).
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you check Upwork 6 times per day and spend about 10 minutes each time scanning and opening listings. That’s roughly an hour a day, and you still miss posts when you’re in meetings or deep work. With this automation, you can let it run hourly in the background and only read WhatsApp alerts that pass your filter, which is often 5 minutes total. Even if you still do one manual check for peace of mind, most people get about 45 minutes back daily.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- RapidAPI for the Upwork scraper API access
- Google Sheets to store listings in one place
- WhatsApp API access (get it from Waha API or WhatsApp Cloud API)
Skill level: Beginner. You’ll connect accounts, paste API keys, and adjust a few filters.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A schedule or webhook kicks it off. You can run this every hour with the Scheduled Start node, or trigger it instantly through an inbound webhook when you want a manual “check now.”
Upwork jobs are fetched via RapidAPI. n8n sends an HTTP request to your chosen Upwork scraper endpoint and receives a batch of fresh listings. That keeps you out of browser tabs and away from endless scrolling.
The workflow cleans and evaluates each job. It updates your Google Sheet, then maps fields into a consistent format. After that, an IF check (the score threshold) decides if the job is worth alerting you about.
Matching jobs trigger a WhatsApp message. A payload is prepared with the key details (title, budget, link, short description), then it sends through your WhatsApp API. Optionally, it can also fire a second HTTP call for audit logs or a separate notification stream.
You can easily modify the keywords and threshold rules to focus on higher-budget projects, certain categories, or specific client signals. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
This workflow starts when an external service calls the webhook endpoint, which then requests job data from Upwork.
- Add the Inbound Webhook Trigger node as your primary trigger.
- Set HTTP Method to
POST. - Set Path to
7f69e1de-e644-40a7-bb0b-288b096b2696. - Set Response Mode to
responseNodeso the reply is handled by Return Webhook Reply.
Step 2: Connect Google Sheets
Job results are stored and updated in Google Sheets before being transformed and evaluated.
- Open Update Sheet Row and set Operation to
appendOrUpdate. - Set Document to
[YOUR_ID]and choose the Sheet NameSheet1(gid=0). - Map columns using expressions like URL →
{{ $json.URL }}, Title →{{ $json.Title }}, and Payment Type →{{ $json['Payment Type'] }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials.
Title (used for matching) and Payment Type.Step 3: Set Up Job Mapping and Scoring
These nodes normalize incoming job data and filter alerts by score.
- In Map Job Fields, map fields such as Job Tile →
{{ $json.Title }}, job posted →{{ $json.Date }}, and score →{{ $json.Score }}. - Open Score Threshold Check and set the condition to Number
gtewith Left Value{{ $json.score }}and Right Value70. - In Prepare Alert Payload, map final alert fields such as job →
{{ $json['Job Tile'] }}, salary →{{ $('Map Job Fields').item.json.budget }}, and url →{{ $json.url }}.
Step 4: Configure Upwork API Request and Alert Outputs
This step calls the Upwork API, updates your sheet, and then sends alerts in parallel.
- In Upwork API Request, set URL to
https://upwork-scraping-api.p.rapidapi.com/upwork/search-jobsand Method toPOST. - Add body parameters like query →
{{ $json.body.searchQuery }}, client_location →{{ $json.body.locations[0] }}, min_hourly_rate →{{ $json.body.minRate }}, and max_hourly_rate →{{ $json.body.maxRate }}. - Set headers x-rapidapi-host →
upwork-scraping-api.p.rapidapi.comand x-rapidapi-key →[CONFIGURE_YOUR_API_KEY]. - Confirm the flow Upwork API Request → Update Sheet Row → Map Job Fields → Score Threshold Check → Prepare Alert Payload.
- Prepare Alert Payload outputs to both Return Webhook Reply and WhatsApp Alert Send and RapidAPI Alert Call in parallel.
- In WhatsApp Alert Send, set Operation to
send, Text Body tohy, and add your recipient phone number. - Credential Required: Connect your whatsAppApi credentials in WhatsApp Alert Send.
- In RapidAPI Alert Call, set URL to
https://whin2.p.rapidapi.com/sendand configure the text body to=New Job Alert make the Proposal ASAP.
Job Title : {{ $json.job }}
Posted On : {{ $json['job posted'] }}
Budget : {{ $json.salary }}
Job Score : {{ $json.score }}
Job URL: {{ $json.url }} - Set headers x-rapidapi-host →
whin2.p.rapidapi.comand x-rapidapi-key →[CONFIGURE_YOUR_API_KEY].
Step 5: Test and Activate Your Workflow
Validate the webhook request, sheet updates, and alert delivery before enabling the workflow.
- Click Execute Workflow and send a test POST request to the Inbound Webhook Trigger URL.
- Verify that Upwork API Request returns data and Update Sheet Row writes to your sheet.
- Confirm that items with
score≥70pass through Score Threshold Check and reach Prepare Alert Payload. - Check that Return Webhook Reply sends a response, and alerts are sent via RapidAPI Alert Call and (if enabled) WhatsApp Alert Send.
- Toggle the workflow to Active to run in production.
Troubleshooting Tips
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials screen and your Google account access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- RapidAPI and WhatsApp endpoints can rate limit you. If alerts suddenly stop, review the HTTP Request node’s response code and your RapidAPI dashboard usage logs.
Quick Answers
About 30 minutes if you already have your API keys.
No. You will connect accounts, paste API keys, and tweak filters.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in RapidAPI and WhatsApp API costs, which vary by provider and message volume.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you should. Most people adjust the Upwork API Request (HTTP Request) parameters and the Score Threshold Check (IF) so only specific keywords, categories, or budgets trigger messages. You can also change the WhatsApp Alert Send step to notify Slack or Telegram instead, while keeping the Google Sheets logging the same.
Usually it’s expired Google authorization in n8n. Reconnect your Google Sheets credentials, then confirm the target spreadsheet is shared with the same Google account you authenticated. Also check that the sheet name and columns match what the workflow expects, because a renamed tab can look like a “connection” problem.
On most setups, hourly checks are fine and you’ll handle dozens of listings per day without thinking about it. If you self-host, the practical limit is your server plus the rate limits of RapidAPI and your WhatsApp provider, so high volume usually means slowing the schedule or batching requests. If you’re expecting hundreds of new items daily, plan for filtering earlier and writing fewer rows to Sheets.
Often, yes, because this use case benefits from custom HTTP requests, flexible branching, and keeping full control of how you filter listings. n8n is also easier to extend when you want more logic, like “only alert if budget is over X” plus “contains two keywords” plus “client payment verified,” all at once. Zapier and Make can do parts of this, but you may end up paying more as tasks grow, and complex filtering gets awkward fast. The one exception is when you only need a simple notification and don’t care about Sheets logging or scoring. Talk to an automation expert if you want a quick recommendation based on your volume.
Once this is running, Upwork becomes a feed you control, not a tab you babysit. Set it up, tune the filters, and let the right jobs come find you.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.