This workflow corresponds to n8n.io template #9270 — we link there as the canonical source.
This workflow follows the Agent → 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 →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "df2d582a-6922-40a5-a37f-4e986b59fc20",
"name": "Fetch Freelancer.com RSS",
"type": "n8n-nodes-base.rssFeedRead",
"notes": "\ud83c\udf10 RSS FETCH \u2014 Setup\nFetches the latest jobs from Freelancer.com.\n\nCUSTOMIZE URL:\n\u2022 ?keyword=wordpress\n\u2022 &min_price=500\n\u2022 &max_price=5000\n\nExample:\nhttps://www.freelancer.com/rss.xml?keyword=wordpress&min_price=500\n\n\ud83d\udca1 Use multiple RSS nodes for multiple keywords.",
"position": [
96,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.2
},
{
"id": "d4650966-00dc-4f5f-9cdc-eecb0e8622d1",
"name": "Filter Job Quality",
"type": "n8n-nodes-base.filter",
"notes": "\u2705 QUALITY FILTER \u2014 Customize\nCurrent rules:\n\u2022 Description > 100 chars\n\u2022 Posted within last 2 hours\n\nOPTIONAL:\n\u2022 Budget thresholds (if present in feed)\n\u2022 Required/excluded keywords\n\nTIP: Start loose, tighten after 1\u20132 days.",
"position": [
544,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "4efcab46-f278-401e-9161-78eda3c4c5b6",
"name": "AI Job Analyzer",
"type": "@n8n/n8n-nodes-langchain.agent",
"notes": "\ud83e\udde0 AI ANALYZER \u2014 Setup\nScores the job 1\u201310, explains reasoning, flags risks, and classifies client type.\n\nTIP: Keep wishlist specific to reduce noise.",
"position": [
768,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 2.2
},
{
"id": "3b3698b9-f690-4d8e-981d-ead12a0e3061",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"notes": "\ud83e\udde9 OUTPUT PARSER \u2014 Stability\nForces strict JSON so downstream filters/logging never break.",
"position": [
928,
1008
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.3
},
{
"id": "ec090484-ec95-4880-a441-42a8707af572",
"name": "AI Proposal Generator",
"type": "@n8n/n8n-nodes-langchain.openAi",
"notes": "\u270d\ufe0f PROPOSAL WRITER \u2014 Customize\nEdit \"My Skills\" / \"My Experience\" and drop one relevant portfolio link.\n\n\ud83d\udca1 90% done by AI \u2192 add 10% personal touch.",
"position": [
1344,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.3
},
{
"id": "a97989f9-d7d6-4e79-9f26-802372548099",
"name": "Log to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"notes": "\ud83d\udcca JOB LOGGER \u2014 Setup\nAppend/Update by Link to avoid duplicates.\n\nRecommended columns: Timestamp | Job | Description | Link | AI Score | Reasoning | Red Flags | Client Type | AI Proposal | Alert Timestamp.",
"position": [
1696,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 4.4
},
{
"id": "5770b44f-d639-4852-a80e-469474e23966",
"name": "Send Telegram Alert",
"type": "n8n-nodes-base.telegram",
"notes": "\ud83d\udcf1 TELEGRAM \u2014 Setup\nCreate bot with @BotFather \u2192 add token in credentials \u2192 DM your bot \u2192 get Chat ID via @userinfobot and paste here.\n\nTIP: Add buttons via your own webhook for Skip / Applied.",
"position": [
1920,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.2
},
{
"id": "f18bd2e8-d87e-42b8-887a-f7b67fd259c7",
"name": "Sticky: SETUP START",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
432
],
"parameters": {
"content": ""
},
"typeVersion": 1
},
{
"id": "a12e9052-8c1d-406b-95d1-7addfd5a6b31",
"name": "Schedule: Every 5 Minutes1",
"type": "n8n-nodes-base.scheduleTrigger",
"notes": "\u23f0 TRIGGER \u2014 Schedule\nRuns this workflow every 5 minutes.\n\n\u270f\ufe0f CUSTOMIZE:\n\u2022 3 min = ultra-competitive niches\n\u2022 10\u201315 min = lower API cost\n\n\ud83d\udca1 TIP: Start at 5 min and tune after 1\u20132 days based on alert volume.",
"position": [
-800,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.1
},
{
"id": "8162d357-6dfb-40ad-9623-bb68e2b9eb9a",
"name": "Settings (Keyword & Wishlist)1",
"type": "n8n-nodes-base.set",
"notes": "\u2699\ufe0f SETTINGS \u2014 Setup\nDefine your main keyword and your \"wish list\" criteria.\n\nExamples:\n\u2022 Job Keyword: shopify, react, seo\n\u2022 Wishlist: \"Budget > $500, clear scope, no vague fixed-price\"\n\n\ud83d\udca1 TIP: Clone this node to run multiple keywords in parallel (merge later).",
"position": [
-576,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 3.4
},
{
"id": "747c51cd-4009-4593-8b9f-676571342cbf",
"name": "Load Seen Links (Google Sheets)1",
"type": "n8n-nodes-base.googleSheets",
"notes": "\ud83d\udce5 DEDUPE SOURCE \u2014 Setup\nLoads previously processed links from your tracking sheet.\n\nSETUP:\n\u2022 Use the same spreadsheet as the logger\n\u2022 Column \"Link\" must exist\n\n\ud83d\udd12 Prevents duplicate alerts.",
"position": [
-352,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 4.4,
"alwaysOutputData": true
},
{
"id": "49826d1a-879b-49df-9cdc-e6dea41b34e4",
"name": "Collect Seen Links1",
"type": "n8n-nodes-base.aggregate",
"notes": "\ud83e\uddee AGGREGATE \u2014 Setup\nBuilds a quick lookup of already seen links for the dedupe filter.",
"position": [
-128,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "8482790d-f432-40bc-b7e6-a4184b4e7311",
"name": "De-duplicate by Link1",
"type": "n8n-nodes-base.filter",
"notes": "\ud83d\udeab DEDUPE \u2014 Customize\nOnly pass jobs whose link is not already in your sheet.\n\nTIP: If your source has unstable links, switch to a hash of (title+date).",
"position": [
320,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 2.2
},
{
"id": "b19632af-88ae-4e2b-b731-df8b4124545a",
"name": "LLM (OpenAI)1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"notes": "\u2699\ufe0f LLM BACKEND \u2014 Setup\nUsed by Analyzer & Proposal nodes.\n\nTIP: Use gpt-4o-mini for speed/cost unless you need richer reasoning.",
"position": [
800,
1008
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 1.2
},
{
"id": "482ded64-e1b3-472c-bb24-20c3fdf7bd93",
"name": "Gate: Score \u2265 ",
"type": "n8n-nodes-base.if",
"notes": "\ud83c\udfaf SCORE GATE \u2014 Customize\nOnly pass jobs with score \u2265 7.\n\n6 = more alerts, 8 = only premium.",
"position": [
1120,
704
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 2
},
{
"id": "d5802bc6-46df-4658-9386-944b92aed5bf",
"name": "CV (Sheets Tool)1",
"type": "n8n-nodes-base.googleSheetsTool",
"notes": "\ud83d\udee0\ufe0f SHEETS TOOL \u2014 Optional\nFor advanced automations (e.g., pulling portfolio snippets). Safe to disable initially.",
"position": [
1424,
928
],
"parameters": {},
"notesInFlow": true,
"typeVersion": 4.7
}
],
"connections": {
"LLM (OpenAI)1": {
"ai_languageModel": [
[
{
"node": "AI Job Analyzer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"AI Job Analyzer": {
"main": [
[
{
"node": "Gate: Score \u2265 ",
"type": "main",
"index": 0
}
]
]
},
"Gate: Score \u2265 ": {
"main": [
[
{
"node": "AI Proposal Generator",
"type": "main",
"index": 0
}
]
]
},
"CV (Sheets Tool)1": {
"ai_tool": [
[
{
"node": "AI Proposal Generator",
"type": "ai_tool",
"index": 0
}
]
]
},
"Filter Job Quality": {
"main": [
[
{
"node": "AI Job Analyzer",
"type": "main",
"index": 0
}
]
]
},
"Collect Seen Links1": {
"main": [
[
{
"node": "Fetch Freelancer.com RSS",
"type": "main",
"index": 0
}
]
]
},
"Log to Google Sheets": {
"main": [
[
{
"node": "Send Telegram Alert",
"type": "main",
"index": 0
}
]
]
},
"AI Proposal Generator": {
"main": [
[
{
"node": "Log to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"De-duplicate by Link1": {
"main": [
[
{
"node": "Filter Job Quality",
"type": "main",
"index": 0
}
]
]
},
"Fetch Freelancer.com RSS": {
"main": [
[
{
"node": "De-duplicate by Link1",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Job Analyzer",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Schedule: Every 5 Minutes1": {
"main": [
[
{
"node": "Settings (Keyword & Wishlist)1",
"type": "main",
"index": 0
}
]
]
},
"Settings (Keyword & Wishlist)1": {
"main": [
[
{
"node": "Load Seen Links (Google Sheets)1",
"type": "main",
"index": 0
}
]
]
},
"Load Seen Links (Google Sheets)1": {
"main": [
[
{
"node": "Collect Seen Links1",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Be first. Be relevant. Get hired. This ready-to-import n8n workflow automates your entire Freelancer.com job search: it scans new listings, filters the best ones with AI, writes proposal drafts, and sends them to Telegram instantly — all while logging every opportunity into…
Source: https://n8n.io/workflows/9270/ — 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.
staying consistent with personal brand content is hard when you're running everything yourself. you know what you want to say — but turning raw thoughts into polished posts takes hours.
This workflow automates the process of generating, reviewing, and publishing blog posts across multiple platforms, now enhanced with support for RSS Feeds as a content source. It streamlines the manag
Template Name: AI Personal Assistant - Task & Email Management Price: $27 Category: Productivity & Automation Difficulty: Intermediate Use Case: Personal productivity automation for busy professionals
This workflow manages subscription billing reminders and data updates via Telegram. It runs daily at 8:00 AM to check for upcoming due subscriptions, formats relevant information, and sends reminders
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.