自动化品牌DNA生成器
高级
这是一个Market Research, AI Summarization领域的自动化工作流,包含 22 个节点。主要使用 Code, Notion, SerpApi, HttpRequest, JotFormTrigger 等节点。 使用JotForm、Google搜索、Gemini AI和Notion的品牌DNA生成器
前置要求
- •Notion API Key
- •可能需要目标 API 的认证凭证
使用的节点 (22)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "hkUBomZwuryHuH6n",
"meta": {
"instanceId": "0d045f8fe3802ff2be0bb9a9ea445ee6c9ed61973377effe00767e483681e2f4"
},
"name": "使用 JotForm、Google 搜索、AI 提取和 Notion 的自动化品牌 DNA 生成器",
"tags": [],
"nodes": [
{
"id": "6376bb20-06e3-4ae3-9d61-28ba339555d0",
"name": "JotForm 触发器",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
1296,
272
],
"webhookId": "d0747951-8dad-407d-8430-caa5d437b606",
"parameters": {
"form": "="
},
"credentials": {
"jotFormApi": {
"id": "2uvFQzNFa136AOg4",
"name": "JotForm account"
}
},
"typeVersion": 1
},
{
"id": "c022594f-0f11-4b01-9422-5c44369f8b46",
"name": "JavaScript 代码",
"type": "n8n-nodes-base.code",
"position": [
1504,
272
],
"parameters": {
"jsCode": "const items = $input.all();\n\nreturn items.map(item => {\n let website = item.json[\"Company Website\"] || \"\";\n\n // Clean whitespace\n website = website.trim();\n\n // Add protocol if missing\n if (!website.startsWith(\"http://\") && !website.startsWith(\"https://\")) {\n website = \"https://\" + website;\n }\n\n try {\n const url = new URL(website);\n let domain = url.hostname.replace(/^www\\./, \"\"); // remove \"www.\"\n\n return {\n json: {\n ...item.json,\n Domain: domain\n }\n };\n } catch (e) {\n // If not a valid URL, fallback to plain string\n const fallbackDomain = website\n .replace(/^https?:\\/\\//, \"\")\n .replace(/^www\\./, \"\")\n .split(\"/\")[0];\n\n return {\n json: {\n ...item.json,\n Domain: fallbackDomain\n }\n };\n }\n});\n"
},
"typeVersion": 2
},
{
"id": "606c9887-c104-4f5c-8b44-f21f55db5f06",
"name": "Google 搜索",
"type": "n8n-nodes-serpapi.serpApi",
"position": [
1712,
272
],
"parameters": {
"q": "=site:{{ $json.Domain }}",
"requestOptions": {},
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "c96ed505-2b84-4bf3-8e38-e9701f6f7886",
"name": "HTTP 请求",
"type": "n8n-nodes-base.httpRequest",
"position": [
2544,
576
],
"parameters": {
"url": "={{ $json.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "ab2ba7f5-9d82-4c06-9350-132522dfbf79",
"name": "网页内容提取器",
"type": "n8n-nodes-webpage-content-extractor.webpageContentExtractor",
"notes": "data not found",
"onError": "continueRegularOutput",
"position": [
3104,
576
],
"parameters": {
"html": "={{ $json.data }}"
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "7c4cdb90-cb54-4893-9e27-8002af3c4320",
"name": "信息提取器",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
3328,
576
],
"parameters": {
"text": "=Company name : {{ $('JotForm Trigger').item.json['Company Name'] }}\nWebpage Content : {{ $json.textContent }}",
"options": {
"systemPromptTemplate": "=You are an expert information extraction algorithm.\nYour task is to extract only essential and relevant information about the company named \"{{ $('JotForm Trigger').item.json['Company Name'] }}\" and its context within the article text.\nIf a field or value is not available, omit it completely. Do not fabricate or infer information.\nReturn only a clean and valid JSON object following the provided schema."
},
"schemaType": "fromJson",
"jsonSchemaExample": "{\n \"companyName\":\"11x.ai\",\n \"relatedToBrand\": \"reply.io\",\n \"isRelated\": true,\n \"relationType\": \"positioning\",\n \"reason\": \"The article mentions 11x as an AI sales automation platform and includes a demo link.\",\n \"articleGoal\": \"To compare UberConference alternatives and highlight 11x's position within the sales tools ecosystem.\",\n \"excerpt\": \"Transform your revenue team with digital AI workers that execute, learn, and optimize.\",\n \"summary\": \"The article introduces 11x as an AI-driven solution for automating sales and prospect management.\",\n \"keyPoints\": [\n \"11x positions itself as an AI sales automation platform.\",\n \"The article compares various meeting and communication tools.\",\n \"Includes a demo link to showcase 11x’s capabilities.\",\n \"Focuses on digital AI workers improving sales efficiency.\"\n ]\n}"
},
"typeVersion": 1.2
},
{
"id": "e0a12b7c-151e-4b52-ae88-06630ad4348a",
"name": "OpenRouter聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
3328,
800
],
"parameters": {
"model": "google/gemini-2.0-flash-exp:free",
"options": {}
},
"typeVersion": 1
},
{
"id": "4ac523fc-0ddf-42a0-b797-7c050bbd9b9e",
"name": "遍历项目",
"type": "n8n-nodes-base.splitInBatches",
"position": [
2128,
272
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "9aae62eb-881d-4ba0-93ee-4ddf2624b6a1",
"name": "信息提取器1",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
2752,
-48
],
"parameters": {
"text": "=companyName : {{ $json.companyName }}\nrelatedToBrand : {{ $json.relatedToBrand }}\nrelationType: {{ $json.relationType }}\nreason : {{ $json.reason }}\narticleGoal : {{ $json.articleGoal }}\nexcerpt : {{ $json.excerpt }}\nsummary : {{ $json.summary }}\nkeyPoints : {{ $json.keyPoints }}",
"options": {
"systemPromptTemplate": "=You are a brand strategist.\nMerge multiple extraction results into one concise Brand DNA for the company named \"{{ $json.relatedToBrand }}\".\nReturn STRICT JSON only, no extra text. Be factual; do not invent details.\nConsolidate duplicates, remove overlap, and keep language neutral and concise.\nIf a field has no evidence, omit it entirely.\n"
},
"schemaType": "fromJson",
"jsonSchemaExample": "{\n \"companyName\":\"\",\n \"companyDescription\": \"\",\n \"idealCustomerProfile\": [],\n \"painPoints\": [],\n \"valueProposition\": [],\n \"proofPoints\": [],\n \"reasonsToOutreach\": [],\n \"outreachChannels\": [],\n \"suggestedKeywords\": [],\n \"brandTone\": \"\"\n}"
},
"typeVersion": 1.2
},
{
"id": "8df1f5a1-927a-4397-bc4a-60d261d3bf12",
"name": "OpenRouter 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
2752,
112
],
"parameters": {
"model": "google/gemini-2.0-flash-exp:free",
"options": {}
},
"typeVersion": 1
},
{
"id": "9b4fde9e-5d58-4762-8dc2-b53eff25e1ca",
"name": "合并数据",
"type": "n8n-nodes-base.code",
"position": [
2544,
-48
],
"parameters": {
"jsCode": "// n8n Code node — Simple Combine to One\n// Combine multiple extractor results into one object without complex heuristics.\n\nconst items = $input.all();\n\n// --- CONFIG ---\nconst AS_ARRAYS = true; // true: save as array; false: join string \" | \"\nconst JOINER = \" | \"; // separator when AS_ARRAYS=false\n\n// Fields processed as \"list\" (will be merged & deduplicated)\nconst LIST_FIELDS = new Set([\n \"keyPoints\", // array\n \"relationType\", // can appear in various forms → make it a list\n \"reason\", // reasons can be more than one\n \"articleGoal\", // goals can vary between pages\n \"excerpt\", // can save all excerpts (or take first in SCALAR_PREFERS_FIRST)\n \"summary\" // can save all summaries (or take first in SCALAR_PREFERS_FIRST)\n]);\n\n// If you want some fields to remain scalar (take first), put them here:\nconst SCALAR_PREFERS_FIRST = new Set([\n \"relatedToBrand\" // take the first non-empty one\n]);\n\n// Helper\nconst norm = (v) => (v == null ? \"\" : String(v).trim());\nconst toArr = (v) => Array.isArray(v) ? v : (v == null ? [] : [v]);\nconst dedupe = (arr) => {\n const seen = new Set(); const out = [];\n for (const x of arr) {\n const s = norm(x);\n const k = s.toLowerCase();\n if (s && !seen.has(k)) { seen.add(k); out.push(s); }\n }\n return out;\n};\n\n// Extract record from various forms\nconst extractRecord = (it) => {\n if (it?.json?.output && typeof it.json.output === \"object\") return it.json.output;\n if (it?.json && typeof it.json === \"object\") return it.json;\n return {};\n};\n\n// Collect all records\nconst records = items.map(extractRecord);\n\n// Initial combination\nconst combined = {};\nlet anyRelatedTrue = false;\n\n// Loop to combine\nfor (const rec of records) {\n for (const [k, v] of Object.entries(rec)) {\n if (k === \"isRelated\") {\n if (v === true || v === \"true\") anyRelatedTrue = true;\n continue;\n }\n\n // If field is set for scalar-first → save only the first one\n if (SCALAR_PREFERS_FIRST.has(k)) {\n if (!combined[k]) {\n const val = Array.isArray(v) ? v.find(x => norm(x)) : v;\n if (norm(val)) combined[k] = norm(val);\n }\n continue;\n }\n\n // Otherwise, treat as list so all values are included\n const list = toArr(v);\n if (!combined[k]) combined[k] = [];\n combined[k].push(...list);\n }\n}\n\n// Dedupe for all fields that are lists\nfor (const k of Object.keys(combined)) {\n if (Array.isArray(combined[k]) || LIST_FIELDS.has(k)) {\n combined[k] = dedupe(toArr(combined[k]));\n }\n}\n\n// Set boolean isRelated\ncombined.isRelated = anyRelatedTrue;\n\n// Final output:\n// - If AS_ARRAYS=false → join lists into string with JOINER\nif (!AS_ARRAYS) {\n for (const [k, v] of Object.entries(combined)) {\n if (Array.isArray(v)) combined[k] = v.join(JOINER);\n }\n}\n\n// Clean empty fields\nfor (const k of Object.keys(combined)) {\n const v = combined[k];\n if (Array.isArray(v) && v.length === 0) delete combined[k];\n if (typeof v === \"string\" && !v.trim()) delete combined[k];\n}\n\nreturn [{ json: combined }];\n"
},
"typeVersion": 2
},
{
"id": "8778a112-c980-4c2f-a14c-ec98d8152a75",
"name": "JavaScript2 代码",
"type": "n8n-nodes-base.code",
"position": [
3072,
-48
],
"parameters": {
"jsCode": "// n8n Code Node — Format per-section (strings) for Notion blocks UI\n// Input: items[0].json.output\n// Output: multiple string fields: h1, h2_xxx, p_xxx (each <= ~1900 chars)\n\nconst item = $input.item;\nconst d = item.json.output || item.json || {};\n\n// Safe content limit per Notion block (~2000 chars, using 1900)\nconst LIMIT = 1900;\n\nconst clip = (s) => String(s ?? '').slice(0, LIMIT).trim();\n\n// Array → bullets in one paragraph (1 Notion block, multiline)\nfunction bulletsParagraph(arr) {\n if (!Array.isArray(arr) || !arr.length) return '- (none)';\n const lines = arr\n .filter(x => x != null && String(x).trim() !== '')\n .map(x => `• ${String(x).replace(/\\s+/g, ' ').trim()}`);\n return clip(lines.join('\\n'));\n}\n\n// Scalar → single string\nconst scalar = (s) => {\n const v = (s == null || String(s).trim() === '') ? '- (none)' : String(s);\n return clip(v);\n};\n\n// Get company name for H1 (layered fallback)\nconst companyName =\n d.companyName ||\n d.company ||\n item.json.companyName ||\n item.json['Company Name'] ||\n 'Unknown Company';\n\n// Arrange all sections as separate strings\nconst output = {\n // Main heading = Company Name\n h1: scalar(companyName),\n\n // Company Description\n h2_companyDescription: 'Company Description',\n p_companyDescription: scalar(d.companyDescription),\n\n // ICP\n h2_icp: 'Ideal Customer Profile (ICP)',\n p_icp: bulletsParagraph(d.idealCustomerProfile),\n\n // Pain Points\n h2_painPoints: 'Pain Points',\n p_painPoints: bulletsParagraph(d.painPoints),\n\n // Value Proposition\n h2_valueProposition: 'Value Proposition',\n p_valueProposition: bulletsParagraph(d.valueProposition),\n\n // Proof Points\n h2_proofPoints: 'Proof Points',\n p_proofPoints: bulletsParagraph(d.proofPoints),\n\n // Reasons to Outreach\n h2_reasonsToOutreach: 'Reasons to Outreach',\n p_reasonsToOutreach: bulletsParagraph(d.reasonsToOutreach),\n\n // Outreach Channels\n h2_outreachChannels: 'Outreach Channels',\n p_outreachChannels: bulletsParagraph(d.outreachChannels),\n\n // Suggested Keywords\n h2_suggestedKeywords: 'Suggested Keywords',\n p_suggestedKeywords: bulletsParagraph(d.suggestedKeywords),\n\n // Brand Tone\n h2_brandTone: 'Brand Tone',\n p_brandTone: scalar(d.brandTone),\n};\n\nreturn [{ json: output }];\n"
},
"typeVersion": 2
},
{
"id": "e224592f-fecb-414e-a598-e3bdfc326afe",
"name": "创建数据库页面",
"type": "n8n-nodes-base.notion",
"position": [
3280,
-48
],
"parameters": {
"title": "={{ $json.h1 }}",
"blockUi": {
"blockValues": [
{
"type": "heading_2",
"textContent": "={{ $json.h2_companyDescription }}"
},
{
"textContent": "={{ $json.p_companyDescription }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_icp }}"
},
{
"textContent": "={{ $json.p_icp }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_painPoints }}"
},
{
"textContent": "={{ $json.p_painPoints }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_valueProposition }}"
},
{
"textContent": "={{ $json.p_valueProposition }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_proofPoints }}"
},
{
"textContent": "={{ $json.p_proofPoints }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_reasonsToOutreach }}"
},
{
"textContent": "={{ $json.p_reasonsToOutreach }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_outreachChannels }}"
},
{
"textContent": "={{ $json.p_outreachChannels }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_suggestedKeywords }}"
},
{
"textContent": "={{ $json.p_suggestedKeywords }}"
},
{
"type": "heading_2",
"textContent": "={{ $json.h2_brandTone }}"
},
{
"textContent": "={{ $json.p_brandTone }}"
}
]
},
"options": {},
"resource": "databasePage",
"databaseId": "="
},
"typeVersion": 2.2
},
{
"id": "461dc0fa-29ed-4162-8b44-44678b3405a9",
"name": "JavaScript1 代码",
"type": "n8n-nodes-base.code",
"position": [
2752,
576
],
"parameters": {
"jsCode": "// n8n Code Node — Simple HTML → Clean Text Array\n// Output format: [{ \"data\": \"clean text\" }]\n\nconst items = $input.all();\n\n// Helper: remove all HTML tags, comments, and script/style\nfunction cleanHTML(html = '') {\n return html\n .replace(/<!--[\\s\\S]*?-->/g, ' ') // comments\n .replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, ' ') // script\n .replace(/<style\\b[^<]*(?:(?!<\\/style>)<[^<]*)*<\\/style>/gi, ' ') // style\n .replace(/<noscript\\b[^<]*(?:(?!<\\/noscript>)<[^<]*)*<\\/noscript>/gi, ' ')\n .replace(/<\\/?(svg|math)[\\s\\S]*?<\\/\\1>/gi, ' ')\n .replace(/<[^>]+>/g, ' ') // remove all tags\n .replace(/ /gi, ' ')\n .replace(/&/gi, '&')\n .replace(/</gi, '<')\n .replace(/>/gi, '>')\n .replace(/"/gi, '\"')\n .replace(/'/gi, \"'\")\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// Get html from several possible keys\nfunction pickHtml(json) {\n const keys = ['data', 'html', 'body', 'content', 'text'];\n for (const k of keys) {\n if (typeof json?.[k] === 'string' && json[k].trim()) return json[k];\n }\n if (typeof json?.output === 'object') {\n for (const k of keys) {\n if (typeof json.output[k] === 'string' && json.output[k].trim()) return json.output[k];\n }\n }\n return '';\n}\n\nreturn items.map((item) => {\n const raw = pickHtml(item.json) || '';\n const cleaned = cleanHTML(raw);\n return { json: { data: cleaned } };\n});\n"
},
"typeVersion": 2
},
{
"id": "c0a0e828-12c2-4024-b2ce-3df29f0b424b",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-176
],
"parameters": {
"width": 620,
"height": 1288,
"content": "# 使用 JotForm、Google 搜索、AI 提取和 Notion 的自动化品牌 DNA 生成器"
},
"typeVersion": 1
},
{
"id": "810cd05b-cd23-4af0-a5ec-5ebccb3d9e3e",
"name": "便签 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1264,
112
],
"parameters": {
"color": 2,
"width": 384,
"height": 304,
"content": "- 当从 JotForm 收到新的表单提交时启动工作流。"
},
"typeVersion": 1
},
{
"id": "95e9e2a4-2469-48df-85f3-11ae0110b139",
"name": "便签 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
112
],
"parameters": {
"color": 3,
"width": 368,
"height": 304,
"content": "- 自动检索与公司域名相关的搜索结果。"
},
"typeVersion": 1
},
{
"id": "2ea4072f-acf6-4c7f-98af-abd531ab0a68",
"name": "设置 URL",
"type": "n8n-nodes-base.code",
"position": [
1920,
272
],
"parameters": {
"jsCode": "// Get all items from previous node (each item = one SerpAPI result)\nconst items = $input.all();\nconst out = [];\n\nfor (const item of items) {\n const data = item.json || {};\n const results = Array.isArray(data.organic_results) ? data.organic_results : [];\n\n // Collect links + fallback from redirect_link?url=...\n const urls = results.map(r => {\n if (r.link) return r.link;\n if (r.redirect_link) {\n try {\n const u = new URL(r.redirect_link);\n const real = u.searchParams.get('url');\n if (real) return real;\n } catch (e) {}\n }\n return null;\n }).filter(Boolean);\n\n // Dedupe\n const unique = [...new Set(urls)];\n\n // Output one item per URL (include useful metadata)\n for (const r of results) {\n // Match parsed URL with r.link/redirect_link\n let resolved = r.link;\n if (!resolved && r.redirect_link) {\n try {\n const u = new URL(r.redirect_link);\n const real = u.searchParams.get('url');\n if (real) resolved = real;\n } catch (e) {}\n }\n if (resolved && unique.includes(resolved)) {\n out.push({\n json: {\n url: resolved,\n position: r.position ?? null,\n title: r.title ?? null,\n displayed_link: r.displayed_link ?? null,\n source: r.source ?? null,\n date: r.date ?? null\n }\n });\n }\n }\n}\n\n// If no organic_results, return empty info to keep flow running\nreturn out.length ? out : [{ json: { url: null, note: 'No organic_results found' } }];\n"
},
"typeVersion": 2
},
{
"id": "253be165-bc96-4178-8842-04a165dd012f",
"name": "便签 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2512,
-272
],
"parameters": {
"color": 4,
"width": 496,
"height": 528,
"content": "- 将多个提取结果(来自多个页面)合并为单个去重记录。"
},
"typeVersion": 1
},
{
"id": "36e117cb-214d-4d44-b012-3bdc82c5f01e",
"name": "便签 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
3040,
-272
],
"parameters": {
"color": 5,
"width": 496,
"height": 528,
"content": "- 将整合的品牌 DNA JSON 格式化为适合 Notion 块的字符串字段。"
},
"typeVersion": 1
},
{
"id": "9efd3a0a-5a04-42b3-abbe-29cd8e878fa6",
"name": "便签 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2512,
352
],
"parameters": {
"color": 4,
"width": 496,
"height": 528,
"content": "- 从给定的网站 URL 获取原始 HTML 内容。"
},
"typeVersion": 1
},
{
"id": "6cc1c8d7-7d7b-470f-86d2-542a7443e879",
"name": "便签6",
"type": "n8n-nodes-base.stickyNote",
"position": [
3056,
352
],
"parameters": {
"color": 5,
"width": 576,
"height": 608,
"content": "- 从原始 HTML 中提取结构化和可读内容。"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a4b127eb-22d0-4a63-88e7-2ff617914cfa",
"connections": {
"Set url": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Merge Data": {
"main": [
[
{
"node": "Information Extractor1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Code in JavaScript1",
"type": "main",
"index": 0
}
]
]
},
"Google search": {
"main": [
[
{
"node": "Set url",
"type": "main",
"index": 0
}
]
]
},
"JotForm Trigger": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Merge Data",
"type": "main",
"index": 0
}
],
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Google search",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript1": {
"main": [
[
{
"node": "WebpageContentExtractor",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript2": {
"main": [
[
{
"node": "Create a database page",
"type": "main",
"index": 0
}
]
]
},
"Information Extractor": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Information Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Information Extractor1": {
"main": [
[
{
"node": "Code in JavaScript2",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "Information Extractor1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"WebpageContentExtractor": {
"main": [
[
{
"node": "Information Extractor",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 市场调研, AI 摘要总结
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
YouTube评论情感和关键词提取器
使用Gemini AI分析YouTube评论情感和关键词并通过Telegram报告
Set
Code
Telegram
+10
20 节点Budi SJ
市场调研
源发现 - 自动搜索更及时的信息源
多平台源发现系统,集成 SerpAPI、DuckDuckGo、GitHub、Reddit 和 Bluesky
Set
Code
Limit
+18
68 节点Hybroht
市场调研
Reels趋势观察器
使用Gemini和Apify查找高表现Instagram Reels并将洞察保存至Notion
If
Set
Code
+9
36 节点Eugene Green
市场调研
自动化应用分析与ASO报告生成器
使用Gemini AI和Google Docs从Google Play应用生成ASO报告
Code
Telegram
Google Docs
+5
13 节点Budi SJ
市场调研
通过Telegram的DOI URL自动导入研究论文到Zotero
从Telegram导入研究论文到Zotero,含AI摘要总结
If
Set
Code
+7
25 节点Budi SJ
AI 摘要总结
使用Google Vision OCR、Telegram和Google Sheets的自动化财务报告
使用Google Vision OCR、AI和Telegram处理收据到Google表格
If
Set
Code
+12
31 节点Budi SJ
发票处理
工作流信息
难度等级
高级
节点数量22
分类2
节点类型10
作者
Budi SJ
@budisjI’m a Product Designer who also works as an Automation Developer. With a background in product design and systems thinking, I build user-centered workflows. My focus is on helping teams and businesses work more productively through impactful automation systems.
外部链接
在 n8n.io 查看 →
分享此工作流