Back to templates
WORKFLOW TEMPLATE
Upwork Jobs To Google Sheets | Operations n8n Workflow Template with HTTP, Google Sheets
Ready-to-import n8n workflow JSON for Upwork Jobs To Google Sheets. 4 nodes. Integrations: HTTP, Google Sheets. Copy and import into n8n.
4 nodesUpwork_Jobs_To_Google_Sheets-workflow.json
{"id": "s1PkxgZZchk3npwR","meta": {"instanceId": "84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db","templateCredsSetupCompleted": true},"name": "Upwork Jobs to google sheets","tags": [],"nodes": [{"id": "e08c753e-7d88-4f0b-889e-100291f0a3c7","name": "Check Upwork Jobs - Trigger","type": "n8n-nodes-base.scheduleTrigger","position": [0,0],"parameters": {"rule": {"interval": [{"field": "hours"}]}},"typeVersion": 1.2},{"id": "ffcc4ad0-7787-40a6-a78d-d3a03b1dc23b","name": "Fetch Upwork Jobs using Apify","type": "n8n-nodes-base.httpRequest","position": [260,0],"parameters": {"url": "https://api.apify.com/v2/actor-tasks//run-sync-get-dataset-items?token= ," "method": "POST","options": {},"sendBody": true,"bodyParameters": {"parameters": [{}]}},"typeVersion": 4.2},{"id": "4d0d8fb6-ad2e-4dff-8d04-b100721e33ee","name": "Format scrape Data","type": "n8n-nodes-base.set","position": [660,0],"parameters": {"options": {},"assignments": {"assignments": [{"id": "404d06e0-d3a0-448d-98f5-35fe87405e87","name": "title","type": "string","value": "={{ $json.title }}"},{"id": "1d0e9a1d-e5f9-413b-9ab4-f20ae7260b65","name": "description","type": "string","value": "={{ $json.description }}"},{"id": "c8d60809-8747-4321-ac97-a44a12ae91d5","name": "postedDate","type": "string","value": "={{ $json.postedDate }}"},{"id": "e55fbecc-a984-49b7-80a7-8c7a6d10b32a","name": "skills","type": "array","value": "={{ $json.skills }}"},{"id": "45f77f6b-c436-490c-8970-c9cb8b9949ea","name": "link","type": "string","value": "={{ $json.link }}"}]}},"typeVersion": 3.4},{"id": "c1f6c43c-f962-48f7-818b-638105720cad","name": "Log Jobs to Google Sheets","type": "n8n-nodes-base.googleSheets","position": [960,0],"parameters": {"columns": {"value": {"link": "={{ $json.link }}","title": "={{ $json.title }}","skills": "={{ $json.skills }}","postedDate": "={{ $json.postedDate }}","description": "={{ $json.description }}"},"schema": [{"id": "title","type": "string","display": true,"required": false,"displayName": "title","defaultMatch": false,"canBeUsedToMatch": true},{"id": "description","type": "string","display": true,"required": false,"displayName": "description","defaultMatch": false,"canBeUsedToMatch": true},{"id": "postedDate","type": "string","display": true,"required": false,"displayName": "postedDate","defaultMatch": false,"canBeUsedToMatch": true},{"id": "skills","type": "string","display": true,"required": false,"displayName": "skills","defaultMatch": false,"canBeUsedToMatch": true},{"id": "link","type": "string","display": true,"required": false,"displayName": "link","defaultMatch": false,"canBeUsedToMatch": true}],"mappingMode": "defineBelow","matchingColumns": [],"attemptToConvertTypes": false,"convertFieldsToString": false},"options": {},"operation": "append","sheetName": {"__rl": true,"mode": "list","value": "gid=0","cachedResultUrl": "https://docs.google.com/spreadsheets/d/1u9TeIArgJPwLn-MV77-lwDwNiZ8qZscZnkuK1xev6YA/edit#gid=0","cachedResultName": "Sheet1"},"documentId": {"__rl": true,"mode": "list","value": "1u9TeIArgJPwLn-MV77-lwDwNiZ8qZscZnkuK1xev6YA","cachedResultUrl": "https://docs.google.com/spreadsheets/d/1u9TeIArgJPwLn-MV77-lwDwNiZ8qZscZnkuK1xev6YA/edit?usp=drivesdk","cachedResultName": "Upwork job scraper"}},"credentials": {"googleSheetsOAuth2Api": {"id": "Rp7XiR3hxJfv03ZO","name": "Google Sheets account"}},"typeVersion": 4.5},{"id": "0e05d038-bb10-4cd2-847c-c38ecafe47f4","name": "Sticky Note","type": "n8n-nodes-base.stickyNote","position": [-40,-1420],"parameters": {"color": 5,"width": 480,"height": 1620,"content": "## π **Section 1: Data Scraping Automation**\n\n> π§ *βTell me whatβs trending!β*\n\n### π Nodes Combined:\n\n* π `Check Upwork Jobs - Trigger`\n* π `Fetch Upwork Jobs from Apify`\n\n---\n\n### βοΈ What This Section Does:\n\nThis section automates the process of **scraping fresh job listings from Upwork** using Apify.\n\n### π§© Step-by-Step Breakdown:\n\n#### π 1. `Check Upwork Jobs - Trigger`\n\nπ° **Trigger Type**: Scheduled\nThis node automatically **starts the workflow at specific times** (e.g., every hour, daily, etc.).\n\nπ **Why this matters**:\nYou donβt have to manually run anything! Just set it once, and n8n will check for new job listings on its own β like a robot assistant.\n\n---\n\n#### π 2. `Fetch Upwork Jobs from Apify`\n\nπ€ **HTTP Request** β **Apify API**\n\nThis node sends a `POST` request to [Apify](https://apify.com), where you've configured a **web scraping actor** to collect data from **Upwork job listings**.\n\nπ₯ **Response**: A JSON array of job data, including:\n\n* π `title` β What the job is about\n* π `description` β A short job overview\n* π― `skills` β Required skills\n* π `postedDate` β When it was posted\n* π `link` β Direct link to the job\n\nβ **Why Apify?**\nBecause Upworkβs API is **not public**, Apify acts as your friendly bot that **scrapes the job board safely and returns structured data**.\n\nπ‘ **Pro Tip**: You can customize your Apify actor to filter by keyword (e.g., `AI`, `Python`, `Design`, etc.).\n\n---\n\n"},"typeVersion": 1},{"id": "d5ef38cd-796c-48bf-ac16-7180b22dea39","name": "Sticky Note1","type": "n8n-nodes-base.stickyNote","position": [620,-1500],"parameters": {"color": 6,"width": 480,"height": 1700,"content": "## π **Section 2: Data Transformation & Logging**\n\n> π§ *βLetβs clean this up and put it somewhere useful.β*\n\n### π Nodes Combined:\n\n* βοΈ `Format Job Data`\n* π `Log Jobs to Google Sheets`\n\n---\n\n### π§© Step-by-Step Breakdown:\n\n#### βοΈ 3. `Format Job Data`\n\nπ§Ή **Field Cleaner / Formatter**\n\nThis node helps you:\n\n* Extract only **relevant fields** from the Apify response\n* Optionally **rename or restructure fields** (like mapping `postedDate` to `Date Posted`)\n* Prepare the data in a clean format so it's ready for Google Sheets\n\nπ Example Output:\n\n```json\n{\n \"Job Title\": \"Build AI chatbot\",\n \"Skills\": \"LangChain, Python\",\n \"Posted Date\": \"2025-06-06\",\n \"Link\": \"https://upwork.com/jobs/...\"\n}\n```\n\nπ‘ **Why This Matters**: Raw data isnβt always useful. This node ensures that what goes into Google Sheets is **clean, consistent, and human-readable**.\n\n---\n\n#### π 4. `Log Jobs to Google Sheets`\n\nπ **Append Data to Sheet**\n\nThis node takes the formatted job data and **adds it to a Google Sheet** row by row.\n\nπ Each job becomes a row with columns:\n\n| Job Title | Skills | Posted Date | Link |\n| ------------ | ----------------- | ----------- | ------------------------------------------------------- |\n| Build AI Bot | Python, LangChain | 2025-06-06 | [https://upwork.com/jobs/](https://upwork.com/jobs/)... |\n\nβ **Why Use Google Sheets?**\n\n* You can **analyze market trends** easily\n* Share with your team\n* Build charts, dashboards, or even connect to Looker Studio\n\n"},"typeVersion": 1},{"id": "8af7a509-a4a9-480b-b687-49a3056e27e1","name": "Sticky Note9","type": "n8n-nodes-base.stickyNote","position": [-1920,-1400],"parameters": {"color": 4,"width": 1300,"height": 320,"content": "=======================================\n WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n - YouTube: https://www.youtube.com/@YaronBeen/videos\n - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"},"typeVersion": 1},{"id": "773ea8c5-702e-4080-818b-12f0dc93579f","name": "Sticky Note4","type": "n8n-nodes-base.stickyNote","position": [-1920,-1060],"parameters": {"color": 4,"width": 1289,"height": 3058,"content": "## π **Section 1: Data Scraping Automation**\n\n> π§ *βTell me whatβs trending!β*\n\n### π Nodes Combined:\n\n* π `Check Upwork Jobs - Trigger`\n* π `Fetch Upwork Jobs from Apify`\n\n---\n\n### βοΈ What This Section Does:\n\nThis section automates the process of **scraping fresh job listings from Upwork** using Apify.\n\n### π§© Step-by-Step Breakdown:\n\n#### π 1. `Check Upwork Jobs - Trigger`\n\nπ° **Trigger Type**: Scheduled\nThis node automatically **starts the workflow at specific times** (e.g., every hour, daily, etc.).\n\nπ **Why this matters**:\nYou donβt have to manually run anything! Just set it once, and n8n will check for new job listings on its own β like a robot assistant.\n\n---\n\n#### π 2. `Fetch Upwork Jobs from Apify`\n\nπ€ **HTTP Request** β **Apify API**\n\nThis node sends a `POST` request to [Apify](https://apify.com), where you've configured a **web scraping actor** to collect data from **Upwork job listings**.\n\nπ₯ **Response**: A JSON array of job data, including:\n\n* π `title` β What the job is about\n* π `description` β A short job overview\n* π― `skills` β Required skills\n* π `postedDate` β When it was posted\n* π `link` β Direct link to the job\n\nβ **Why Apify?**\nBecause Upworkβs API is **not public**, Apify acts as your friendly bot that **scrapes the job board safely and returns structured data**.\n\nπ‘ **Pro Tip**: You can customize your Apify actor to filter by keyword (e.g., `AI`, `Python`, `Design`, etc.).\n\n---\n\n## π **Section 2: Data Transformation & Logging**\n\n> π§ *βLetβs clean this up and put it somewhere useful.β*\n\n### π Nodes Combined:\n\n* βοΈ `Format Job Data`\n* π `Log Jobs to Google Sheets`\n\n---\n\n### π§© Step-by-Step Breakdown:\n\n#### βοΈ 3. `Format Job Data`\n\nπ§Ή **Field Cleaner / Formatter**\n\nThis node helps you:\n\n* Extract only **relevant fields** from the Apify response\n* Optionally **rename or restructure fields** (like mapping `postedDate` to `Date Posted`)\n* Prepare the data in a clean format so it's ready for Google Sheets\n\nπ Example Output:\n\n```json\n{\n \"Job Title\": \"Build AI chatbot\",\n \"Skills\": \"LangChain, Python\",\n \"Posted Date\": \"2025-06-06\",\n \"Link\": \"https://upwork.com/jobs/...\"\n}\n```\n\nπ‘ **Why This Matters**: Raw data isnβt always useful. This node ensures that what goes into Google Sheets is **clean, consistent, and human-readable**.\n\n---\n\n#### π 4. `Log Jobs to Google Sheets`\n\nπ **Append Data to Sheet**\n\nThis node takes the formatted job data and **adds it to a Google Sheet** row by row.\n\nπ Each job becomes a row with columns:\n\n| Job Title | Skills | Posted Date | Link |\n| ------------ | ----------------- | ----------- | ------------------------------------------------------- |\n| Build AI Bot | Python, LangChain | 2025-06-06 | [https://upwork.com/jobs/](https://upwork.com/jobs/)... |\n\nβ **Why Use Google Sheets?**\n\n* You can **analyze market trends** easily\n* Share with your team\n* Build charts, dashboards, or even connect to Looker Studio\n\nπ‘ **Bonus Tip**: Add filters or conditional formatting to highlight certain keywords or top-paying jobs!\n\n---\n\n## π― Why This Workflow is Powerful (Even for Beginners)\n\nβ **No coding required** β Youβre using no-code tools like n8n, Apify, and Google Sheets\nβ **Automated** β Runs while you sleep π\nβ **Real-time market insights** β Know what clients are looking for (great for freelancers, agencies, product devs)\nβ **Extendable** β Add Telegram alerts, Airtable dashboards, or link it with Notion or CRMs!\n\n---\n\n## π What You Can Do Next:\n\n| Task | Tool | Outcome |\n| ------------------------- | --------------------------------- | ----------------------------------------- |\n| β Add deduplication logic | Google Sheets or n8n `IF` node | Avoid storing duplicate jobs |\n| β Filter by skill/keyword | Apify task input | Focus on niche markets |\n| β Connect to Airtable | Replace Sheets with Airtable node | Richer dashboards and tagging |\n| β Set alerts | Email/Telegram node | Be the first to apply or inform your team |\n\n---\n\n\n"},"typeVersion": 1}],"active": false,"pinData": {"Fetch Upwork Jobs using Apify": [{"json": {"link": "https://www.upwork.com/jobs/~01a2b3c4d5e6f7g8h9","title": "Build AI-based chatbot with RAG","skills": ["Python","LangChain","AI","RAG","LLM"],"postedDate": "2025-06-05T12:00:00Z","description": "Need a developer experienced in LangChain and vector DBs to build a chatbot..."}},{"json": {"link": "https://www.upwork.com/jobs/~09h8g7f6e5d4c3b2a1","title": "Fine-tune Llama-3 for sentiment analysis","skills": ["NLP","Llama","Fine-tuning","Transformers"],"postedDate": "2025-06-04T09:30:00Z","description": "Looking for someone to fine-tune Metaβs Llama-3 model on our custom dataset..."}}]},"settings": {"executionOrder": "v1"},"versionId": "ad7a638f-061a-4ab9-aa96-9d2b13f67c5c","connections": {"Format scrape Data": {"main": [[{"node": "Log Jobs to Google Sheets","type": "main","index": 0}]]},"Check Upwork Jobs - Trigger": {"main": [[{"node": "Fetch Upwork Jobs using Apify","type": "main","index": 0}]]},"Fetch Upwork Jobs using Apify": {"main": [[{"node": "Format scrape Data","type": "main","index": 0}]]}}}
In n8n Editor: paste with Ctrl+VβWorkflow will be created