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 →
{
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 3
}
]
}
},
"id": "1",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
240,
300
]
},
{
"parameters": {
"jsCode": "const portals = [\n { name: 'Duunitori', url: 'https://duunitori.fi/tyopaikat', language: 'fi' },\n { name: 'Tyomarkkinatori', url: 'https://tyomarkkinatori.fi', language: 'fi' },\n { name: 'Oikotie', url: 'https://tyopaikat.oikotie.fi', language: 'fi' },\n { name: 'Jobly', url: 'https://www.jobly.fi', language: 'fi' },\n { name: 'LinkedIn', url: 'https://www.linkedin.com/jobs/search/?location=Finland', language: 'en' },\n { name: 'Indeed', url: 'https://fi.indeed.com', language: 'fi' },\n { name: 'JobsPortal', url: 'https://www.jobsportal.fi', language: 'en' },\n { name: 'JobsInHelsinki', url: 'https://www.jobsinhelsinki.com', language: 'en' },\n { name: 'Barona', url: 'https://www.barona.fi/tyonhakijalle/avoimet-tyopaikat', language: 'fi' },\n { name: 'Rekrytointi', url: 'https://www.rekrytointi.com', language: 'fi' },\n { name: 'WorkInFinland', url: 'https://www.workinfinland.com', language: 'en' },\n { name: 'Staffpoint', url: 'https://www.staffpoint.fi/tyopaikat', language: 'fi' }\n];\nreturn portals.map(portal => ({ json: portal }));"
},
"id": "2",
"name": "Job Portals List",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
460,
300
]
},
{
"parameters": {
"url": "={{ $json.url }}",
"options": {
"timeout": 30000,
"response": {
"response": {
"responseFormat": "text"
}
}
}
},
"id": "3",
"name": "Scrape Job Listings",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
680,
300
]
},
{
"parameters": {
"jsCode": "const html = $json.data || '';\nconst portalName = $('Job Portals List').item.json.name;\nconst portalUrl = $('Job Portals List').item.json.url;\nreturn [{\n json: {\n portal: portalName,\n portal_url: portalUrl,\n raw_html: html.substring(0, 15000)\n }\n}];"
},
"id": "4",
"name": "Prepare for AI",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
900,
300
]
},
{
"parameters": {
"jsCode": "const allowedLanguages = ['fi', 'en', 'ar'];\nconst now = new Date();\nconst jobs = $input.all();\n\nconst filtered = jobs.filter(item => {\n const job = item.json;\n if (!job.job_title || !job.job_url) return false;\n if (job.requires_other_language === true) return false;\n if (!allowedLanguages.includes(job.language)) return false;\n if (job.posting_date) {\n const posted = new Date(job.posting_date);\n const daysDiff = (now - posted) / (1000 * 60 * 60 * 24);\n if (daysDiff > 30) return false;\n }\n return true;\n});\n\nreturn filtered.map(item => ({ json: item.json }));"
},
"id": "5",
"name": "Language and Date Filter",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1120,
300
]
},
{
"parameters": {
"jsCode": "const jobData = $json;\nreturn [{\n json: {\n ...jobData,\n application_status: 'Pending Review',\n created_at: new Date().toISOString(),\n review_deadline: new Date(Date.now() + 24*60*60*1000).toISOString()\n }\n}];"
},
"id": "6",
"name": "Prepare Application",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1340,
300
]
},
{
"parameters": {
"chatId": "YOUR_TELEGRAM_CHAT_ID",
"text": "=\ud83d\udd14 NEW JOB MATCH!\n\n\ud83d\udccb {{ $json.job_title }}\n\ud83c\udfe2 {{ $json.company }}\n\ud83d\udccd {{ $json.location }}\n\ud83c\udf10 {{ $json.portal }}\n\ud83d\udd17 {{ $json.job_url }}\n\n\u23f0 24h to review. Auto-submits after deadline.",
"additionalFields": {}
},
"id": "7",
"name": "Send Telegram Alert",
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1560,
300
]
},
{
"parameters": {
"operation": "append",
"documentId": {
"mode": "list",
"value": "YOUR_GOOGLE_SHEET_ID"
},
"sheetName": {
"mode": "list",
"value": "gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"Date": "={{ $json.created_at }}",
"Company": "={{ $json.company }}",
"Job Title": "={{ $json.job_title }}",
"Portal": "={{ $json.portal }}",
"Language": "={{ $json.language }}",
"Score": "={{ $json.score }}",
"Status": "=Pending Review",
"Job URL": "={{ $json.job_url }}",
"Notes": "={{ $json.match_reason }}"
}
}
},
"id": "8",
"name": "Log to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
1780,
300
]
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Job Portals List",
"type": "main",
"index": 0
}
]
]
},
"Job Portals List": {
"main": [
[
{
"node": "Scrape Job Listings",
"type": "main",
"index": 0
}
]
]
},
"Scrape Job Listings": {
"main": [
[
{
"node": "Prepare for AI",
"type": "main",
"index": 0
}
]
]
},
"Prepare for AI": {
"main": [
[
{
"node": "Language and Date Filter",
"type": "main",
"index": 0
}
]
]
},
"Language and Date Filter": {
"main": [
[
{
"node": "Prepare Application",
"type": "main",
"index": 0
}
]
]
},
"Prepare Application": {
"main": [
[
{
"node": "Send Telegram Alert",
"type": "main",
"index": 0
}
]
]
},
"Send Telegram Alert": {
"main": [
[
{
"node": "Log to Google Sheets",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Job-Agent-Workflow. Uses httpRequest, telegram, googleSheets. Scheduled trigger; 8 nodes.
Source: https://gist.github.com/mmasni/c190900fe19f7e69d77937b165b437b5 — 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.
Ultimate Agent Platform. Uses httpRequest, n8n-nodes-openclaw, googleSheets, telegram. Scheduled trigger; 9 nodes.
Cyber Zap Public. Uses httpRequest, chainLlm, outputParserStructured, telegram. Scheduled trigger; 69 nodes.
This workflow automates invoicing and payment follow-ups using Google Sheets, PDFShift, Groq (LLM), Gmail, and Telegram, sending initial invoices with PDF attachments, scheduling overdue reminders at
This workflow is for solopreneurs, founders, creators, and marketers who want a consistent LinkedIn presence without spending hours writing posts. Ideal for anyone in tech, SaaS, or AI who wants trend
YOUTUBE GUIDE 📣 This template generates up to 2,000 AI-based stock images per day for under $4. It includes prompt generation, image creation, metadata enrichment, upload to Google Drive, and error lo