Upwork 구인 aggregation 및 알리미
중급
이것은Other, AI분야의자동화 워크플로우로, 13개의 노드를 포함합니다.주로 Set, Gmail, HttpRequest, GoogleSheets, Agent 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. 자동 채용 공고 검색: Upwork 기회 집계 및 AI 기반 알림
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •OpenAI API Key
사용된 노드 (13)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "Q4LhFRDraaQuorBs",
"meta": {
"instanceId": "84ad02d6104594179f43f1ce9cfe3a81637b2faedb57dafcb9e649b7542988db",
"templateCredsSetupCompleted": true
},
"name": "Upwork Job Aggregator & Notifier",
"tags": [],
"nodes": [
{
"id": "834d0a42-1398-4cd4-aaf3-b1164e00b4a8",
"name": "Daily Upwork Job Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
0,
0
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "a0d54dfe-fc68-4020-b2ed-d191a57d5897",
"name": "Fetch Upwork Jobs (Apify)",
"type": "n8n-nodes-base.httpRequest",
"position": [
220,
0
],
"parameters": {
"url": "https://api.apify.com/v2/actor-tasks/<YOUR_TASK_ID>/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>",
"method": "POST",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "a9812fc7-0fa5-492a-91aa-392d0c8ee43b",
"name": "Format Job Fields",
"type": "n8n-nodes-base.set",
"position": [
440,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "24bd782a-a34f-4b98-8d8f-21763181677b",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "ee879b3d-339a-44c2-9e11-f653edab2e7f",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
},
{
"id": "b5ff7975-667b-4997-ac8f-acbe9a3b3b85",
"name": "description",
"type": "string",
"value": "={{ $json.description }}"
},
{
"id": "29051fc3-e4f8-4e39-a024-d7b943271acc",
"name": "budget",
"type": "string",
"value": "={{ $json.budget }}"
},
{
"id": "a6492128-a58a-4735-b427-12265f81da3a",
"name": "datePosted",
"type": "string",
"value": "={{ $json.datePosted }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a996aa35-8f0d-4e1a-997b-4aadd402f65c",
"name": "Log Jobs to Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
740,
0
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"title": "={{ $json.title }}",
"budget": "={{ $json.budget }}",
"datePosted": "={{ $json.datePosted }}",
"description": "={{ $json.description }}"
},
"schema": [
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "url",
"type": "string",
"display": true,
"required": false,
"displayName": "url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "budget",
"type": "string",
"display": true,
"required": false,
"displayName": "budget",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "datePosted",
"type": "string",
"display": true,
"required": false,
"displayName": "datePosted",
"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/1dEU6uMB4ehiGXjIExjtFQHvUjANRODawKMBGKDaTcEc/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1dEU6uMB4ehiGXjIExjtFQHvUjANRODawKMBGKDaTcEc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1dEU6uMB4ehiGXjIExjtFQHvUjANRODawKMBGKDaTcEc/edit?usp=drivesdk",
"cachedResultName": "Upwork Scraper"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "v021NCWuTwSSSXPP",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.5
},
{
"id": "e0cd68e5-4d6d-479a-8a48-1faccc9f3ff7",
"name": "요약 Job Listings",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
960,
0
],
"parameters": {
"text": "=Provide a summary of the upwork jobs. It should be in email format\n\nTitle: {{ $json.title }}\nURL: {{ $json.url }}\nDescription:{{ $json.description }}\nBudget:{{ $json.budget }}\nDate posted: {{ $json.datePosted }}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.9
},
{
"id": "30002e32-6046-4e5c-a27f-a0d58f380ae9",
"name": "Send Job Summary 이메일",
"type": "n8n-nodes-base.gmail",
"position": [
1500,
0
],
"webhookId": "6937d724-5ede-4c56-83fd-fde84496eabd",
"parameters": {
"sendTo": "shahkar.genai@gmail.com",
"message": "={{ $json.output.Summary }}",
"options": {},
"subject": "={{ $json.output.subject }}"
},
"credentials": {
"gmailOAuth2": {
"id": "YMHjS2nJsRGP7svY",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "a1fb5d66-b780-4b6b-96be-3391b6196301",
"name": "OpenAI Job Summarizer",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
900,
260
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "wYwTjEv45IzlAOAu",
"name": "OpenAi account 2"
}
},
"typeVersion": 1.2
},
{
"id": "f79a7336-80fc-4832-862b-51d0d737d5a3",
"name": "Parse Summary Output",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1160,
260
],
"parameters": {
"jsonSchemaExample": "{\n \"subject\": \"Upwork Job Opportunity: Webflow Expert Needed for Portfolio Website\",\n \"Summary\": \"The client is seeking a designer with strong experience in Webflow to create a responsive and elegant portfolio site.\"\n}\n"
},
"typeVersion": 1.2
},
{
"id": "85465ead-0a06-455c-9308-866c092d8ef5",
"name": "메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-60,
-560
],
"parameters": {
"color": 3,
"width": 640,
"height": 760,
"content": "### 🔁 **Section 1: Job Fetch & Preparation**\n\n📦 **Group Name**: `📥 Fetch & Prepare Upwork Jobs`\n\n#### ✅ **Included Nodes:**\n\n1. `🕒 Daily Upwork Job Trigger`\n2. `🌐 Fetch Upwork Jobs (Apify)`\n3. `🛠️ Format Job Fields`\n\n#### 📋 **What this group does:**\n\nThis group is responsible for automatically triggering the job search, pulling fresh job data from Upwork (via Apify), and formatting that data into a clean, structured format.\n\n#### 📌 **Highlights:**\n\n* Uses Apify’s `run-sync-get-dataset-items` to ensure you get fresh job results in one go.\n* Ensures only the required fields (like title, URL, budget) are passed forward.\n* Keeps your data clean and minimal for logging and summarization.\n\n---"
},
"typeVersion": 1
},
{
"id": "3699ba73-75ee-4bf2-91eb-8d0d05143321",
"name": "메모1",
"type": "n8n-nodes-base.stickyNote",
"position": [
680,
-620
],
"parameters": {
"color": 5,
"width": 620,
"height": 1040,
"content": "### 📊 **Section 2: Data Logging & Summary Generation**\n\n📦 **Group Name**: `🧾 Log & Summarize Jobs`\n\n#### ✅ **Included Nodes:**\n\n1. `📈 Log Jobs to Google Sheet`\n2. `🤖 Summarize Job Listings`\n\n * `🧠 OpenAI Job Summarizer`\n * `📄 Parse Summary Output`\n\n#### 📋 **What this group does:**\n\nThis group handles the dual responsibility of:\n\n* Persistently logging all job entries to a **Google Sheet**\n* Generating a human-friendly **natural language summary** of the fetched jobs using the OpenAI model and parsing the result into clean output\n\n#### 💡 **Why this matters:**\n\n* Keeps historical records in Sheets ✅\n* Makes email digest more meaningful and less overwhelming for the reader 🧠\n\n---\n\n"
},
"typeVersion": 1
},
{
"id": "2289feb5-9ab1-4dbb-a77e-f4742f0f341d",
"name": "메모2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1400,
-420
],
"parameters": {
"color": 6,
"width": 340,
"height": 600,
"content": "## 📤 **Section 3: Job Summary Notification**\n\n📦 **Group Name**: `✉️ Notify via Email`\n\n#### ✅ **Included Node:**\n\n1. `📧 Send Job Summary Email`\n\n#### 📋 **What this group does:**\n\nSends a **summary email** to the desired recipient(s) with the content generated by the AI agent.\n\n"
},
"typeVersion": 1
},
{
"id": "95727922-4856-4481-acff-519638ac5d23",
"name": "메모9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
-560
],
"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": "c161b105-70a6-431a-91e2-9031ccba8fe4",
"name": "메모4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
-220
],
"parameters": {
"color": 4,
"width": 1289,
"height": 3058,
"content": "# ✅ n8n Automation: \"Upwork Job Aggregator & Notifier\"\n\n> **Purpose**: Automatically fetch job postings from Upwork with specific keywords, save them in Google Sheets, summarize them using AI, and email the results daily (or at any interval you want).\n\n---\n\n## 🧱 HIGH-LEVEL OVERVIEW\n\n| Feature | Description |\n| --------------- | ---------------------------------------------------- |\n| 🕐 Trigger | Scheduled (e.g., every 6 hours) |\n| 🌐 Source | [Apify](https://apify.com) actor for Upwork scraping |\n| 📄 Storage | Google Sheets |\n| 🧠 Summary | OpenAI model with structured output |\n| 📬 Notification | Gmail with formatted job summary |\n\n---\n\n## 🧠 GROUP 1: 📥 Fetch & Prepare Upwork Jobs\n\n### 🟢 Nodes:\n\n1. `🕒 Daily Upwork Job Trigger`\n\n * **Type**: Cron Trigger\n * **Purpose**: Runs the flow automatically at your set interval (e.g., every 6 hours or daily)\n\n2. `🌐 Fetch Upwork Jobs (Apify)`\n\n * **Type**: HTTP Request\n * **Method**: POST\n * **URL**: `https://api.apify.com/v2/actor-tasks/<TASK_ID>/run-sync-get-dataset-items?token=<API_TOKEN>`\n * **Purpose**: Calls your Apify Upwork Scraper task to get the latest job listings\n * **Output**: JSON array of job objects\n\n3. `🛠️ Format Job Fields`\n\n * **Type**: Edit Fields (Set or Function Node)\n * **Purpose**: Extracts needed job fields like `title`, `url`, `description`, `budget`, and `datePosted`\n * **Reason**: Makes data uniform for Sheet storage and AI summary\n\n---\n\n## 📊 GROUP 2: 🧾 Log & Summarize Jobs\n\n### 🟢 Nodes:\n\n4. `📈 Log Jobs to Google Sheet`\n\n * **Type**: Google Sheets → Append Sheet\n * **Sheet Setup**: Must have headers like `Title`, `URL`, `Description`, `Budget`, `Date`\n * **Purpose**: Appends each new job as a row in the sheet for historical tracking\n\n5. `🤖 Summarize Job Listings` (AI Agent node group)\n\n * **Type**: Tools Agent (LangChain / OpenAI Integration)\n * **Connected Sub-Nodes**:\n\n * `🧠 OpenAI Job Summarizer` (OpenAI Chat Model)\n\n * **Prompt** example:\n\n ```\n You are an assistant summarizing freelance job postings. Summarize each job in 1-2 lines. Include title, budget, and a short description.\n ```\n * `📄 Parse Summary Output` (Structured Output Parser)\n\n * **Purpose**: Converts the AI response into structured n8n items\n * **Input**: Job data from Google Sheets\n * **Output**: A clear, natural language summary of all jobs\n\n---\n\n## 📤 GROUP 3: ✉️ Notify via Email\n\n### 🟢 Node:\n\n6. `📧 Send Job Summary Email`\n\n * **Type**: Gmail → Send Message\n\n * **Authentication**: Google OAuth2\n\n * **To**: Yourself or your team\n\n * **Subject**: `\"🚀 New Upwork Jobs Found!\"`\n\n * **Body**:\n\n ```\n Hello,\n\n Here’s a summary of the latest Upwork jobs matching your criteria:\n\n {{summary from AI}}\n\n ➕ View full job list here: [Google Sheet Link]\n\n Best, \n Your Automation Bot 🤖\n ```\n\n * **Error Handling**: Add an IF node to prevent email if no jobs were returned (optional)\n\n---\n\n## 🗂 Suggested Color-Coded Groups in n8n:\n\n| Group | Nodes | Color | Description |\n| ------------------------------ | ------------------------------------ | --------- | ------------------------------- |\n| 📥 Fetch & Prepare Upwork Jobs | Trigger, HTTP Request, Format Fields | 🟢 Green | Gets data and prepares it |\n| 🧾 Log & Summarize Jobs | Google Sheets, AI Agent, Parser | 🟡 Yellow | Logs + creates smart summaries |\n| ✉️ Notify via Email | Gmail | 🔴 Red | Notifies you with clean summary |\n\n---\n\n## 🚀 ADVANTAGES\n\n✅ Completely automated\n✅ Saves all job history\n✅ AI-enhanced summaries\n✅ Instant email alerts\n✅ Easy to expand or customize\n\n---\n\n## 🧩 Bonus Enhancements (Optional)\n\n| Idea | Description |\n| ------------------------- | ------------------------------------------------------------- |\n| 🔍 Add keyword filters | Add filters before saving to Sheets (e.g., only “React” jobs) |\n| 🕵️♂️ Prevent duplicates | Store job IDs and check before saving |\n| 📣 Add Slack alerts | Add Slack node for team notification |\n| 📊 Dashboard | Build Google Data Studio report over the Sheet |\n\n---\n\n\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {
"Fetch Upwork Jobs (Apify)": [
{
"json": {
"url": "https://www.upwork.com/job/Looking-Webflow-Expert-Build-Portfolio-Website_~01abcd123456efghij",
"title": "Looking for a Webflow Expert to Build a Portfolio Website",
"budget": "$300",
"datePosted": "2025-06-03T08:45:00Z",
"description": "Need a designer with strong Webflow experience to create a responsive and elegant portfolio site."
}
},
{
"json": {
"url": "https://www.upwork.com/job/React-Developer-Needed-SaaS-Dashboard_~0123abcd4567efghij",
"title": "React Developer Needed for SaaS Dashboard",
"budget": "$500",
"datePosted": "2025-06-03T06:30:00Z",
"description": "Looking for an experienced React developer to work on our SaaS product dashboard UI. Experience with Tailwind is a plus."
}
},
{
"json": {
"url": "https://www.upwork.com/job/Copywriter-Landing-Page-Finance_~0a1b2c3d4e5f67890",
"title": "Copywriter for Landing Page Content (Finance Industry)",
"budget": "$150",
"datePosted": "2025-06-02T21:15:00Z",
"description": "We need SEO-optimized copy for a fintech landing page. Prior experience in finance writing preferred."
}
}
]
},
"settings": {
"executionOrder": "v1"
},
"versionId": "8c929fc6-2198-4adf-89c3-ff0a2b296fdd",
"connections": {
"a9812fc7-0fa5-492a-91aa-392d0c8ee43b": {
"main": [
[
{
"node": "a996aa35-8f0d-4e1a-997b-4aadd402f65c",
"type": "main",
"index": 0
}
]
]
},
"f79a7336-80fc-4832-862b-51d0d737d5a3": {
"ai_outputParser": [
[
{
"node": "Summarize Job Listings",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"a1fb5d66-b780-4b6b-96be-3391b6196301": {
"ai_languageModel": [
[
{
"node": "Summarize Job Listings",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Summarize Job Listings": {
"main": [
[
{
"node": "Send Job Summary Email",
"type": "main",
"index": 0
}
]
]
},
"834d0a42-1398-4cd4-aaf3-b1164e00b4a8": {
"main": [
[
{
"node": "a0d54dfe-fc68-4020-b2ed-d191a57d5897",
"type": "main",
"index": 0
}
]
]
},
"a996aa35-8f0d-4e1a-997b-4aadd402f65c": {
"main": [
[
{
"node": "Summarize Job Listings",
"type": "main",
"index": 0
}
]
]
},
"a0d54dfe-fc68-4020-b2ed-d191a57d5897": {
"main": [
[
{
"node": "a9812fc7-0fa5-492a-91aa-392d0c8ee43b",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 기타, 인공지능
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
AI YouTube 분석 어시스턴트: 댓글 분석 및 인사이트 리포트
AI YouTube 분석 어시스턴트: 댓글 분석기 및 인사이트 리포트 생성기
If
Set
Code
+
If
Set
Code
19 노드Yaron Been
인공지능
최고 재무 책임자 예측 에이전트
Stripe 데이터 기반 GPT-4 및 Google Sheets 자동화 수익 예측
Set
Code
Stripe
+
Set
Code
Stripe
16 노드Yaron Been
인공지능
자동 뉴스 요약 및 이메일 뉴스레터 (GPT-4, NewsAPI 및 Gmail)
GPT-4, NewsAPI, Gmail을 활용한 뉴스 요약 및 이메일 뉴스레터 자동 생성
Gmail
Http Request
Google Sheets
+
Gmail
Http Request
Google Sheets
7 노드Yaron Been
인공지능
Crunchbase 스타트업 활동 모니터
매일 스타트업 정보: Crunchbase 업데이트를 처리하여 이메일 요약을 전송
Set
Gmail
Http Request
+
Set
Gmail
Http Request
12 노드Yaron Been
인공지능
자동화된 포럼 모니터링_via_Bright_data
Bright Data와 n8n을 사용하여 포럼 모니터링 자동화
Set
Code
Html
+
Set
Code
Html
17 노드Yaron Been
인공지능
자동화 뉴스-브리핑 AI 에이전트 v13
AI 뉴스 연구 팀: 24/7 브리핑 자동화, Perplexity 인용 포함
Set
Code
Gmail
+
Set
Code
Gmail
37 노드Derek Cheung
제품
워크플로우 정보
난이도
중급
노드 수13
카테고리2
노드 유형9
저자
Yaron Been
@yaron-nofluffBuilding AI Agents and Automations | Growth Marketer | Entrepreneur | Book Author & Podcast Host If you need any help with Automations, feel free to reach out via linkedin: https://www.linkedin.com/in/yaronbeen/ And check out my Youtube channel: https://www.youtube.com/@YaronBeen/videos
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유