매일 IndieHackers Reddit 트렌드 분석을 Slack으로 (Gemini AI)
중급
이것은Market Research, Multimodal AI분야의자동화 워크플로우로, 9개의 노드를 포함합니다.주로 Code, Cron, Slack, Reddit, Agent 등의 노드를 사용하며. Gemini AI를 사용한 매일 IndieHackers Reddit 트렌드 분석을 Slack으로 전송
사전 요구사항
- •Slack Bot Token 또는 Webhook URL
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "bead0a5b25199559eb2b2715841bf43c72bdce5faf95fc5e5ce3a983ef98cb4a",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "d56d56ef-e47d-4662-8fcc-61d658e33266",
"name": "Daily Schedule",
"type": "n8n-nodes-base.cron",
"position": [
384,
272
],
"parameters": {
"triggerTimes": {
"item": [
{
"hour": 8
}
]
}
},
"typeVersion": 1
},
{
"id": "91fa23ab-325d-455e-b8a2-41d4be6df8e0",
"name": "Extract Posts Data",
"type": "n8n-nodes-base.code",
"position": [
784,
272
],
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "c88ba66a-591a-4ade-9c82-40e37109c455",
"name": "AI Intent Analysis",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
992,
160
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash-lite-preview-06-17",
"cachedResultName": "models/gemini-2.5-flash-lite-preview-06-17"
},
"options": {
"temperature": 0.3
},
"messages": {
"values": [
{
"role": "model",
"content": "=You are an expert analyst for startup communities who identifies hot topics, growth patterns, and actionable insights from Reddit posts, focusing on indie hackers and solopreneurs."
},
{
"content": "=You are given an array of Reddit posts from r/indiehackers in JSON format. Each object includes fields like title, selftext, ups, num_comments, created_utc, link_flair_text, and url. Perform a structured analysis to identify what is hot and why. Use only the provided data. Do not invent data.\n\nTasks\n\nData sanity\n\nParse the JSON array and treat each object as a post.\n\nUse these fields when available: title, selftext, ups, score, upvote_ratio, num_comments, created_utc, link_flair_text, author, subreddit_subscribers, permalink, url.\n\nIf values are null or missing, handle gracefully.\n\nHotness scoring\n\nCompute a relative Hotness Score for each post to normalize by time and engagement:\nHotness Score = (ups + 2*num_comments) * freshness_decay\nwhere freshness_decay = 1 / (1 + hours_since_post/24)\n\nIf created_utc is not comparable, assume the freshest post has hours_since_post=1 and scale others proportionally.\n\nOutput Hotness Score to one decimal place.\n\nTopic extraction\n\nExtract concise topics using title+first 500 chars of selftext.\n\nPrefer 1-5 word topics, e.g., “Mod recruitment,” “SaaS boilerplate sales,” “Competitor paywalls research,” “Cold email performance,” “Data visualization SaaS.”\n\nAssign 1–3 topics per post.\n\nTheme clustering\n\nGroup posts into higher-level themes and count frequency and total Hotness by theme.\n\nExample themes: Go-to-market tactics, Product launches, Community/Moderation, Tooling/Boilerplates, Growth/Distribution, Monetization/Pricing, Research/Validation.\n\nSignals of traction\n\nFor each post, extract any concrete traction signals (metrics, revenue, sales, subscribers, conversion, demos booked).\n\nPresent as short bullet points tied to the post.\n\nActionable insights\n\nDerive 3–7 actionable insights for indie hackers based on patterns in high-heat posts (what to build, how to launch, which channels work, what content resonates).\n\nMake each insight specific and testable (Who, What, How, Expected signal).\n\nOutput format\nReturn the following sections:\n\nHot posts (ranked)\nFor each top 5 posts by Hotness Score:\n\nRank. Title (Hotness: X.X)\n\nTopics: …\n\nFlair: …\n\nEngagement: ups=, comments=, upvote_ratio=\n\nPosted: created_utc (as UNIX)\n\nTraction signals: bullets or “None stated”\n\nLink: permalink\n\nThemes summary\n\nTheme name — posts: N, total hotness: X.X\n\nOne-line takeaway per theme\n\nWhat’s working now (actionable insights)\n\n5–7 bullets with concrete experiments\n\nEmerging opportunities\n\n3–5 bullets identifying underserved needs or repeated pain points\n\nData appendix\n\nBrief note on scoring formula and any assumptions used\n\nConstraints\n\nDo not fetch external data; analyze only provided JSON.\n\nKeep the final output under 600 words.\n\nBe concise, avoid repetition, and prefer clear, skimmable bullets.\n\nNow analyze this dataset:\n{{ JSON.stringify($json, null, 10) }}"
}
]
}
},
"credentials": {
"googlePalmApi": {
"id": "WXBzegbf5JJGseFg",
"name": "Google Gemini(PaLM) Api account 2"
}
},
"typeVersion": 1
},
{
"id": "65c2f7e8-d25f-428b-bc7a-d77715404155",
"name": "Parse AI Response",
"type": "n8n-nodes-base.code",
"position": [
1424,
160
],
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "660c8c3e-312a-4e48-8e97-a5bd80c0f82d",
"name": "Send to Slack",
"type": "n8n-nodes-base.slack",
"onError": "continueRegularOutput",
"position": [
2096,
160
],
"webhookId": "de5cfe06-2dd4-45fb-9d8b-fcba2cac25f1",
"parameters": {
"text": "={{ $json.content.parts[0].text }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C098Y3YJC3C",
"cachedResultName": "product-ai"
},
"otherOptions": {
"mrkdwn": true
},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "i1bKyxInTqS4wicG",
"name": "Slack account 3"
}
},
"typeVersion": 2.3
},
{
"id": "4c8435df-f386-4939-9758-60cfd0b15afc",
"name": "Get many posts",
"type": "n8n-nodes-base.reddit",
"position": [
592,
272
],
"parameters": {
"limit": 5,
"filters": {},
"operation": "getAll",
"subreddit": "indiehackers"
},
"credentials": {
"redditOAuth2Api": {
"id": "483pkfYlMMvnnZcG",
"name": "Reddit account 2"
}
},
"typeVersion": 1
},
{
"id": "85d5af69-f320-47c0-b7c4-5d21060dc8b0",
"name": "Groq Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"position": [
1632,
384
],
"parameters": {
"model": "openai/gpt-oss-120b",
"options": {}
},
"credentials": {
"groqApi": {
"id": "kMzS3MA3i9DkfPCw",
"name": "Groq account 2"
}
},
"typeVersion": 1
},
{
"id": "8b53096c-c429-432f-9b97-d1a511b81de9",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1696,
160
],
"parameters": {
"text": "=Input\n\nposts: JSON array of Reddit posts from r/indiehackers.\n\ncontext:\n\nchannel_type: one of [company, team, project].\n\naudience: string describing who should read this.\n\ncta_link: URL for the full analysis or dashboard.\n\ntimeframe_label: human label for the period (e.g., “This week”).\n\nask_in_thread_note: short text inviting questions in thread.\n\nTasks\n\nParse and validate\n\nTreat each array element as a post.\n\nUse available fields: title, selftext, ups, num_comments, upvote_ratio, created_utc, link_flair_text, permalink, url, score, subreddit_subscribers, author.\n\nHandle nulls gracefully.\n\nScore hotness\n\nHotness = (ups + 2*num_comments) * freshness_decay\n\nfreshness_decay = 1 / (1 + hours_since_post/24)\n\nIf absolute time unavailable, scale freshness so newest post has hours_since_post=1, others proportional.\n\nRound Hotness to 1 decimal.\n\nExtract topics and traction\n\nTopics: 1–3 concise phrases (1–5 words) from title+first 500 chars of selftext.\n\nTraction: any concrete metrics (sales, revenue, demos, reply rates, etc.). If none, “None stated.”\n\nCluster into themes\n\nThemes like: Go-to-market, Product launches, Community/Moderation, Tooling/Boilerplates, Growth/Distribution, Monetization/Pricing, Research/Validation.\n\nFor each theme: count posts and sum Hotness.\n\nProduce Slack Block Kit JSON\n\nOutput MUST be a single JSON object with a top-level blocks array only (no attachments), valid per Block Kit.\n\nKeep the message compact and skimmable. Use:\n\nheader block for TL;DR headline.\n\nsection blocks with mrkdwn for summaries.\n\nfields for compact stats.\n\ncontext block for disclaimers or timestamps.\n\nactions block with one “Open Dashboard” button if cta_link provided.\n\nUse minimal, meaningful emojis (1–3 per section).\n\nInvite discussion in a thread with a short line.\n\nSlack content rules\n\nHeadline (TL;DR): bold, 1–2 emojis. Example: “🚀 Indie Hackers Trends — This Week”.\n\nCore info first: one sentence summary of the biggest takeaway this period.\n\nHot posts: top 3 posts by Hotness. Each includes title, Hotness, topics, flair, key engagement, traction, and a Reddit button.\n\nThemes summary: top 3 themes with posts count and total hotness and a one‑line takeaway.\n\nCTA: a single bold CTA to view the dashboard/report.\n\nThread prompt: “Please ask questions in the thread 👇”.\n\nInclude a small “how scored” note in context.\n\nKeep total blocks under 50; aim for brief content.\n\nRequired output schema\nReturn ONLY a JSON object with this structure:\n\n{\n\"blocks\": [\n{\n\"type\": \"header\",\n\"text\": { \"type\": \"plain_text\", \"text\": \"🚀 Indie Hackers Trends — {timeframe_label}\", \"emoji\": true }\n},\n{\n\"type\": \"section\",\n\"text\": {\n\"type\": \"mrkdwn\",\n\"text\": \"TL;DR: {single_sentence_big_takeaway}\"\n}\n},\n{\n\"type\": \"section\",\n\"fields\": [\n{ \"type\": \"mrkdwn\", \"text\": \"Audience:\\n{audience}\" },\n{ \"type\": \"mrkdwn\", \"text\": \"Posts analyzed:\\n{posts_count}\" }\n]\n},\n\ntext\n{ \"type\": \"divider\" },\n\n{\n \"type\": \"section\",\n \"text\": { \"type\": \"mrkdwn\", \"text\": \"*🔥 Hot Posts (Top 3)*\" }\n},\n\n// Repeat this group for up to 3 posts\n{\n \"type\": \"section\",\n \"text\": {\n \"type\": \"mrkdwn\",\n \"text\": \"*{rank}\\\\. {title}* \\nHotness: {hotness}\"\n }\n},\n{\n \"type\": \"context\",\n \"elements\": [\n { \"type\": \"mrkdwn\", \"text\": \"*Topics:* {topics_csv}\" },\n { \"type\": \"mrkdwn\", \"text\": \"*Flair:* {flair_or_dash}\" }\n ]\n},\n{\n \"type\": \"section\",\n \"fields\": [\n { \"type\": \"mrkdwn\", \"text\": \"*Ups:*\\n{ups_or_dash}\" },\n { \"type\": \"mrkdwn\", \"text\": \"*Comments:*\\n{num_comments_or_dash}\" },\n { \"type\": \"mrkdwn\", \"text\": \"*Upvote ratio:*\\n{upvote_ratio_or_dash}\" },\n { \"type\": \"mrkdwn\", \"text\": \"*Posted (UNIX):*\\n{created_utc_or_dash}\" }\n ]\n},\n{\n \"type\": \"section\",\n \"text\": { \"type\": \"mrkdwn\", \"text\": \"*Traction:*\\n{traction_bullets_or_None_stated}\" }\n},\n{\n \"type\": \"actions\",\n \"elements\": [\n {\n \"type\": \"button\",\n \"text\": { \"type\": \"plain_text\", \"text\": \"Open Reddit\" },\n \"url\": \"https://www.reddit.com{permalink}\"\n }\n ]\n},\n\n{ \"type\": \"divider\" },\n\n{\n \"type\": \"section\",\n \"text\": { \"type\": \"mrkdwn\", \"text\": \"*🧭 Themes Summary*\" }\n},\n\n// Up to 3 themes\n{\n \"type\": \"section\",\n \"text\": { \"type\": \"mrkdwn\", \"text\": \"- *{theme_name}* — posts: {n}, total hotness: {sum_hotness} \\n_{one_line_takeaway}_\" }\n},\n\n{ \"type\": \"divider\" },\n\n{\n \"type\": \"section\",\n \"text\": { \"type\": \"mrkdwn\", \"text\": \"*✅ What to do now*\" }\n},\n{\n \"type\": \"section\",\n \"text\": { \"type\": \"mrkdwn\", \"text\": \"- {actionable_insight_1}\\n- {actionable_insight_2}\\n- {actionable_insight_3}\" }\n},\n\n{\n \"type\": \"actions\",\n \"elements\": [\n {\n \"type\": \"button\",\n \"text\": { \"type\": \"plain_text\", \"text\": \"Open Dashboard\" },\n \"url\": \"{cta_link}\"\n }\n ]\n},\n\n{\n \"type\": \"context\",\n \"elements\": [\n { \"type\": \"mrkdwn\", \"text\": \"_Please ask questions in the thread 👇 - Hotness = (ups + 2×comments) × 1/(1 + hours/24)_\" }\n ]\n}\n]\n}\n\nConstraints\n\nOutput only the JSON object above (no extra text).\n\nUse mrkdwn and fields per Slack docs.\n\nKeep emojis purposeful and minimal.\n\nButtons must be valid Block elements.\n\nDo not exceed 50 blocks.\n\nNow analyze this dataset and produce the Slack JSON:\n\nposts: [PASTE JSON ARRAY HERE]\n\ncontext:\n{\n\"channel_type\": \"team\",\n\"audience\": \"Growth, Product, and Founders\",\n\"cta_link\": \"https://example.com/trends-dashboard\",\n\"timeframe_label\": \"This Week\",\n\"ask_in_thread_note\": \"Please ask any questions in the thread 👇\"\n}\n\n{{ JSON.stringify($json, null, 2) }}",
"options": {
"systemMessage": "You are a startup community analyst and Slack content designer. Produce a single Slack Block Kit message that helps a team quickly understand what’s trending and what to do next. The message should be skimmable, well-structured, and intera"
},
"promptType": "define"
},
"typeVersion": 2.1
},
{
"id": "da239eeb-8398-4318-8361-e483e30ec70c",
"name": "메모",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
-512
],
"parameters": {
"width": 560,
"height": 1424,
"content": "# 🚀 Daily IndieHackers Reddit Trend Analysis to Slack\n\n> **Transform Reddit chaos into actionable startup intelligence** \n> Get AI-powered insights from r/indiehackers delivered to your Slack every morning\n\n## 🛠️ Requirements\n\nYou'll need API access for: **Reddit** (OAuth2), **Google Gemini**, **Groq**, and **Slack** (OAuth2). All have free tiers available.\n\n---\n\n## 🚀 Setup Guide\n\n### 1️⃣ Configure Your Credentials\n\nAdd these credentials in n8n: **Reddit OAuth2**, **Google Gemini**, **Groq**, and **Slack OAuth2**. The workflow will guide you through each setup.\n\n### 2️⃣ Customize the Schedule\n\n**Default:** Daily at 8:00 AM \n**To modify:** Edit the \"Daily Schedule\" cron trigger node\n\n```javascript\n// Example: Run at 9:30 AM\n{\n \"triggerTimes\": {\n \"item\": [{ \"hour\": 9, \"minute\": 30 }]\n }\n}\n```\n\n### 3️⃣ Set Your Slack Destination\n\n1. Open the **\"Send to Slack\"** node\n2. Select your target channel\n3. Configure notification preferences\n\n### 4️⃣ Adjust Analysis Parameters\n\n**Post Limit:** Change from default 5 posts\n```javascript\n// In \"Get many posts\" Reddit node\n\"limit\": 10 // Recommended: 3-10 posts\n```\n\n**Context Customization:**\n```json\n{\n \"channel_type\": \"team\",\n \"audience\": \"Growth, Product, and Founders\", \n \"cta_link\": \"https://your-dashboard.com\",\n \"timeframe_label\": \"This Week\"\n}\n```"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"AI Agent": {
"main": [
[
{
"node": "660c8c3e-312a-4e48-8e97-a5bd80c0f82d",
"type": "main",
"index": 0
}
]
]
},
"d56d56ef-e47d-4662-8fcc-61d658e33266": {
"main": [
[
{
"node": "4c8435df-f386-4939-9758-60cfd0b15afc",
"type": "main",
"index": 0
}
]
]
},
"4c8435df-f386-4939-9758-60cfd0b15afc": {
"main": [
[
{
"node": "91fa23ab-325d-455e-b8a2-41d4be6df8e0",
"type": "main",
"index": 0
}
]
]
},
"85d5af69-f320-47c0-b7c4-5d21060dc8b0": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"65c2f7e8-d25f-428b-bc7a-d77715404155": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"c88ba66a-591a-4ade-9c82-40e37109c455": {
"main": [
[
{
"node": "65c2f7e8-d25f-428b-bc7a-d77715404155",
"type": "main",
"index": 0
}
]
]
},
"91fa23ab-325d-455e-b8a2-41d4be6df8e0": {
"main": [
[
{
"node": "c88ba66a-591a-4ade-9c82-40e37109c455",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 시장 조사, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Firecrawl AI 기반의 시장 정보 로봇: 자동화된 뉴스 통찰 제공
OpenAI를 사용하여 TechCrunch의 AI 뉴스를 필터링하고 Slack에 요약합니다.
Code
Wait
Slack
+
Code
Wait
Slack
12 노드Colton Randolph
시장 조사
Google Maps 리뷰에서 Gemini AI를 사용하여 시장 연구 보고서 생성
Gemini AI를 사용하여 Google Maps 리뷰에서 시장 연구 보고서 생성
Set
Code
Gmail
+
Set
Code
Gmail
15 노드Charles
시장 조사
기억, Google 스위트, 다양한 AI 연구 이미징을 통합한 WhatsApp 어시스턴트
기억, Google 패키지 및 다양한 AI 연구 이미징을 포함한 WhatsApp 어시스턴트 구축
If
Set
Code
+
If
Set
Code
71 노드Iniyavan JC
AI 챗봇
Gemini AI와 Google Workspace를 사용하여 매일 이메일과 일정 요약을 Slack으로 전송
Gemini AI와 Google Workspace를 사용하여 매일 이메일과 일정 요약을 Slack으로 전송
Code
Cron
Gmail
+
Code
Cron
Gmail
20 노드Sayone Technologies
기타
16. Gemini AI, Supabase 및 Nano-Banana를 기반으로 한 종합적인 블로그 생성 자동화
사용Gemini AI、Supabase및Nano-Banana实现端로端블로그생성자동화
If
Set
Code
+
If
Set
Code
51 노드Muhammad Asadullah
콘텐츠 제작
OpenAI, Ahrefs 및 다중 플랫폼 통합을 사용한 자동화된 콘텐츠 마케팅 인텔리전스
OpenAI, Ahrefs 및 다중 플랫폼 연동을 사용한 자동화된 콘텐츠 마케팅 인텔리전스
If
Set
Code
+
If
Set
Code
21 노드Nikan Noorafkan
시장 조사
워크플로우 정보
난이도
중급
노드 수9
카테고리2
노드 유형8
저자
Charles
@charlesnguyenI'm a Freelance AI Automation Engineer based in Vietnam, helping Sales & Marketing teams streamline their workflows with custom n8n automations. With 5+ years of experience, I’ve helped hundreds of businesses adopt AI-powered solutions using n8n ✅ Free consultation available — book now and start saving time: 👉 https://www.aivra.work/en
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유