자동화된 브랜드 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": "Automated Brand DNA Generator Using JotForm, Google Search, AI Extraction & Notion",
"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": "JavaScript 코드2",
"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": "JavaScript 코드1",
"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": "# Automated Brand DNA Generator Using JotForm, Google Search, AI Extraction & Notion\n\nThe Brand DNA Generator workflow automatically scans and analyzes online content to build a company’s Brand DNA profile. It starts with input from a form, then crawls the company’s website and Google search results to gather relevant information. Using AI-powered extraction, the system identifies insights such as value propositions, ideal customer profiles (ICP), pain points, proof points, brand tone, and more. All results are neatly formatted and automatically saved to a Notion database as a structured Brand DNA report, eliminating the need for manual research.\n\n## 🛠️ Key Features\n- Automated data capture, collects company data directly from form submissions and Google search results. \n- Uses AI-powered insight extraction with LLMs to extract and summarize brand-related information from website content. \n- Fetches clean text from multiple web pages using HTTP requests and a content extractor. \n- Merges extracted data from multiple sources into a single Brand DNA JSON structure. \n- Automatically creates a new page in Notion with formatted sections (headings, paragraphs, and bullet points). \n- Handles parsing failures and processes multiple pages efficiently in batches.\n\n## 🔧 Requirements\n- JotForm API Key, to capture company data from form submissions. \n- SerpAPI Key, to perform automated Google searches. \n- OpenRouter / LLM API, for AI-based language understanding and information extraction. \n- Notion Integration Token & Database ID, to save the final Brand DNA report to Notion.\n\n## 🧩 Setup Instructions\n1. Connect your JotForm account and select the form containing the fields Company Name and Company Website. \n2. Add your SerpAPI Key. \n3. Configure the AI model using OpenRouter or LLM. \n4. Enter your Notion credentials and specify the databaseId in the Create a Database Page node. \n5. Customize the prompt in the Information Extractor node to modify the tone or structure of AI analysis (Optional). \n6. Activate the workflow, then submit data through the JotForm to test automatic generation and Notion integration.\n\n## 💡 Final Output \nA complete Brand DNA Report containing:\n- Company Description \n- Ideal Customer Profile \n- Pain Points \n- Value Proposition \n- Proof Points \n- Brand Tone \n- Suggested Keywords \nAll generated automatically from the company’s online presence and stored in Notion with no manual input required."
},
"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": "- Starts the workflow when a new form submission is received from JotForm.\n- Cleans and standardizes the submitted website URL."
},
"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": "- Automatically retrieves search results related to the company’s domain.\n- Extracts and cleans URLs from the SerpAPI search results."
},
"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": "- Combine multiple extraction results (from many pages) into a single deduplicated record.\n- Consolidate and synthesize extracted article-level data into a Brand DNA candidate.\n- Provide the language model (LLM) backend used by the Information Extractor node."
},
"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": "- Format consolidated Brand DNA JSON into string fields suitable for Notion blocks.\n- Persist the formatted Brand DNA into a Notion database as a new page."
},
"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": "- Fetches raw HTML content from a given website URL.\n- Clean and extract readable text from raw 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": "- Extracts structured and readable content from raw HTML.\n- Uses AI to extract structured company-related information from the article."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a4b127eb-22d0-4a63-88e7-2ff617914cfa",
"connections": {
"2ea4072f-acf6-4c7f-98af-abd531ab0a68": {
"main": [
[
{
"node": "4ac523fc-0ddf-42a0-b797-7c050bbd9b9e",
"type": "main",
"index": 0
}
]
]
},
"9b4fde9e-5d58-4762-8dc2-b53eff25e1ca": {
"main": [
[
{
"node": "9aae62eb-881d-4ba0-93ee-4ddf2624b6a1",
"type": "main",
"index": 0
}
]
]
},
"c96ed505-2b84-4bf3-8e38-e9701f6f7886": {
"main": [
[
{
"node": "461dc0fa-29ed-4162-8b44-44678b3405a9",
"type": "main",
"index": 0
}
]
]
},
"606c9887-c104-4f5c-8b44-f21f55db5f06": {
"main": [
[
{
"node": "2ea4072f-acf6-4c7f-98af-abd531ab0a68",
"type": "main",
"index": 0
}
]
]
},
"6376bb20-06e3-4ae3-9d61-28ba339555d0": {
"main": [
[
{
"node": "c022594f-0f11-4b01-9422-5c44369f8b46",
"type": "main",
"index": 0
}
]
]
},
"4ac523fc-0ddf-42a0-b797-7c050bbd9b9e": {
"main": [
[
{
"node": "9b4fde9e-5d58-4762-8dc2-b53eff25e1ca",
"type": "main",
"index": 0
}
],
[
{
"node": "c96ed505-2b84-4bf3-8e38-e9701f6f7886",
"type": "main",
"index": 0
}
]
]
},
"c022594f-0f11-4b01-9422-5c44369f8b46": {
"main": [
[
{
"node": "606c9887-c104-4f5c-8b44-f21f55db5f06",
"type": "main",
"index": 0
}
]
]
},
"461dc0fa-29ed-4162-8b44-44678b3405a9": {
"main": [
[
{
"node": "ab2ba7f5-9d82-4c06-9350-132522dfbf79",
"type": "main",
"index": 0
}
]
]
},
"8778a112-c980-4c2f-a14c-ec98d8152a75": {
"main": [
[
{
"node": "e224592f-fecb-414e-a598-e3bdfc326afe",
"type": "main",
"index": 0
}
]
]
},
"7c4cdb90-cb54-4893-9e27-8002af3c4320": {
"main": [
[
{
"node": "4ac523fc-0ddf-42a0-b797-7c050bbd9b9e",
"type": "main",
"index": 0
}
]
]
},
"e0a12b7c-151e-4b52-ae88-06630ad4348a": {
"ai_languageModel": [
[
{
"node": "7c4cdb90-cb54-4893-9e27-8002af3c4320",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"9aae62eb-881d-4ba0-93ee-4ddf2624b6a1": {
"main": [
[
{
"node": "8778a112-c980-4c2f-a14c-ec98d8152a75",
"type": "main",
"index": 0
}
]
]
},
"8df1f5a1-927a-4397-bc4a-60d261d3bf12": {
"ai_languageModel": [
[
{
"node": "9aae62eb-881d-4ba0-93ee-4ddf2624b6a1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"ab2ba7f5-9d82-4c06-9350-132522dfbf79": {
"main": [
[
{
"node": "7c4cdb90-cb54-4893-9e27-8002af3c4320",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 시장 조사, AI 요약
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
YouTube 댓글 감정 및 키워드 추출기
Gemini AI를 사용하여 YouTube 댓글 감성 및 키워드 분석 및 Telegram으로 보고
Set
Code
Telegram
+
Set
Code
Telegram
20 노드Budi SJ
시장 조사
Reels 트렌드 모니터링 도구
Gemini와 Apify를 사용하여 높은 성과 Instagram Reels를 찾아 Notion에 저장
If
Set
Code
+
If
Set
Code
36 노드Eugene Green
시장 조사
자동화된 애플리케이션 분석 및 ASO 보고서 생성기
Gemini AI와 Google Docs를 사용하여 Google Play 앱에서 ASO 보고서 생성
Code
Telegram
Google Docs
+
Code
Telegram
Google Docs
13 노드Budi SJ
시장 조사
Telegram의 DOI URL을 통해 Zotero에 연구 논문을 자동으로 가져오기
Telegram에서 연구 논문을 Zotero에 가져오기, AI 요약 포함
If
Set
Code
+
If
Set
Code
25 노드Budi SJ
AI 요약
심층 연구 인공지능에이전트
심층 연구 인공지능 - 자동 연구 및 Notion 보고서 생성기
Set
Code
Filter
+
Set
Code
Filter
43 노드Aziz B
시장 조사
Reddit 감정 분석
Deepseek AI를 사용하여 Reddit 콘텐츠 및 댓글의 감성 분석
Code
Reddit
Webhook
+
Code
Reddit
Webhook
12 노드Gerald Denor
시장 조사
워크플로우 정보
난이도
고급
노드 수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에서 보기 →
이 워크플로우 공유