{"workflow":{"id":13249,"name":"Analyze website page gaps with GPT-4.1-mini, Perplexity, and Google Docs","views":35,"recentViews":0,"totalViews":35,"createdAt":"2026-02-07T10:46:02.593Z","description":"## Description\n\nAn AI-powered workflow that analyzes any website to identify missing pages that would improve user experience and business performance. Submit a URL, and the system detects existing pages, researches competitors using Perplexity, and generates a professional gap analysis report with prioritized recommendations—saved directly to Google Docs.\n\n---\n\n## What this workflow does\n\nThis automation delivers a complete website page gap analysis:\n\n- **Smart page detection:** Automatically scans website HTML and identifies 15 common page types (About, Contact, Services, Blog, Portfolio, Pricing, FAQ, Testimonials, Team, Careers, Privacy, Terms, etc.)\n- **Business type classification:** Determines if the site is ecommerce, portfolio/agency, blog, SaaS, or service-based to tailor recommendations\n- **Competitor research:** Uses Perplexity to research 5-7 top competitors in the same industry and identify their page structures\n- **AI gap analysis:** GPT-4.1-mini with web search compares the website against industry standards and competitor best practices\n- **Prioritized recommendations:** Generates High/Medium/Low priority suggestions with business value explanations and actionable content ideas\n- **Google Docs report:** Saves a professional gap analysis report ready to share with clients or stakeholders\n\n---\n\n## Setup requirements\n\n**Tools you'll need:**\n\n- Active n8n instance (self-hosted or n8n Cloud)\n- Google Docs with OAuth access\n- OpenAI API key (GPT-4.1-mini access with web search)\n- Perplexity API key (for competitor research)\n\n**Estimated setup time:** 15–20 minutes\n\n---\n\n## Step-by-step setup\n\n### 1. Connect Google Docs\n- In n8n: **Credentials → Add credential → Google Docs OAuth2 API**\n- Complete OAuth authentication\n- Create a new Google Doc for storing reports (or use an existing one)\n- Open **\"Save Report to Google Docs\"** node\n- Paste the Google Doc URL in the **documentURL** field\n\n### 2. Add OpenAI API credentials\n- Get API key: https://platform.openai.com/api-keys\n- In n8n: **Credentials → Add credential → OpenAI API**\n- Paste your API key\n- Open **\"OpenAI GPT-4.1 Mini with Web Search\"** node\n- Select your OpenAI credential\n- Ensure model is set to **gpt-4.1-mini**\n- Verify **Web Search** is enabled in the built-in tools section\n\n### 3. Add Perplexity API credentials\n- Get API key: https://www.perplexity.ai/settings/api\n- In n8n: **Credentials → Add credential → Perplexity API**\n- Paste your API key\n- Open **\"Perplexity Competitor Research Tool\"** node\n- Select your Perplexity credential\n\n### 4. Share the form URL\n- Open **\"Submit Website URL for Analysis\"** node\n- Copy the **Form URL** from the node settings\n- Share this URL with anyone who needs to run website audits\n- The form accepts a single field: Website URL\n\n### 5. Test the workflow\n- Open the Form URL in your browser\n- Enter a test website: `https://example.com`\n- Submit the form\n- Wait 30-60 seconds for the analysis to complete\n- Check your Google Docs—the gap analysis report should appear\n- Verify that:\n  - Existing pages are correctly detected\n  - Business type is identified\n  - Competitor research is included\n  - Recommendations are prioritized and actionable\n\n### 6. Activate the workflow\n- Toggle the workflow to **Active** at the top\n- The form will now accept submissions 24/7\n- Each submission generates a new report appended to your Google Doc\n\n---\n\n## How it works\n\n### 1. URL submission via form\nUser opens the form link and submits a website URL they want to analyze. The form triggers the workflow immediately.\n\n### 2. HTML fetch and extraction\nThe workflow sends an HTTP request to the submitted URL and retrieves the complete HTML source code of the website's homepage.\n\n### 3. Automated page detection\nA code node analyzes the HTML to detect 15 common page types:\n- **Navigation pages:** Home, About, Contact, Services, Products\n- **Content pages:** Blog, Portfolio, Pricing, FAQ\n- **Social proof pages:** Testimonials, Team, Careers\n- **Legal pages:** Privacy Policy, Terms of Service\n\nThe detection works by:\n- Scanning all internal links in the HTML\n- Matching URL patterns (e.g., `/about`, `/contact-us`, `/services`)\n- Searching for navigation keywords in anchor text\n- Normalizing URLs (removing query params, anchors, trailing slashes)\n\n### 4. Business type classification\nThe code also identifies the website's business type based on HTML content patterns:\n- **Ecommerce:** Detects shopping cart, checkout, product pages\n- **Portfolio/Agency:** Identifies portfolio, case studies, creative work\n- **Blog/Content site:** Finds blog posts, articles, news sections\n- **SaaS/Software:** Detects subscription, cloud platform, software keywords\n- **Service/Agency:** Identifies consulting, marketing, agency services\n- **General:** Default if no specific patterns match\n\n### 5. Deep competitor research with Perplexity\nThe AI Agent instructs Perplexity to:\n- Crawl the target website thoroughly (navigation, footer, hidden menus)\n- Research 5-7 top competitors in the identified business type\n- Document each competitor's page structure\n- Identify industry-standard pages that successful sites consistently have\n\nPerplexity focuses only on user-facing pages and ignores technical files (sitemap.xml, robots.txt, admin pages).\n\n### 6. AI gap analysis and recommendations\nGPT-4.1-mini with web search:\n- Compares the website's existing pages against competitor structures\n- Identifies genuinely missing pages (cross-references with detected existing pages)\n- Prioritizes recommendations based on business impact (High/Medium/Low)\n- Provides specific business value explanations for each recommendation\n- Suggests actionable content for each missing page\n- Includes competitor examples showing how others use these pages\n\n**Critical filtering rules:**\n- Never recommends pages already detected\n- Excludes technical files and admin pages\n- Only suggests pages with clear business value\n- Each recommendation must be justified\n\n### 7. Professional report generation\nThe AI Agent outputs a structured report containing:\n- **Website Overview:** URL, business type, analysis date\n- **Pages Confirmed as Existing:** Formatted list of detected pages\n- **Gap Analysis Summary:** Total pages analyzed, existing vs. missing count\n- **Recommended Pages to Add:** Detailed recommendations with priority, business value, content suggestions, and competitor examples\n- **Implementation Priority Summary:** Quick-reference lists by priority level\n- **Next Steps:** 2-3 actionable implementation steps\n\n### 8. Save to Google Docs\nThe complete report is inserted into your Google Docs document. Each new analysis appends to the same document, creating a running archive of all audits performed.\n\n---\n\n## Key features\n\n✅ **Automatic page detection:** Scans HTML and identifies 15 common page types without manual input—no need to know the site structure beforehand\n\n✅ **Business type intelligence:** Classifies websites into 6 business categories to provide industry-relevant recommendations\n\n✅ **Perplexity-powered research:** Deep competitor analysis covering 5-7 top sites in the same niche with complete page inventories\n\n✅ **Smart filtering:** Never recommends pages that already exist, even if they use different naming conventions or URL structures\n\n✅ **Priority-based recommendations:** Every suggestion labeled High/Medium/Low with clear business justification—know what to build first\n\n✅ **Actionable content ideas:** Not just \"add a blog\"—specific suggestions for what content should go on each recommended page\n\n✅ **Competitor examples:** See how successful competitors use each recommended page type in their own sites\n\n✅ **Google Docs integration:** Professional reports saved automatically—no downloads, no formatting, ready to share\n\n✅ **Form-based workflow:** Single URL submission—anyone can run audits without touching n8n\n\n---\n\n## Troubleshooting\n\n### HTML fetch fails\n- **SSL certificate issues:** Some websites block automated requests. Try adding `\"rejectUnauthorized\": false` in HTTP Request options.\n- **Cloudflare/bot protection:** Sites with aggressive protection may block the request. Test with a simple site first (like your own).\n- **Timeout errors:** Increase timeout setting in HTTP Request node to 30-60 seconds for slow-loading sites.\n\n### Pages not detected correctly\n- **Non-standard URL structure:** The workflow detects pages using common patterns (`/about`, `/contact`, etc.). If a site uses unusual URLs like `/company-info` instead of `/about`, manual review may be needed.\n- **Single-page websites:** Sites built as SPAs (single-page applications) with JavaScript routing may not have distinct page URLs in HTML. The workflow works best with traditional multi-page sites.\n- **Check detection details:** The code node outputs `detection_details` showing exactly what was found. Review this to debug false negatives.\n\n### Perplexity API errors\n- **Rate limits:** Perplexity has usage limits. If you hit them, wait or upgrade your plan.\n- **API key invalid:** Verify the key is correct at https://www.perplexity.ai/settings/api\n- **Quota exceeded:** Check your Perplexity dashboard for remaining credits.\n\n### OpenAI web search not working\n- **Web search disabled:** Ensure \"Web Search\" is enabled in the OpenAI Chat Model node under \"Built-in Tools\"\n- **Search context size:** Set to \"Medium\" for balanced performance\n- **Model compatibility:** Web search only works with GPT-4 models, not GPT-3.5\n\n### Report not saving to Google Docs\n- **Re-authenticate OAuth:** Go to Credentials → Google Docs OAuth2 API → Reconnect\n- **Document URL format:** Ensure the URL is a valid Google Docs link (not a folder or Sheets link)\n- **Permissions:** Verify the connected Google account has edit access to the document\n- **Document locked:** Check if the document is open in another tab with unsaved changes\n\n### AI recommendations are too generic\n- **Perplexity research quality:** The AI relies on Perplexity's research. If competitors have similar structures, recommendations may overlap. Try analyzing a more unique website.\n- **Business type misclassification:** Check the detected business_type in the code output. If it's wrong, the recommendations will be off-target.\n- **Improve prompt:** Edit the AI Agent system prompt to emphasize more specific or creative recommendations for your niche.\n\n---\n\n## Use cases\n\n**Web design agencies:** Audit client websites before proposals. Show exactly which pages are missing compared to competitors, with business justification for each recommendation. Win more projects by demonstrating data-driven insights.\n\n**SEO consultants:** Include page gap analysis in site audits. Identify missing pages that competitors rank for (FAQ, pricing, testimonials). Provide clients with actionable roadmaps for site expansion.\n\n**In-house marketing teams:** Analyze competitor websites quarterly to spot new page types or content strategies. Keep your site competitive by identifying gaps before leadership asks about them.\n\n**Freelance developers:** Offer value-add services to existing clients. Run audits on their sites, identify quick wins (missing FAQ, testimonials, pricing pages), and sell additional development work.\n\n**Startup founders:** Before hiring a design agency, understand what pages you actually need. Get a competitor-researched report showing industry standards for your business type—save time and budget.\n\n**Content strategists:** Identify content opportunities beyond blog posts. See which informational pages (FAQ, case studies, resource libraries) competitors have that you're missing.\n\n---\n\n## Expected results\n\n- **Time savings:** 2-3 hours saved per website audit (manual competitor research eliminated)\n- **Analysis speed:** Complete gap analysis in 30-60 seconds vs. hours of manual work\n- **Competitor coverage:** Research 5-7 competitors automatically vs. 1-2 manual comparisons\n- **Report quality:** Professional, shareable reports vs. rough notes or spreadsheets\n- **Actionability:** Prioritized recommendations with business value vs. generic \"add more pages\" advice\n- **Scalability:** Run 50+ audits per day without additional effort\n\n---\n\n## Support\n\nNeed help or custom development?\n\n📧 Email: [info@isawow.com](info@isawow.com)  \n🌐 Website: [https://isawow.com/](https://isawow.com/)","workflow":{"meta":{"instanceId":"bc8ca75c203589705ae2e446cad7181d6f2a7cc1766f958ef9f34810e53b8cb2"},"nodes":[{"id":"d58e5db3-31f4-48ba-8b10-eaf918231f52","name":"Submit Website URL for Analysis","type":"n8n-nodes-base.formTrigger","position":[0,0],"webhookId":"a7f8da60-d236-42f9-92db-848b8bc8dc9c","parameters":{"options":{},"formTitle":"URL","formFields":{"values":[{"fieldLabel":"URL","requiredField":true}]}},"typeVersion":2.3},{"id":"bac14d84-80ae-4770-a66c-1065d26e94ab","name":"Fetch Website HTML","type":"n8n-nodes-base.httpRequest","position":[288,0],"parameters":{"url":"={{ $json.URL }}","options":{}},"typeVersion":4.3},{"id":"2106129b-fac1-435b-ab55-9437fe44a298","name":"Detect Existing Pages and Business Type","type":"n8n-nodes-base.code","position":[528,0],"parameters":{"jsCode":"// Enhanced HTML analysis with better page detection\nlet html = '';\n\ntry {\n  html = $input.first().json.body || \n         $input.first().json.data || \n         $input.first().json || '';\n  \n  if (typeof html !== 'string') {\n    html = String(html);\n  }\n} catch (error) {\n  return {\n    json: {\n      error: 'Failed to get HTML',\n      message: error.message\n    }\n  };\n}\n\nif (!html || html.length === 0) {\n  return {\n    json: {\n      error: 'HTML content is empty'\n    }\n  };\n}\n\nconst url = $('Submit Website URL for Analysis').first().json.URL || '';\n\n// Extract all links more accurately\nconst linkRegex = /<a[^>]+href=[\"']([^\"']+)[\"']/gi;\nconst allLinks = [];\nlet match;\nwhile ((match = linkRegex.exec(html)) !== null) {\n  allLinks.push(match[1].toLowerCase().trim());\n}\n\n// Normalize URLs - remove trailing slashes, query params, anchors\nconst normalizeUrl = (link) => {\n  return link\n    .split('?')[0]    // Remove query params\n    .split('#')[0]    // Remove anchors\n    .replace(/\\/$/, '') // Remove trailing slash\n    .toLowerCase();\n};\n\nconst normalizedLinks = allLinks.map(normalizeUrl);\n\n// Enhanced page detection with multiple patterns\nconst pagePatterns = {\n  home: {\n    patterns: [/(^\\/|^index|^home)$/i, /homepage/i],\n    keywords: ['home', 'homepage']\n  },\n  about: {\n    patterns: [/about[-_]?(us|me|company)?/i, /who[-_]?we[-_]?are/i, /our[-_]?story/i],\n    keywords: ['about us', 'about', 'our story', 'who we are', 'company']\n  },\n  contact: {\n    patterns: [/contact[-_]?(us|me)?/i, /get[-_]?in[-_]?touch/i, /reach[-_]?us/i],\n    keywords: ['contact', 'get in touch', 'reach us', 'contact us']\n  },\n  services: {\n    patterns: [/services?/i, /what[-_]?we[-_]?do/i, /offerings?/i, /solutions?/i],\n    keywords: ['services', 'service', 'what we do', 'solutions', 'offerings']\n  },\n  products: {\n    patterns: [/products?/i, /shop/i, /store/i, /catalog/i],\n    keywords: ['products', 'product', 'shop', 'store', 'catalog']\n  },\n  blog: {\n    patterns: [/blog/i, /news/i, /articles?/i, /insights?/i],\n    keywords: ['blog', 'news', 'articles', 'insights', 'posts']\n  },\n  portfolio: {\n    patterns: [/portfolio/i, /work/i, /projects?/i, /case[-_]?studies/i],\n    keywords: ['portfolio', 'our work', 'projects', 'case studies']\n  },\n  pricing: {\n    patterns: [/pricing/i, /plans?/i, /packages?/i, /rates?/i],\n    keywords: ['pricing', 'plans', 'packages', 'rates']\n  },\n  faq: {\n    patterns: [/faq/i, /frequently[-_]?asked/i, /questions?/i],\n    keywords: ['faq', 'frequently asked', 'questions']\n  },\n  testimonials: {\n    patterns: [/testimonials?/i, /reviews?/i, /feedback/i, /client[-_]?stories/i],\n    keywords: ['testimonials', 'reviews', 'feedback', 'client stories']\n  },\n  team: {\n    patterns: [/team/i, /staff/i, /people/i, /our[-_]?team/i, /meet[-_]?the[-_]?team/i],\n    keywords: ['team', 'our team', 'staff', 'people', 'meet the team']\n  },\n  careers: {\n    patterns: [/careers?/i, /jobs?/i, /join[-_]?us/i, /employment/i, /hiring/i],\n    keywords: ['careers', 'jobs', 'join us', 'employment', 'hiring']\n  },\n  privacy: {\n    patterns: [/privacy[-_]?policy/i, /privacy/i],\n    keywords: ['privacy policy', 'privacy']\n  },\n  terms: {\n    patterns: [/terms[-_]?(and[-_]?conditions|of[-_]?service)?/i, /conditions/i],\n    keywords: ['terms', 'terms and conditions', 'terms of service']\n  }\n};\n\nconst existingPages = [];\nconst missingPages = [];\nconst detectionDetails = {};\n\n// Check each page type\nObject.entries(pagePatterns).forEach(([pageName, config]) => {\n  let found = false;\n  const matches = [];\n  \n  // Check in URLs\n  for (const link of normalizedLinks) {\n    for (const pattern of config.patterns) {\n      if (pattern.test(link)) {\n        found = true;\n        matches.push(`URL: ${link}`);\n        break;\n      }\n    }\n    if (found) break;\n  }\n  \n  // Check in HTML content for keywords\n  if (!found) {\n    for (const keyword of config.keywords) {\n      const keywordRegex = new RegExp(`<a[^>]+>\\\\s*${keyword}\\\\s*</a>`, 'gi');\n      if (keywordRegex.test(html)) {\n        found = true;\n        matches.push(`Keyword: ${keyword}`);\n        break;\n      }\n    }\n  }\n  \n  detectionDetails[pageName] = {\n    found: found,\n    matches: matches\n  };\n  \n  if (found) {\n    existingPages.push(pageName);\n  } else {\n    missingPages.push(pageName);\n  }\n});\n\n// Detect business type with better logic\nlet businessType = 'general';\nif (html.match(/shop|ecommerce|cart|buy\\s*now|add\\s*to\\s*cart|checkout/i)) {\n  businessType = 'ecommerce';\n} else if (html.match(/portfolio|designer|developer|freelance|creative\\s*agency/i)) {\n  businessType = 'portfolio / agency';\n} else if (html.match(/blog|article|post|news/i) && !html.match(/services|products/i)) {\n  businessType = 'blog / content site';\n} else if (html.match(/saas|software|subscription|cloud\\s*platform/i)) {\n  businessType = 'saas / software';\n} else if (html.match(/consulting|agency|marketing|media/i)) {\n  businessType = 'service / agency';\n}\n\n// Extract metadata\nconst titleMatch = html.match(/<title>(.*?)<\\/title>/i);\nconst title = titleMatch ? titleMatch[1].trim() : 'No title found';\n\nconst descMatch = html.match(/<meta\\s+name=[\"']description[\"']\\s+content=[\"']([^\"']+)[\"']/i);\nconst description = descMatch ? descMatch[1].trim() : '';\n\nreturn {\n  json: {\n    url: url,\n    title: title,\n    description: description,\n    business_type: businessType,\n    existing_pages: existingPages,\n    missing_pages: missingPages,\n    detection_details: detectionDetails,\n    total_links: allLinks.length,\n    html_length: html.length,\n    ready_for_ai: true\n  }\n};"},"typeVersion":2},{"id":"b2eaa0a2-ae8c-414a-bb5a-b9ca52e04a4b","name":"Generate Gap Analysis Report with AI","type":"@n8n/n8n-nodes-langchain.agent","position":[848,0],"parameters":{"text":"=# ROLE\nYou are a Website Gap Analysis Expert specializing in identifying missing pages that would genuinely improve a website's user experience and business goals.\n\n---\n\n# INPUT DATA\n\n**Website URL:** {{ $('Submit Website URL for Analysis').item.json.URL }}\n\n**Business Type:** {{ $('Detect Existing Pages and Business Type').item.json.business_type }}\n\n**Title:** {{ $('Detect Existing Pages and Business Type').item.json.title }}\n\n**Description:** {{ $('Detect Existing Pages and Business Type').item.json.description }}\n\n**EXISTING PAGES (Already detected - DO NOT RECOMMEND):**\n{{ $('Detect Existing Pages and Business Type').item.json.existing_pages.join(', ') }}\n\n**PRELIMINARY MISSING PAGES:**\n{{ $('Detect Existing Pages and Business Type').item.json.missing_pages.join(', ') }}\n\n---\n\n# CRITICAL RULES\n\n1. **NEVER recommend pages that are in the \"EXISTING PAGES\" list above**\n2. **DO NOT recommend technical files** (sitemap.xml, robots.txt, .htaccess, RSS feeds)\n3. **DO NOT recommend admin/backend pages** (login, dashboard, admin panel)\n4. **DO NOT recommend generic pages without business value**\n5. **Only recommend user-facing pages that genuinely add value**\n6. **Each recommendation must have a clear business justification**\n\n---\n\n# YOUR TASK\n\n## Step 1: Deep Website Analysis\nUse Perplexity to thoroughly crawl and analyze {{ $('Submit Website URL for Analysis').item.json.URL }}:\n- Main navigation structure\n- Footer links and secondary navigation\n- All internal page links\n- Service/product pages\n- Content sections\n- Any hidden or dropdown menus\n\n## Step 2: Competitor Research\nUse Perplexity to research 5-7 top competitors in the \"{{ $('Detect Existing Pages and Business Type').item.json.business_type }}\" industry:\n- Identify their complete page structure\n- Note which pages are consistently present across competitors\n- Understand industry-standard pages for this business type\n\n## Step 3: Gap Analysis\nCompare the website's existing pages against:\n- Industry standard pages for this business type\n- Common pages across all competitors\n- User journey and conversion funnel needs\n\n**IMPORTANT FILTERING:**\n- Cross-reference with the \"EXISTING PAGES\" list\n- Remove any page that might already exist under a different name\n- Verify that each recommended page is truly absent\n- Exclude technical/system pages\n\n## Step 4: Generate Recommendations\nFor ONLY the genuinely missing pages that would add business value:\n- Prioritize based on impact (High/Medium/Low)\n- Explain why this page is important for this specific business\n- Provide actionable content suggestions\n\n---\n\n# OUTPUT FORMAT\n\n**Website Page Recommendation Report**\n\n**Website Overview**\nURL: {{ $('Detect Existing Pages and Business Type').item.json.url }}\nBusiness Type: {{ $('Detect Existing Pages and Business Type').item.json.business_type }}\nAnalysis Date: [Current Date]\n\n**Pages Confirmed as Existing:**\n[List the pages from \"EXISTING PAGES\" - formatted nicely]\n\n**Gap Analysis Summary:**\nTotal Pages Analyzed: [number]\nExisting Pages: [number]\nMissing High-Value Pages: [number]\n\n---\n\n**RECOMMENDED PAGES TO ADD**\n[Only list genuinely missing pages with business value]\n\n**Page 1: [Name]**\nPriority: High / Medium / Low\nWhy This Page is Missing: [Specific observation]\nBusiness Value: [Clear explanation of value]\nContent Suggestions:\n  • [Specific suggestion 1]\n  • [Specific suggestion 2]\n  • [Specific suggestion 3]\nCompetitor Examples: [Which competitors have this and how they use it]\n\n**Page 2: [Name]**\n[Same format...]\n\n---\n\n**IMPLEMENTATION PRIORITY SUMMARY**\n\nHigh Priority Recommendations: [number]\n- [List page names only]\n\nMedium Priority Recommendations: [number]\n- [List page names only]\n\nLow Priority Recommendations: [number]\n- [List page names only]\n\n**Next Steps:**\n[Provide 2-3 actionable next steps for implementing these pages]\n\n---\n\n# QUALITY CHECKS BEFORE OUTPUT\n\nBefore finalizing your report, verify:\n- [ ] No pages from \"EXISTING PAGES\" list are recommended\n- [ ] No technical files (sitemap.xml, robots.txt, etc.) are recommended\n- [ ] No admin/backend pages are recommended\n- [ ] Each recommendation has clear business value\n- [ ] Priority levels are justified\n- [ ] Content suggestions are specific and actionable\n- [ ] Competitor research supports each recommendation\n\n---\n\n**OUTPUT ONLY THE REPORT TEXT - NO CODE, NO JSON, NO MARKDOWN FORMATTING**","options":{},"promptType":"define","hasOutputParser":true},"typeVersion":3},{"id":"3ec5f91c-f498-4531-8476-465bee4d47ee","name":"OpenAI GPT-4.1 Mini with Web Search","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[848,192],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4.1-mini","cachedResultName":"gpt-4.1-mini"},"options":{},"builtInTools":{"webSearch":{"searchContextSize":"medium"}}},"credentials":{"openAiApi":{"id":"tCrLCjVYHhZMrULt","name":"OpenAI - Keyword Research"}},"typeVersion":1.3},{"id":"53b2ed9d-1028-4590-a751-ced5d6dba47a","name":"Perplexity Competitor Research Tool","type":"n8n-nodes-base.perplexityTool","position":[944,368],"parameters":{"options":{},"messages":{"message":[{"content":"=Analyze the website {{ $('Submit Website URL for Analysis').item.json.URL }} in detail.\n\n1. Crawl and list ALL pages available on this website\n2. Research 5-7 top competitor websites in the \"{{ $('Detect Existing Pages and Business Type').item.json.business_type }}\" industry\n3. For each competitor, list their main pages and structure\n4. Identify industry-standard pages that most successful sites in this niche have\n\nFocus on user-facing pages only. Ignore technical files like sitemap.xml, robots.txt, or admin pages.\n\nProvide a comprehensive analysis including:\n- Complete page inventory of the target website\n- Competitor page structures\n- Industry best practices for this business type"}]},"requestOptions":{}},"credentials":{"perplexityApi":{"id":"9jTiPYCP1tKCbQM2","name":"testing_pplx"}},"typeVersion":1},{"id":"54ce92d6-2cef-40c5-a432-575b968a05c4","name":"Save Report to Google Docs","type":"n8n-nodes-base.googleDocs","position":[1216,0],"parameters":{"actionsUi":{"actionFields":[{"text":"={{ $json.output }}","action":"insert"}]},"operation":"update","documentURL":"1xSDUxPlpSXj2dM3vQtUMHQjVXPE4-XtoB9h4peCFRys"},"credentials":{"googleDocsOAuth2Api":{"id":"NxKtfb1UUyaUUbhY","name":"testing_doc"}},"typeVersion":2},{"id":"2f2112b9-681a-41fd-a492-75e466c04ccb","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-464,-416],"parameters":{"width":416,"height":848,"content":"## AI-Powered Website Gap Analysis Tool\n\nThis workflow analyzes any website and identifies missing pages\nthat would improve user experience and business goals. Submit a\nURL via form, and the system fetches the site's HTML, detects\nwhich standard pages already exist (about, contact, services,\nblog, etc.), then uses AI with Perplexity to research competitors\nand industry standards. The final output is a professional gap\nanalysis report saved to Google Docs with prioritized\nrecommendations for pages you should add.\n\n## How it works\n1. User submits a website URL through a simple form.\n2. System fetches the complete HTML of the website.\n3. Code analyzes HTML to detect 15 common page types already present.\n4. AI identifies business type and preliminary missing pages.\n5. Perplexity researches 5-7 competitors in the same industry.\n6. AI generates a detailed gap analysis report with priorities.\n7. Final report is saved to Google Docs automatically.\n\n## Setup steps\n1. Connect Google Docs OAuth credentials.\n2. Add OpenAI API key for GPT-4.1-mini model.\n3. Add Perplexity API key for competitor research.\n4. Update Google Docs document URL in the save node.\n5. Share the form link to start analyzing websites."},"typeVersion":1},{"id":"378bb25d-1565-44b5-a06f-0df15d12aad0","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[0,-160],"parameters":{"color":7,"width":384,"height":208,"content":"## URL Submission & HTML Fetch\n\nReceives website URL via form, then fetches\nthe complete HTML source code of the site\nfor analysis and page detection."},"typeVersion":1},{"id":"c7f0c6bd-6de2-4c63-883b-d402d69b9f2c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[528,-160],"parameters":{"color":7,"width":544,"height":208,"content":"## Page Detection & AI Analysis\n\nAnalyzes HTML to detect existing pages and\nbusiness type, then uses AI with Perplexity\nto research competitors and generate gap report."},"typeVersion":1},{"id":"2e8a61b6-9922-4d2a-9fc5-e48c384cd8a6","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1136,-160],"parameters":{"color":7,"width":320,"height":208,"content":"## Report Generation & Save\n\nAI creates a comprehensive gap analysis\nreport with prioritized recommendations\nand saves it directly to Google Docs."},"typeVersion":1}],"pinData":{},"connections":{"Fetch Website HTML":{"main":[[{"node":"Detect Existing Pages and Business Type","type":"main","index":0}]]},"Submit Website URL for Analysis":{"main":[[{"node":"Fetch Website HTML","type":"main","index":0}]]},"OpenAI GPT-4.1 Mini with Web Search":{"ai_languageModel":[[{"node":"Generate Gap Analysis Report with AI","type":"ai_languageModel","index":0}]]},"Perplexity Competitor Research Tool":{"ai_tool":[[{"node":"Generate Gap Analysis Report with AI","type":"ai_tool","index":0}]]},"Generate Gap Analysis Report with AI":{"main":[[{"node":"Save Report to Google Docs","type":"main","index":0}]]},"Detect Existing Pages and Business Type":{"main":[[{"node":"Generate Gap Analysis Report with AI","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":11,"nodeTypes":{"n8n-nodes-base.code":{"count":1},"n8n-nodes-base.googleDocs":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.formTrigger":{"count":1},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.perplexityTool":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"isaWOW","username":"isawow","bio":"","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/8e8c1f17a2be80c0d1b0248585660dff3062cefeda523bbafeafcdb813f52ffa?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":495,"icon":"file:googleDocs.svg","name":"n8n-nodes-base.googleDocs","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledocs/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Miscellaneous"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Docs"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSItMTggMCA5MCA4MCI+PHVzZSB4bGluazpocmVmPSIjYSIgeD0iLjUiIHk9Ii41Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzU0OGRmNiIgZD0ibTM2IDAgMjIgMjJ2NTNhNC45OSA0Ljk5IDAgMCAxLTUgNUg1YTQuOTkgNC45OSAwIDAgMS01LTVWNWE0Ljk5IDQuOTkgMCAwIDEgNS01eiIvPjxwYXRoIGQ9Ik0xNCA0MGgzMHYzSDE0em0wIDdoMzB2M0gxNHptMCA4aDMwdjNIMTR6bTAgN2gyMXYzSDE0eiIvPjxwYXRoIGZpbGw9IiNhYmQwZmIiIGQ9Im0zNiAwIDIyIDIySDQxYy0yLjc3IDAtNS0yLjQ4LTUtNS4yNXoiLz48cGF0aCBmaWxsPSIjM2U1YmI5IiBkPSJNNDAuNzUgMjIgNTggMjkuMTI1VjIyeiIvPjwvZz48L3N5bWJvbD48L3N2Zz4="},"displayName":"Google Docs","typeVersion":2,"nodeCategories":[{"id":11,"name":"Miscellaneous"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1225,"icon":"file:form.svg","name":"n8n-nodes-base.formTrigger","codex":{"data":{"alias":["table","submit","post"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"On form submission"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form Trigger","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":48,"name":"AI RAG"}],"image":[]}}