What they did
Agarwal's workflow runs on a three-hour schedule with every setting in one config node. It calls an Apify Upwork scraper over HTTP, drops jobs containing excluded phrases such as no agencies or US only, reads his Google Sheet once and removes jobs already logged by id, then loops one job at a time with a four-second wait to stay inside Gemini's free rate limit. Gemini scores each job from 0 to 100 against a rubric built from his profile. A switch drops anything under 80, saves 80 to 94 to Sheets, and saves plus sends 95 and above to Telegram, capped at five messages per run. An error trigger sends one Telegram message if anything fails.
How it went
He lists the things that tripped him up. The scraper ignores resultsPerQuery and reads maxItems with a minimum of 20 per search term, so his first runs pulled 96 jobs including fixed-price ones. Without sorting by recency the dedupe threw away most of each run, because relevance kept returning the same jobs. Setting the Sheet id by expression was flaky until he picked it from the list in each node. On self-hosted n8n his Google OAuth app had to be published, because sign-in expires after seven days while it is in testing.
Worth knowing
Apify costs about $0.0034 per job, so his defaults of three search terms by 20 jobs every three hours come to roughly $49 a month; one term every 12 hours is about $4 and fits Apify's free credit. He sells a packaged version with a setup guide. He reports no figures on jobs won from the alerts.