This workflow corresponds to n8n.io template #6028 — we link there as the canonical source.
This workflow follows the Gmail → Google Sheets 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": "jWtAzmLnP037vKY3",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Scrape Upwork Job Listings & Generate Daily Email Report with Apify and Google Sheets",
"tags": [],
"nodes": [
{
"id": "6d9a33ff-82da-4139-a749-bac62bc01ecf",
"name": "Delete rows or columns from sheet",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
580,
420
],
"parameters": {
"operation": "delete",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 526241451,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=526241451",
"cachedResultName": "15 July 2025"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount",
"numberToDelete": "={{ $('Load Today\u2019s Daily Jobs\t').all().length}}"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.6,
"alwaysOutputData": true
},
{
"id": "55a3d757-0537-4ec6-b27d-e3c30f953a41",
"name": "Loop Through Keywords\t",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-300,
620
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "12267de9-f78a-446e-9c94-19a95d859edc",
"name": "Trigger Manual Run\t",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-740,
620
],
"parameters": {},
"typeVersion": 1
},
{
"id": "8f332163-712f-4cbf-bb2d-fb8b189e81e2",
"name": "Fetch Keywords from Google Sheet\t",
"type": "n8n-nodes-base.googleSheets",
"position": [
-520,
620
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 602446703,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=602446703",
"cachedResultName": "All Keywords combined"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "7d5e9736-8457-4548-a8ba-78d72fff7ced",
"name": "Trigger Apify Scraper\t",
"type": "n8n-nodes-base.httpRequest",
"position": [
-80,
620
],
"parameters": {
"url": "https://api.apify.com/v2/acts/XYTgO05GT5qAoSlxy/runs",
"method": "POST",
"options": {},
"jsonBody": "={\n \"clientHistory\": [\n \"noHires\",\n \"1to9Hires\",\n \"10+Hires\"\n ],\n \"experienceLevel\": [\n \"entry\",\n \"intermediate\",\n \"expert\"\n ],\n \"maxJobAge\": {\n \"value\": 23,\n \"unit\": \"hours\"\n },\n \"paymentVerified\": false,\n \"query\": \"{{ $json.Keywords }}\",\n \"page\": 1,\n \"perPage\": 100,\n \"sort\": \"newest\"\n} ",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "b0e3b87d-b88e-4960-86f7-a4d408114e1d",
"name": "Wait for Apify Completion\t",
"type": "n8n-nodes-base.httpRequest",
"position": [
140,
620
],
"parameters": {
"url": "=https://api.apify.com/v2/actor-runs/{{ $json.data.id }}",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "waitForFinish",
"value": "150"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "cc44ba4d-e04e-43b7-a2e9-3bb01aea0572",
"name": "Delay Before Dataset Read\t",
"type": "n8n-nodes-base.wait",
"position": [
360,
620
],
"parameters": {
"amount": 20
},
"typeVersion": 1.1
},
{
"id": "0b738f7e-2ba4-4963-9ad4-631b80e1be7e",
"name": "Fetch Scraped Job Dataset\t",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
580,
620
],
"parameters": {
"url": "=https://api.apify.com/v2/datasets/{{ $json.data.defaultDatasetId }}/items",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "b033a7cd-e23c-4e80-8f24-baa2a4b5983b",
"name": "Process Raw Job Data\t",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
800,
620
],
"parameters": {
"jsCode": "const now = new Date();\nconst hoursThreshold = 23;\nconst thresholdTime = new Date(now.getTime() - hoursThreshold * 60 * 60 * 1000);\n\nconst filteredJobs = $input.all().filter(item => {\n const jobDate = new Date(item.json.absoluteDate);\n return jobDate > thresholdTime;\n});\n\nreturn filteredJobs;\n"
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "8f9d5563-0edc-445d-ba03-ec392fded600",
"name": "Save Jobs to Daily Sheet\t",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
1020,
620
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url == undefined ? \"--\" : $json.url}}",
"tags": "={{ $json.tags == undefined ? \"--\" : $json.tags}}",
"title": "={{ $json.title == undefined ? \"No records found in last 24 hours\": $json.title }}",
"budget": "={{ $json.budget == undefined ? \"--\" : $json.budget}}",
"jobType": "={{ $json.jobType == undefined ? \"--\" : $json.jobType}}",
"description": "={{ $json.description == undefined ? \"--\" : $json.description}}",
"absoluteDate": "={{ $json.absoluteDate == undefined ? \"--\" : $json.absoluteDate}}",
"relativeDate": "={{ $json.relativeDate == undefined ? \"--\" : $json.relativeDate}}",
"Keyword Title": "={{ $('Loop Through Keywords\t').item.json.Keywords }}",
"clientLocation": "={{ $json.clientLocation == undefined ? \"Not Found\" : $json.clientLocation}}",
"experienceLevel": "={{ $json.experienceLevel == undefined ? \"--\" : $json.experienceLevel}}",
"paymentVerified": "={{ $json.paymentVerified == undefined ? \"--\" : $json.paymentVerified}}",
"allowedApplicantCountries": "={{ $json.allowedApplicantCountries == undefined ? \"Not Found\" : $json.allowedApplicantCountries}}"
},
"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": "url",
"type": "string",
"display": true,
"required": false,
"displayName": "url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "budget",
"type": "string",
"display": true,
"required": false,
"displayName": "budget",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "relativeDate",
"type": "string",
"display": true,
"required": false,
"displayName": "relativeDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "absoluteDate",
"type": "string",
"display": true,
"required": false,
"displayName": "absoluteDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobType",
"type": "string",
"display": true,
"required": false,
"displayName": "jobType",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "experienceLevel",
"type": "string",
"display": true,
"required": false,
"displayName": "experienceLevel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "paymentVerified",
"type": "string",
"display": true,
"required": false,
"displayName": "paymentVerified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tags",
"type": "string",
"display": true,
"required": false,
"displayName": "tags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "clientLocation",
"type": "string",
"display": true,
"required": false,
"displayName": "clientLocation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "allowedApplicantCountries",
"type": "string",
"display": true,
"required": false,
"displayName": "allowedApplicantCountries",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Keyword Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Keyword Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Done by",
"type": "string",
"display": true,
"required": false,
"displayName": "Done by",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Client details found",
"type": "string",
"display": true,
"required": false,
"displayName": "Client details found",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Client name",
"type": "string",
"display": true,
"required": false,
"displayName": "Client name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company name",
"type": "string",
"display": true,
"required": false,
"displayName": "Company name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Email ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone Number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Website URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Follow up status",
"type": "string",
"display": true,
"required": false,
"displayName": "Follow up status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "1st Email sent date",
"type": "string",
"display": true,
"required": false,
"displayName": "1st Email sent date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 526241451,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=526241451",
"cachedResultName": "15 July 2025"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "6a3c8073-7559-4552-82f2-29ff50d6e069",
"name": "Update Keyword Job Count\t",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
1240,
695
],
"parameters": {
"columns": {
"value": {
"Keywords": "={{ $('Loop Through Keywords\t').item.json.Keywords }}",
"Total Count 15-07-2025": "={{ $('Process Raw Job Data\t').first().json.title == undefined ? \"0\" : $('Process Raw Job Data\t').all().length}}"
},
"schema": [
{
"id": "Keywords",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Keywords",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Keyword Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Keyword Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 15-07-2025",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Total Count 15-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 14-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 14-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 11-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 11-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 10-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 10-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 09-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 09-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 08-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 08-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 07-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 07-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 04-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 04-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 03-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 03-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 02-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 02-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 01-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 01-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 30-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 30-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 27-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 27-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 26-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 26-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 25-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 25-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 24-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 24-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 23-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 23-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 20-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 20-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 19-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 19-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 18-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 18-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 17-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 17-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 16-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 16-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 13-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 13-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 12-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 12-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 11-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 11-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 10-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 10-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 09-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 09-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 06-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 06-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 05-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 05-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 04-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 04-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 03-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 03-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Keywords"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 602446703,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=602446703",
"cachedResultName": "All Keywords combined"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.6,
"alwaysOutputData": true
},
{
"id": "beada4c6-c622-4c44-ac14-4d3273b89db4",
"name": "Load Today\u2019s Daily Jobs\t",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
-80,
420
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 526241451,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=526241451",
"cachedResultName": "15 July 2025"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.6
},
{
"id": "772ba1be-e39a-4393-a411-ea0570fc049e",
"name": "Remove Duplicates by Title/Desc\t",
"type": "n8n-nodes-base.code",
"position": [
140,
420
],
"parameters": {
"jsCode": "\n// Initialize a Set to track seen combinations\nconst seen = new Set();\nconst uniqueItems = [];\n\nfor (const item of $input.all()) {\n const title = item.json.title?.trim().toLowerCase() || '';\n const description = item.json.description?.trim().toLowerCase() || '';\n const key = `${title}|||${description}`;\nif(title != \"No records found in last 24 hours\".trim().toLowerCase()){\n if (!seen.has(key)) {\n seen.add(key);\n uniqueItems.push(item);\n }\n}\n}\n\nreturn uniqueItems;\n\n\n\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "2b4782b2-6388-4414-a537-28d45b5b751c",
"name": "Save Clean Job Data\t",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
360,
420
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"tags": "={{ $json.tags }}",
"title": "={{ $json.title }}",
"budget": "={{ $json.budget }}",
"jobType": "={{ $json.jobType }}",
"description": "={{ $json.description }}",
"absoluteDate": "={{ $json.absoluteDate }}",
"relativeDate": "={{ $json.relativeDate }}",
"Keyword Title": "={{ $json['Keyword Title'] }}",
"clientLocation": "={{ $json.clientLocation }}",
"experienceLevel": "={{ $json.experienceLevel }}",
"paymentVerified": "={{ $json.paymentVerified }}",
"allowedApplicantCountries": "={{ $json.allowedApplicantCountries }}"
},
"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": "url",
"type": "string",
"display": true,
"required": false,
"displayName": "url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "budget",
"type": "string",
"display": true,
"required": false,
"displayName": "budget",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "relativeDate",
"type": "string",
"display": true,
"required": false,
"displayName": "relativeDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "absoluteDate",
"type": "string",
"display": true,
"required": false,
"displayName": "absoluteDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "jobType",
"type": "string",
"display": true,
"required": false,
"displayName": "jobType",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "experienceLevel",
"type": "string",
"display": true,
"required": false,
"displayName": "experienceLevel",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "paymentVerified",
"type": "string",
"display": true,
"required": false,
"displayName": "paymentVerified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tags",
"type": "string",
"display": true,
"required": false,
"displayName": "tags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "clientLocation",
"type": "string",
"display": true,
"required": false,
"displayName": "clientLocation",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "allowedApplicantCountries",
"type": "string",
"display": true,
"required": false,
"displayName": "allowedApplicantCountries",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Keyword Title",
"type": "string",
"display": true,
"required": false,
"displayName": "Keyword Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Done by",
"type": "string",
"display": true,
"required": false,
"displayName": "Done by",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Client details found",
"type": "string",
"display": true,
"required": false,
"displayName": "Client details found",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Client name",
"type": "string",
"display": true,
"required": false,
"displayName": "Client name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company name",
"type": "string",
"display": true,
"required": false,
"displayName": "Company name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Email ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone Number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn",
"type": "string",
"display": true,
"required": false,
"displayName": "LinkedIn",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Website URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Follow up status",
"type": "string",
"display": true,
"required": false,
"displayName": "Follow up status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "1st Email sent date",
"type": "string",
"display": true,
"required": false,
"displayName": "1st Email sent date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 526241451,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=526241451",
"cachedResultName": "15 July 2025"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"executeOnce": false,
"typeVersion": 4.6
},
{
"id": "6403bebf-0937-405d-9f29-536aaff298bb",
"name": "Reload Clean Job Data\t",
"type": "n8n-nodes-base.googleSheets",
"position": [
800,
420
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 602446703,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=602446703",
"cachedResultName": "All Keywords combined"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "1a9524a6-53c0-4db2-802a-deb418e46255",
"name": "Generate Keyword Summary Stats\t",
"type": "n8n-nodes-base.code",
"position": [
1020,
420
],
"parameters": {
"jsCode": "// Get keyword rows\nconst keywordsInput = $('Reload Clean Job Data\t').all().map(item => item.json.Keywords);\n\n// Initialize keyword count map\nconst counts = [];\n\n// Go through each keyword\nfor (const keyword of keywordsInput) {\n\tlet count = 0;\n\n\tfor (const job of $('Save Clean Job Data\t').all()) {\n\t\tconst content = job.json['Keyword Title'];\n\t\tif (content.includes(keyword)) {\n if(job.json[\"title\"] != \"No records found in last 24 hours\"){\n\t\t\tcount++;\n }\n\t\t}\n\t}\n\n\tcounts.push({\n\t\tjson: {\n\t\t\tkeyword: keyword,\n\t\t\tcount: count,\n\t\t\tdate: '15-07-2025' // optional for context\n\t\t}\n\t});\n}\n\nreturn counts;\n"
},
"typeVersion": 2
},
{
"id": "ea4b198a-1a29-4e34-b6a0-3ca8ef86c1ba",
"name": "Update Summary Sheet\t",
"type": "n8n-nodes-base.googleSheets",
"position": [
1240,
420
],
"parameters": {
"columns": {
"value": {
"Keywords": "={{ $json.keyword }}",
"Total Count 15-07-2025": "={{ $json.count }}"
},
"schema": [
{
"id": "Keywords",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Keywords",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Keyword Type",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Keyword Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 15-07-2025",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Total Count 15-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 14-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 14-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 11-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 11-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 10-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 10-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 09-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 09-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 08-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 08-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 07-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 07-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 04-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 04-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 03-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 03-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 02-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 02-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 01-07-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 01-07-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 30-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 30-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 27-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 27-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 26-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 26-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 25-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 25-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 24-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 24-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 23-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 23-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 20-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 20-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 19-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 19-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 18-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 18-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 17-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 17-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 16-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 16-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 13-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 13-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 12-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 12-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 11-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 11-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 10-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 10-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 09-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 09-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 06-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 06-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 05-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 05-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 04-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 04-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Count 03-06-2025",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Total Count 03-06-2025",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Keywords"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 602446703,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=602446703",
"cachedResultName": "All Keywords combined"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "fefc7df7-b21d-4b6a-98c9-aaa1d1cb22d2",
"name": "Fetch Final Summary Data\t",
"type": "n8n-nodes-base.googleSheets",
"position": [
1460,
420
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 602446703,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit#gid=602446703",
"cachedResultName": "All Keywords combined"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=drivesdk",
"cachedResultName": "apify upwork scraped data"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.6
},
{
"id": "2919b71f-c8c2-48da-b2eb-3119c86bd3e4",
"name": "Build Email Body\t",
"type": "n8n-nodes-base.code",
"position": [
1680,
420
],
"parameters": {
"jsCode": "const rows = $input.all();\nconst totals = {};\n\nfor (const row of rows) {\n const type = row.json[\"Keyword Type\"];\n const count = parseInt(row.json[\"Total Count 15-07-2025\"]) || 0;\n\n totals[type] = (totals[type] || 0) + count;\n}\n\nreturn [\n {\n json: {\n date: \"15-07-2025\",\n counts_by_type: totals\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "982c3239-093e-44d4-b791-4ee50aae4110",
"name": "Send Daily Report Email\t",
"type": "n8n-nodes-base.gmail",
"position": [
1900,
420
],
"parameters": {
"sendTo": "=bd@itoneclick.com,james@itoneclick.com,nikunj@itoneclick.com,drashti@itoneclick.com,sahil@itoneclick.com ",
"message": "=Hello Team,<br><br>\u00a0 \nPlease find the details for the Apify scraped data below.<br><br>\u00a0 \n\n\n\n<b>Scraping Date:</b>{{ $json.date }}<br> \n<b>Total Scraped Data:</b> {{ $('Remove Duplicates by Title/Desc\t').all().length }} Records<br> \n<b>Travel-related Data Scraped Count:</b> {{ $json.counts_by_type.Web }} Records<br> \n<b>Mobile App-related Data Scraped Count:</b> {{ $json.counts_by_type.Mobile }} Records<br><br>\u00a0 \n\n\n\n<b>Sheet link with all data:</b><br> \n<a href=\"https://docs.google.com/spreadsheets/d/15VOzDUfPIKy3TcFEYEEwXfeYrF2LtAkhkm5ba9gNERI/edit?usp=sharing\">Click here to view the data</a><br>\n\n\n\n<br>\u00a0 Thanks,<br> Ajay Mishra",
"options": {
"appendAttribution": true
},
"subject": "Apify data details - 15 July 2025"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 2.1
},
{
"id": "844bd1ab-cbc9-4c81-b4eb-3871162fdfc1",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-860,
80
],
"parameters": {
"width": 700,
"height": 520,
"content": "## Job Scraping & Initial Processing\nScrapes job data using Apify and stores it in the daily sheet.\n\n\ud83d\udd01 Trigger Manual Run: Manually starts the workflow.\n\n\ud83d\udcc4 Fetch Keywords from Google Sheet: Reads the list of job-related keywords from the All Keywords sheet.\n\n\ud83d\udd02 Loop Through Keywords: Iterates over each keyword to trigger Apify.\n\n\ud83c\udf10 Trigger Apify Scraper: Sends HTTP request to start Apify actor for scraping jobs.\n\n\u23f3 Wait for Apify Completion: Waits for the Apify actor to finish execution.\n\n\u23f1\ufe0f Delay Before Dataset Read: Waits a few seconds to ensure dataset is ready.\n\n\ud83d\udce6 Fetch Scraped Job Dataset: Fetches the latest dataset from Apify.\n\n\ud83e\uddf9 Process Raw Job Data: Filters jobs posted in the last 24 hours and formats the data.\n\n\ud83d\udce5 Save Jobs to Daily Sheet: Appends new job data to the daily Google Sheet.\n\n\ud83d\udd22 Update Keyword Job Count: Updates job count in the All Keywords summary sheet."
},
"typeVersion": 1
},
{
"id": "f026e7c3-c558-4b2a-85f7-9b3f8b444be9",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
100,
60
],
"parameters": {
"color": 4,
"width": 600,
"height": 300,
"content": "## Data Cleaning & Deduplication\nCleans and deduplicates today's job data.\n\n\ud83d\udce5 Load Today\u2019s Daily Jobs: Loads all jobs added in today\u2019s sheet.\n\n\ud83e\uddfd Remove Duplicates by Title/Desc: Removes duplicates based on title & description.\n\n\u2705 Save Clean Job Data: Saves the cleaned, unique entries.\n\n\ud83d\uddd1\ufe0f Clear Old Daily Sheet Data: Deletes old or duplicate entries from the sheet.\n\n\ud83d\udd04 Reload Clean Job Data: Loads clean data again after deletion.\n\n"
},
"typeVersion": 1
},
{
"id": "1a92fdfa-d121-4922-adb0-3a971eed5c10",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1440,
40
],
"parameters": {
"color": 3,
"width": 500,
"height": 340,
"content": "## Daily Summary & Email Report\nGenerates a job summary and sends it via email.\n\n\ud83d\udcca Generate Keyword Summary Stats: Counts job totals per keyword.\n\n\ud83d\udcc8 Update Summary Sheet: Updates the summary sheet with keyword stats.\n\n\ud83d\udcd1 Fetch Final Summary Data: Reads the summary sheet for reporting.\n\n\ud83d\udce8 Build Email Body: Formats email with stats and sheet link.\n\n\ud83d\udcec Send Daily Report Email: Sends the structured daily summary email to recipients.\n\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
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.
gmailOAuth2googleApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This automated n8n workflow scrapes job listings from Upwork using Apify, processes and cleans the data, and generates daily email reports with job summaries. The system uses Google Sheets for data storage and keyword management, providing a comprehensive solution for tracking…
Source: https://n8n.io/workflows/6028/ — 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.
End-to-end lead pipeline (discovery → enrichment → outreach) Google Search–based LinkedIn discovery (safe approach) Batch processing with controlled loops AI-generated cold emails and follow-ups Googl
This tutorial details an end-to-end automation solution for streamlining the lien filing process for Homeowners Associations (HOAs) using an n8n workflow. It significantly reduces manual effort and po
📚 Learners and educators who want a fast overview of a creator’s entire catalog. 🧩 Research, SEO, and content ops teams building an intelligence layer on top of YouTube channels.
A customized n8n workflow inspired by the Lead Generation Agent template. It automates B2B lead scraping via Apify, extracts contact emails with AI, sends cold emails via Gmail, and logs every interac
This workflow is built for newsletter writers, marketers, content creators, or anyone who curates and summarizes web articles. It’s especially helpful for virtual assistants and founders who need to q