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 →
{
"name": "Only-new remote jobs to Google Sheets and Slack",
"nodes": [
{
"name": "Weekday schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
-520,
40
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1,
2,
3,
4,
5
],
"triggerAtHour": 8
}
]
}
}
},
{
"name": "Run Remote Jobs Monitor",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-260,
40
],
"parameters": {
"method": "POST",
"url": "https://api.apify.com/v2/actors/benthepythondev~remote-jobs-aggregator/run-sync-get-dataset-items",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"contentType": "raw",
"rawContentType": "application/json",
"body": "{\"searchKeywords\":\"python developer\",\"platforms\":[\"arbeitnow\",\"jobicy\",\"himalayas\",\"remoteok\",\"remotive\",\"workingnomads\"],\"locationKeywords\":[\"Europe\",\"Worldwide\"],\"onlyNew\":true,\"monitorId\":\"sheets-slack-python-europe\",\"firstRunMode\":\"seedOnly\",\"maxJobsPerPlatform\":20,\"maxTotalJobs\":30}",
"options": {
"timeout": 300000
}
}
},
{
"name": "Prepare alert and sheet rows",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
0,
40
],
"parameters": {
"jsCode": "const input = $input.all().map(item => item.json);\nconst rows = input.length === 1 && Array.isArray(input[0]) ? input[0] : input;\nconst jobs = rows.filter(job => job && job.is_new && (job.job_id || job.url));\nif (!jobs.length) return [];\nconst preview = jobs.slice(0, 12).map((job, index) => `${index + 1}. ${job.title || 'Untitled role'} at ${job.company || 'Unknown company'}\\n${job.location || 'Remote'} | ${job.platform || 'source'} | ${job.seniority || 'unspecified'}\\n${job.url || ''}`).join('\\n\\n');\nconst sheetRows = jobs.map(job => ({\n job_id: job.job_id || '',\n title: job.title || '',\n company: job.company || '',\n location: job.location || '',\n salary: job.salary || '',\n job_type: job.job_type || '',\n seniority: job.seniority || '',\n platform: job.platform || '',\n posted_date: job.posted_date || '',\n first_seen_at: job.first_seen_at || '',\n monitor_id: job.monitor_id || '',\n url: job.url || ''\n}));\nreturn [{ json: { count: jobs.length, slackText: `*${jobs.length} new remote jobs*\\n\\n${preview}\\n\\nActor: https://apify.com/benthepythondev/remote-jobs-aggregator`, sheetRows } }];"
}
},
{
"name": "Slack digest webhook",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
280,
-80
],
"parameters": {
"method": "POST",
"url": "https://hooks.slack.com/services/REPLACE/WITH/YOUR_WEBHOOK",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"text\": {{ JSON.stringify($json.slackText) }}\n}",
"options": {}
}
},
{
"name": "Split sheet rows",
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
280,
160
],
"parameters": {
"fieldToSplitOut": "sheetRows",
"options": {}
}
},
{
"name": "Append to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
540,
160
],
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"mode": "id",
"value": "REPLACE_GOOGLE_SHEET_ID"
},
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Remote Jobs"
},
"columns": {
"mappingMode": "autoMapInputData",
"value": {}
},
"options": {}
}
}
],
"connections": {
"Weekday schedule": {
"main": [
[
{
"node": "Run Remote Jobs Monitor",
"type": "main",
"index": 0
}
]
]
},
"Run Remote Jobs Monitor": {
"main": [
[
{
"node": "Prepare alert and sheet rows",
"type": "main",
"index": 0
}
]
]
},
"Prepare alert and sheet rows": {
"main": [
[
{
"node": "Slack digest webhook",
"type": "main",
"index": 0
},
{
"node": "Split sheet rows",
"type": "main",
"index": 0
}
]
]
},
"Split sheet rows": {
"main": [
[
{
"node": "Append to Google Sheets",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "remote-jobs-only-new-sheets-slack-v1",
"meta": {
"templateCredsSetupCompleted": false
},
"tags": []
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Only-new remote jobs to Google Sheets and Slack. Uses httpRequest, googleSheets. Scheduled trigger; 6 nodes.
Source: https://gist.github.com/benthepythondev00/af0b724d2fb2c2fb503d4d035ba5e949 — 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.
Auto Hunt. Uses httpRequest, googleSheets, rssFeedRead, telegram. Scheduled trigger; 78 nodes.
Auto-Hunt. Uses httpRequest, googleSheets, rssFeedRead, telegram. Scheduled trigger; 78 nodes.
. Uses googleSheets, telegram, httpRequest, wise. Scheduled trigger; 36 nodes.
Elevate your shopping experience with an AI-driven personal assistant that lives right in your WhatsApp. This template automates the entire lifecycle of a shopping list—from intelligent intake and liv
This workflow automates plant care reminders and records using Google Sheets, Telegram, and OpenWeather API.