This workflow corresponds to n8n.io template #4734 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "s1PkxgZZchk3npwR",
"meta": {
"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/<TASK_ID>/run-sync-get-dataset-items?token=<YOUR_API_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": {
"name": "<your credential>"
}
},
"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": "## \ud83c\udf10 **Section 1: Data Scraping Automation**\n\n> \ud83e\udde0 *\u201cTell me what\u2019s trending!\u201d*\n\n### \ud83d\udd01 Nodes Combined:\n\n* \ud83d\udd52 `Check Upwork Jobs - Trigger`\n* \ud83c\udf10 `Fetch Upwork Jobs from Apify`\n\n---\n\n### \u2699\ufe0f What This Section Does:\n\nThis section automates the process of **scraping fresh job listings from Upwork** using Apify.\n\n### \ud83e\udde9 Step-by-Step Breakdown:\n\n#### \ud83d\udd52 1. `Check Upwork Jobs - Trigger`\n\n\ud83d\udd70 **Trigger Type**: Scheduled\nThis node automatically **starts the workflow at specific times** (e.g., every hour, daily, etc.).\n\n\ud83d\udccc **Why this matters**:\nYou don\u2019t have to manually run anything! Just set it once, and n8n will check for new job listings on its own \u2014 like a robot assistant.\n\n---\n\n#### \ud83c\udf10 2. `Fetch Upwork Jobs from Apify`\n\n\ud83d\udce4 **HTTP Request** \u2192 **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\ud83d\udce5 **Response**: A JSON array of job data, including:\n\n* \ud83d\udccc `title` \u2013 What the job is about\n* \ud83d\udcdd `description` \u2013 A short job overview\n* \ud83c\udfaf `skills` \u2013 Required skills\n* \ud83d\uddd3 `postedDate` \u2013 When it was posted\n* \ud83d\udd17 `link` \u2013 Direct link to the job\n\n\u2705 **Why Apify?**\nBecause Upwork\u2019s API is **not public**, Apify acts as your friendly bot that **scrapes the job board safely and returns structured data**.\n\n\ud83d\udca1 **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": "## \ud83d\udcca **Section 2: Data Transformation & Logging**\n\n> \ud83e\udde0 *\u201cLet\u2019s clean this up and put it somewhere useful.\u201d*\n\n### \ud83d\udd01 Nodes Combined:\n\n* \u270f\ufe0f `Format Job Data`\n* \ud83d\udcc4 `Log Jobs to Google Sheets`\n\n---\n\n### \ud83e\udde9 Step-by-Step Breakdown:\n\n#### \u270f\ufe0f 3. `Format Job Data`\n\n\ud83e\uddf9 **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\ud83d\udccc 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\ud83d\udca1 **Why This Matters**: Raw data isn\u2019t always useful. This node ensures that what goes into Google Sheets is **clean, consistent, and human-readable**.\n\n---\n\n#### \ud83d\udcc4 4. `Log Jobs to Google Sheets`\n\n\ud83d\udcd1 **Append Data to Sheet**\n\nThis node takes the formatted job data and **adds it to a Google Sheet** row by row.\n\n\ud83d\udccc 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\u2705 **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": "## \ud83c\udf10 **Section 1: Data Scraping Automation**\n\n> \ud83e\udde0 *\u201cTell me what\u2019s trending!\u201d*\n\n### \ud83d\udd01 Nodes Combined:\n\n* \ud83d\udd52 `Check Upwork Jobs - Trigger`\n* \ud83c\udf10 `Fetch Upwork Jobs from Apify`\n\n---\n\n### \u2699\ufe0f What This Section Does:\n\nThis section automates the process of **scraping fresh job listings from Upwork** using Apify.\n\n### \ud83e\udde9 Step-by-Step Breakdown:\n\n#### \ud83d\udd52 1. `Check Upwork Jobs - Trigger`\n\n\ud83d\udd70 **Trigger Type**: Scheduled\nThis node automatically **starts the workflow at specific times** (e.g., every hour, daily, etc.).\n\n\ud83d\udccc **Why this matters**:\nYou don\u2019t have to manually run anything! Just set it once, and n8n will check for new job listings on its own \u2014 like a robot assistant.\n\n---\n\n#### \ud83c\udf10 2. `Fetch Upwork Jobs from Apify`\n\n\ud83d\udce4 **HTTP Request** \u2192 **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\ud83d\udce5 **Response**: A JSON array of job data, including:\n\n* \ud83d\udccc `title` \u2013 What the job is about\n* \ud83d\udcdd `description` \u2013 A short job overview\n* \ud83c\udfaf `skills` \u2013 Required skills\n* \ud83d\uddd3 `postedDate` \u2013 When it was posted\n* \ud83d\udd17 `link` \u2013 Direct link to the job\n\n\u2705 **Why Apify?**\nBecause Upwork\u2019s API is **not public**, Apify acts as your friendly bot that **scrapes the job board safely and returns structured data**.\n\n\ud83d\udca1 **Pro Tip**: You can customize your Apify actor to filter by keyword (e.g., `AI`, `Python`, `Design`, etc.).\n\n---\n\n## \ud83d\udcca **Section 2: Data Transformation & Logging**\n\n> \ud83e\udde0 *\u201cLet\u2019s clean this up and put it somewhere useful.\u201d*\n\n### \ud83d\udd01 Nodes Combined:\n\n* \u270f\ufe0f `Format Job Data`\n* \ud83d\udcc4 `Log Jobs to Google Sheets`\n\n---\n\n### \ud83e\udde9 Step-by-Step Breakdown:\n\n#### \u270f\ufe0f 3. `Format Job Data`\n\n\ud83e\uddf9 **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\ud83d\udccc 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\ud83d\udca1 **Why This Matters**: Raw data isn\u2019t always useful. This node ensures that what goes into Google Sheets is **clean, consistent, and human-readable**.\n\n---\n\n#### \ud83d\udcc4 4. `Log Jobs to Google Sheets`\n\n\ud83d\udcd1 **Append Data to Sheet**\n\nThis node takes the formatted job data and **adds it to a Google Sheet** row by row.\n\n\ud83d\udccc 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\u2705 **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\ud83d\udca1 **Bonus Tip**: Add filters or conditional formatting to highlight certain keywords or top-paying jobs!\n\n---\n\n## \ud83c\udfaf Why This Workflow is Powerful (Even for Beginners)\n\n\u2705 **No coding required** \u2013 You\u2019re using no-code tools like n8n, Apify, and Google Sheets\n\u2705 **Automated** \u2013 Runs while you sleep \ud83c\udf19\n\u2705 **Real-time market insights** \u2013 Know what clients are looking for (great for freelancers, agencies, product devs)\n\u2705 **Extendable** \u2013 Add Telegram alerts, Airtable dashboards, or link it with Notion or CRMs!\n\n---\n\n## \ud83d\udccc What You Can Do Next:\n\n| Task | Tool | Outcome |\n| ------------------------- | --------------------------------- | ----------------------------------------- |\n| \u2705 Add deduplication logic | Google Sheets or n8n `IF` node | Avoid storing duplicate jobs |\n| \u2705 Filter by skill/keyword | Apify task input | Focus on niche markets |\n| \u2705 Connect to Airtable | Replace Sheets with Airtable node | Richer dashboards and tagging |\n| \u2705 Set alerts | Email/Telegram node | Be the first to apply or inform your team |\n\n---\n\n\n"
},
"typeVersion": 1
}
],
"active": false,
"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
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This cutting-edge n8n automation is a sophisticated job market intelligence tool designed to transform freelance job tracking into a seamless, data-driven process. By intelligently connecting Apify, data processing, and Google Sheets, this workflow: Discovers Job Opportunities:…
Source: https://n8n.io/workflows/4734/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow automates tax compliance by aggregating multi-channel revenue data, calculating jurisdiction-specific tax obligations, detecting anomalies, and generating submission-ready reports for ta
Blog Automation Pipeline A — Content Generation. Uses googleSheets, httpRequest. Scheduled trigger; 28 nodes.
This n8n workflow automatically finds apartments for rent in Germany, filters them by your city, rent budget, and number of rooms, and applies to them via email. Each application includes: A personali
The automation process consists of four main steps: Get Longform: Retrieve the long-form video data (e.g., from Google Sheets). Analyze Longform: Use Clap to analyze the video and generate short clips
This n8n workflow automates the end-to-end client onboarding process: capturing client details, validating emails, assigning tiers, generating welcome packs, creating tasks, notifying teams, archiving