{"workflow":{"id":13708,"name":"Detect influencer fraud and fake followers with Instagram, X, TikTok and Claude","views":125,"recentViews":1,"totalViews":125,"createdAt":"2026-02-25T14:01:06.158Z","description":"Analyzes influencer profiles and scores authenticity before brand partnership approval. Detects fake followers, bot accounts, and suspicious engagement patterns using AI-powered behavioral analysis.\n\n## 🎯 How It Works\n\n**Simple 7-Node Workflow:**\n1. **Input** → Submit influencer username and platform (Instagram/Twitter/TikTok)\n2. **Fetch** → Retrieve complete profile data and engagement metrics\n3. **Analyze** → Examine follower patterns, ratios, growth velocity, engagement\n4. **AI Check** → Deep behavioral analysis with Claude AI\n5. **Report** → Generate comprehensive fraud assessment\n6. **Notify** → Send detailed email report to partnership team\n7. **Log** → Save to database for tracking\n\n## 📊 Detection Capabilities\n\n- **Follower Authenticity**: Analyzes follower-to-following ratio (red flag if &lt; 0.5)\n- **Engagement Quality**: Calculates engagement rate (industry avg: 1-5%)\n- **Growth Patterns**: Detects suspicious rapid follower spikes\n- **Content Consistency**: Evaluates posting frequency and regularity\n- **Profile Completeness**: Checks verification, bio, activity\n- **AI Behavioral Analysis**: Deep pattern recognition for sophisticated fraud\n\n## ⚙️ Setup Instructions\n\n### 1. Configure API Access\n**Social Platform APIs:**\n- **Instagram**: Get Graph API access token from Meta for Developers\n- **Twitter**: OAuth 2.0 credentials from Twitter Developer Portal\n- **TikTok**: Business API credentials (optional)\n\n**AI Analysis:**\n- **Anthropic Claude API**: Get key from console.anthropic.com\n- Used for advanced behavioral fraud detection\n\n### 2. Setup Notifications\n- Configure SMTP in \"Send Report\" node\n- Update recipient email (partnerships@company.com)\n- Customize HTML template if needed\n\n### 3. Database (Optional)\n- Create PostgreSQL table (schema below)\n- Add database credentials to final node\n- Skip if you don't need historical tracking\n\n### Database Schema\n```sql\nCREATE TABLE partnerships.influencer_fraud_reports (\n  id SERIAL PRIMARY KEY,\n  report_id VARCHAR(255) UNIQUE,\n  username VARCHAR(255),\n  platform VARCHAR(50),\n  profile_url TEXT,\n  followers BIGINT,\n  following BIGINT,\n  posts INTEGER,\n  verified BOOLEAN,\n  authenticity_score INTEGER,\n  risk_level VARCHAR(50),\n  final_decision TEXT,\n  partnership_recommendation VARCHAR(100),\n  ai_verdict VARCHAR(50),\n  ai_confidence VARCHAR(20),\n  red_flags JSONB,\n  fake_follower_estimate VARCHAR(20),\n  detailed_analysis JSONB,\n  created_at TIMESTAMP\n);\n```\n\n## 🚀 How to Use\n\n**Webhook Endpoint**: `POST /webhook/influencer-fraud-check`\n\n**Request Body:**\n```json\n{\n  \"username\": \"influencer_handle\",\n  \"platform\": \"instagram\"  // or \"twitter\", \"tiktok\"\n}\n```\n\n**Example:**\n```bash\ncurl -X POST https://your-n8n.com/webhook/influencer-fraud-check \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"username\":\"example_user\",\"platform\":\"instagram\"}'\n```\n\n## 📈 Scoring System\n\n**Overall Authenticity Score (0-100):**\n- **80-100**: LOW RISK → Approved for partnership\n- **60-79**: MEDIUM RISK → Requires manual review\n- **40-59**: HIGH RISK → Caution advised\n- **0-39**: CRITICAL RISK → Rejected\n\n**Weighted Components:**\n- Follower Quality (25%)\n- Engagement Quality (35%)\n- Content Consistency (15%)\n- Growth Pattern (15%)\n- Profile Completeness (10%)\n\n**Final Score = 70% Automated + 30% AI Analysis**\n\n## 🚩 Red Flags Detected\n\n- Following-to-follower ratio &gt; 2:1\n- Engagement rate &lt; 0.5%\n- Rapid growth (&gt;50K followers/month)\n- Large following with &lt;10 posts\n- No verification with &gt;100K followers\n- Bot-like comment patterns\n- Suspicious audience demographics\n\n## 💰 Cost Estimate\n\n- **Instagram/Twitter API**: Free tier usually sufficient\n- **Claude AI**: ~$0.10-0.20 per analysis\n- **Estimated**: $5-10/month for 50 checks\n\n## 💡 Best Practices\n\n1. **Always verify** HIGH and MEDIUM risk profiles manually\n2. **Cross-reference** with other influencer databases\n3. **Request** media kit and past campaign results\n4. **Trial campaigns** before large commitments\n5. **Monitor** performance metrics post-partnership\n6. **Update** detection thresholds based on your findings\n\n## 🎯 What You Get\n\n**Detailed Report Includes:**\n- Overall authenticity score (0-100)\n- Risk level classification\n- Partnership recommendation (APPROVE/REVIEW/REJECT)\n- Engagement quality analysis\n- Fake follower percentage estimate\n- AI behavioral insights\n- Specific red flags and concerns\n- Next steps and recommendations\n","workflow":{"id":"WemZJe4i3HbdVSwE","meta":{"instanceId":"dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281","templateCredsSetupCompleted":true},"name":"AI Influencer Fraud & Fake Follower Detector","tags":[],"nodes":[{"id":"53c4485a-32ca-4d7d-89da-b5c4c49dfbf0","name":"Influencer Profile Input","type":"n8n-nodes-base.webhook","notes":"Submit influencer username and platform for analysis. Analyzes follower authenticity, engagement patterns, and fraud indicators using AI to score influencer legitimacy before brand partnerships. Detects fake followers, bot accounts, and suspicious activity.","position":[-64,144],"webhookId":"influencer-fraud-check","parameters":{"path":"influencer-fraud-check","options":{},"httpMethod":"POST","responseMode":"lastNode"},"notesInFlow":true,"typeVersion":1.1},{"id":"7d31c909-da36-4eb5-ab54-e40d589dc423","name":"Fetch Influencer Data","type":"n8n-nodes-base.httpRequest","notes":"Retrieves complete influencer profile including followers, engagement metrics, post history, and audience demographics from social platform APIs","position":[160,144],"parameters":{"url":"={{ $json.platform === 'instagram' ? 'https://graph.instagram.com/v18.0/' + $json.username + '?fields=id,username,followers_count,follows_count,media_count,media{like_count,comments_count,timestamp,caption}&access_token=' + $credentials.instagramAccessToken : $json.platform === 'twitter' ? 'https://api.twitter.com/2/users/by/username/' + $json.username + '?user.fields=created_at,description,public_metrics,verified&expansions=pinned_tweet_id' : 'https://www.tiktok.com/api/user/detail/?uniqueId=' + $json.username }}","options":{"response":{"response":{"responseFormat":"json"}}},"authentication":"predefinedCredentialType","nodeCredentialType":"{{ $json.platform === 'instagram' ? 'instagramOAuth2Api' : $json.platform === 'twitter' ? 'twitterOAuth2Api' : 'httpHeaderAuth' }}"},"notesInFlow":true,"typeVersion":4.2},{"id":"f5bee00a-c135-4945-b639-6e42711329ff","name":"Analyze Follower Patterns","type":"n8n-nodes-base.code","notes":"Examines follower-to-following ratio, engagement rate, growth velocity, audience quality, posting consistency, and comment authenticity to identify bot networks and fake accounts","position":[384,144],"parameters":{"jsCode":"// Comprehensive follower authenticity analysis\nconst profile = $input.first().json;\nconst requestData = $node['Influencer Profile Input'].json.body;\n\n// Extract metrics based on platform\nlet followers, following, posts, engagement, profileAge;\n\nif (requestData.platform === 'instagram') {\n  followers = profile.followers_count || 0;\n  following = profile.follows_count || 0;\n  posts = profile.media_count || 0;\n  const media = profile.media?.data || [];\n  const totalEngagement = media.reduce((sum, post) => \n    sum + (post.like_count || 0) + (post.comments_count || 0), 0\n  );\n  engagement = media.length > 0 ? totalEngagement / media.length : 0;\n  profileAge = Date.now() - new Date(profile.created_time || Date.now()).getTime();\n} else if (requestData.platform === 'twitter') {\n  const metrics = profile.data?.public_metrics || {};\n  followers = metrics.followers_count || 0;\n  following = metrics.following_count || 0;\n  posts = metrics.tweet_count || 0;\n  engagement = (metrics.like_count || 0) / Math.max(posts, 1);\n  profileAge = Date.now() - new Date(profile.data?.created_at || Date.now()).getTime();\n} else if (requestData.platform === 'tiktok') {\n  const user = profile.userInfo?.user || {};\n  followers = user.followerCount || 0;\n  following = user.followingCount || 0;\n  posts = user.videoCount || 0;\n  engagement = (user.heart || 0) / Math.max(posts, 1);\n  profileAge = Date.now();\n}\n\n// Calculate fraud indicators\nconst analysis = {\n  // 1. Follower-to-Following Ratio (red flag if < 0.5 for influencers)\n  followerRatio: following > 0 ? followers / following : followers,\n  followerRatioScore: (() => {\n    const ratio = following > 0 ? followers / following : followers / 1000;\n    if (ratio > 10) return 100; // Excellent\n    if (ratio > 5) return 85;\n    if (ratio > 2) return 70;\n    if (ratio > 1) return 50;\n    if (ratio > 0.5) return 30;\n    return 10; // Suspicious\n  })(),\n  \n  // 2. Engagement Rate (industry average: 1-5%)\n  engagementRate: followers > 0 ? (engagement / followers) * 100 : 0,\n  engagementScore: (() => {\n    const rate = followers > 0 ? (engagement / followers) * 100 : 0;\n    if (rate > 10) return 100; // Excellent\n    if (rate > 5) return 90;\n    if (rate > 2) return 75;\n    if (rate > 1) return 60;\n    if (rate > 0.5) return 40;\n    if (rate > 0.1) return 20;\n    return 5; // Likely fake engagement\n  })(),\n  \n  // 3. Content Consistency (posts per week)\n  postsPerWeek: (posts / (profileAge / (7 * 24 * 60 * 60 * 1000))) || 0,\n  consistencyScore: (() => {\n    const postsWeek = (posts / Math.max(profileAge / (7 * 24 * 60 * 60 * 1000), 1)) || 0;\n    if (postsWeek >= 3 && postsWeek <= 10) return 100; // Optimal\n    if (postsWeek >= 1) return 80;\n    if (postsWeek >= 0.5) return 60;\n    return 30; // Inactive or spam\n  })(),\n  \n  // 4. Account Age vs Follower Growth (suspicious if too fast)\n  accountAgeMonths: profileAge / (30 * 24 * 60 * 60 * 1000),\n  growthVelocity: followers / Math.max(profileAge / (30 * 24 * 60 * 60 * 1000), 1),\n  growthScore: (() => {\n    const months = Math.max(profileAge / (30 * 24 * 60 * 60 * 1000), 1);\n    const velocity = followers / months;\n    \n    // Gradual growth is authentic\n    if (velocity < 1000 && months > 6) return 100;\n    if (velocity < 5000 && months > 3) return 85;\n    if (velocity < 10000) return 70;\n    if (velocity < 50000) return 50;\n    return 20; // Suspicious rapid growth\n  })(),\n  \n  // 5. Profile Completeness\n  profileComplete: (() => {\n    let score = 0;\n    if (profile.description || profile.bio) score += 30;\n    if (profile.profile_pic_url || profile.profile_image_url) score += 30;\n    if (profile.website || profile.url) score += 20;\n    if (profile.verified) score += 20;\n    return score;\n  })(),\n  \n  // 6. Follower Quality Indicators\n  suspiciousFollowerIndicators: {\n    highFollowingRatio: following / Math.max(followers, 1) > 2,\n    lowEngagement: (engagement / Math.max(followers, 1)) * 100 < 0.5,\n    rapidGrowth: (followers / Math.max(profileAge / (30 * 24 * 60 * 60 * 1000), 1)) > 50000,\n    fewPosts: posts < 10 && followers > 10000,\n    noVerification: !profile.verified && followers > 100000\n  }\n};\n\n// Calculate red flags\nconst redFlags = [];\nif (analysis.suspiciousFollowerIndicators.highFollowingRatio) {\n  redFlags.push('High following-to-follower ratio suggests fake account or bot behavior');\n}\nif (analysis.suspiciousFollowerIndicators.lowEngagement) {\n  redFlags.push('Extremely low engagement rate indicates purchased followers');\n}\nif (analysis.suspiciousFollowerIndicators.rapidGrowth) {\n  redFlags.push('Unnaturally rapid follower growth detected');\n}\nif (analysis.suspiciousFollowerIndicators.fewPosts) {\n  redFlags.push('Large follower count with minimal content suggests inauthenticity');\n}\nif (analysis.suspiciousFollowerIndicators.noVerification) {\n  redFlags.push('No platform verification despite significant following');\n}\n\n// Overall fraud risk score (weighted average)\nconst fraudScore = Math.round(\n  (analysis.followerRatioScore * 0.25) +\n  (analysis.engagementScore * 0.35) +\n  (analysis.consistencyScore * 0.15) +\n  (analysis.growthScore * 0.15) +\n  (analysis.profileComplete * 0.10)\n);\n\n// Risk classification\nlet riskLevel = 'UNKNOWN';\nlet recommendation = 'Insufficient data for analysis';\n\nif (fraudScore >= 80) {\n  riskLevel = 'LOW RISK';\n  recommendation = 'APPROVED - Authentic influencer with genuine engagement';\n} else if (fraudScore >= 60) {\n  riskLevel = 'MEDIUM RISK';\n  recommendation = 'REVIEW - Some concerns, conduct additional verification';\n} else if (fraudScore >= 40) {\n  riskLevel = 'HIGH RISK';\n  recommendation = 'CAUTION - Multiple fraud indicators detected';\n} else {\n  riskLevel = 'CRITICAL RISK';\n  recommendation = 'REJECTED - Strong evidence of fake followers and fraud';\n}\n\nreturn [{\n  json: {\n    influencer: {\n      username: requestData.username,\n      platform: requestData.platform,\n      profileUrl: requestData.platform === 'instagram' \n        ? `https://instagram.com/${requestData.username}`\n        : requestData.platform === 'twitter'\n        ? `https://twitter.com/${requestData.username}`\n        : `https://tiktok.com/@${requestData.username}`\n    },\n    metrics: {\n      followers,\n      following,\n      posts,\n      engagementPerPost: Math.round(engagement),\n      accountAgeMonths: Math.round(analysis.accountAgeMonths),\n      verified: profile.verified || false\n    },\n    analysis: {\n      followerRatio: analysis.followerRatio.toFixed(2),\n      engagementRate: analysis.engagementRate.toFixed(3) + '%',\n      postsPerWeek: analysis.postsPerWeek.toFixed(1),\n      growthVelocity: Math.round(analysis.growthVelocity) + ' followers/month'\n    },\n    scoring: {\n      followerQuality: analysis.followerRatioScore,\n      engagementQuality: analysis.engagementScore,\n      contentConsistency: analysis.consistencyScore,\n      growthPattern: analysis.growthScore,\n      profileCompleteness: analysis.profileComplete\n    },\n    fraudAssessment: {\n      overallScore: fraudScore,\n      riskLevel,\n      recommendation,\n      redFlags,\n      suspiciousIndicators: analysis.suspiciousFollowerIndicators\n    },\n    timestamp: new Date().toISOString(),\n    rawData: profile\n  }\n}];"},"notesInFlow":true,"typeVersion":2},{"id":"639a1dc7-e2c6-4e30-a38a-4e16630c698e","name":"AI Authenticity Analysis","type":"n8n-nodes-base.httpRequest","notes":"Uses Claude AI to perform deep behavioral analysis on profile content, writing patterns, comment quality, and audience interactions to detect sophisticated fraud tactics","position":[608,144],"parameters":{"url":"https://api.anthropic.com/v1/messages","method":"POST","options":{},"sendBody":true,"sendHeaders":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"model","value":"claude-sonnet-4-20250514"},{"name":"max_tokens","value":"1500"},{"name":"messages","value":"={{ [{role: 'user', content: `You are an expert in influencer fraud detection. Analyze this influencer profile and provide detailed insights.\n\nInfluencer: ${$json.influencer.username} on ${$json.influencer.platform}\nFollowers: ${$json.metrics.followers.toLocaleString()}\nEngagement Rate: ${$json.analysis.engagementRate}\nFollower/Following Ratio: ${$json.analysis.followerRatio}\nGrowth Velocity: ${$json.analysis.growthVelocity}\nPosts per Week: ${$json.analysis.postsPerWeek}\n\nCurrent Risk Assessment: ${$json.fraudAssessment.riskLevel}\nAutomated Score: ${$json.fraudAssessment.overallScore}/100\n\nRed Flags Detected:\n${$json.fraudAssessment.redFlags.map((flag, i) => `${i+1}. ${flag}`).join('\\n')}\n\nProvide:\n1. Authenticity verdict (AUTHENTIC/SUSPICIOUS/FRAUDULENT)\n2. Key fraud indicators or positive signs (3-4 points)\n3. Specific concerns about follower quality\n4. Final recommendation for brand partnership (APPROVE/REVIEW/REJECT)\n5. Confidence level (0-100%)\n\nReturn as JSON: {verdict, indicators: [], concerns, recommendation, confidence, summary}`}] }}"}]},"headerParameters":{"parameters":[{"name":"x-api-key","value":"={{ $credentials.apiKey }}"},{"name":"anthropic-version","value":"2023-06-01"}]},"nodeCredentialType":"anthropicApi"},"credentials":{"anthropicApi":{"id":"credential-id","name":"Anthropic account - test"}},"notesInFlow":true,"typeVersion":4.2},{"id":"9a341d4e-1007-4e16-af6a-dfc6c992fcc2","name":"Generate Fraud Report","type":"n8n-nodes-base.code","notes":"Creates comprehensive fraud assessment report combining automated analysis and AI insights with actionable partnership recommendations and risk scoring","position":[816,144],"parameters":{"jsCode":"// Generate comprehensive fraud detection report\nconst analysis = $node['Analyze Follower Patterns'].json;\nconst aiResponse = $input.first().json;\n\n// Parse AI response\nlet aiAnalysis = {};\ntry {\n  const aiContent = aiResponse.content?.[0]?.text || '{}';\n  const jsonMatch = aiContent.match(/\\{[\\s\\S]*\\}/);\n  if (jsonMatch) {\n    aiAnalysis = JSON.parse(jsonMatch[0]);\n  }\n} catch (error) {\n  aiAnalysis = {\n    verdict: 'ERROR',\n    indicators: ['AI analysis failed'],\n    concerns: 'Unable to complete AI verification',\n    recommendation: 'MANUAL REVIEW REQUIRED',\n    confidence: 0,\n    summary: 'Technical error during AI analysis'\n  };\n}\n\n// Combined final score (70% automated + 30% AI)\nconst automatedScore = analysis.fraudAssessment.overallScore;\nconst aiConfidence = aiAnalysis.confidence || 50;\nconst finalScore = Math.round((automatedScore * 0.7) + (aiConfidence * 0.3));\n\n// Determine final decision\nlet finalDecision = 'MANUAL REVIEW';\nlet partnershipRecommendation = 'HOLD';\n\nif (finalScore >= 75 && aiAnalysis.recommendation?.includes('APPROVE')) {\n  finalDecision = 'APPROVED FOR PARTNERSHIP';\n  partnershipRecommendation = 'PROCEED';\n} else if (finalScore < 45 || aiAnalysis.recommendation?.includes('REJECT')) {\n  finalDecision = 'REJECTED - HIGH FRAUD RISK';\n  partnershipRecommendation = 'DO NOT PROCEED';\n} else {\n  finalDecision = 'REQUIRES MANUAL REVIEW';\n  partnershipRecommendation = 'ADDITIONAL VERIFICATION NEEDED';\n}\n\n// Generate report\nconst report = {\n  reportId: `FRAUD-${Date.now()}-${Math.random().toString(36).substr(2, 6).toUpperCase()}`,\n  generatedAt: new Date().toISOString(),\n  \n  influencerProfile: analysis.influencer,\n  \n  executiveSummary: {\n    finalDecision,\n    partnershipRecommendation,\n    overallAuthenticityScore: finalScore,\n    riskLevel: finalScore >= 75 ? 'LOW' : finalScore >= 60 ? 'MEDIUM' : finalScore >= 45 ? 'HIGH' : 'CRITICAL',\n    aiVerdict: aiAnalysis.verdict || 'UNKNOWN',\n    aiConfidence: aiConfidence + '%'\n  },\n  \n  keyMetrics: analysis.metrics,\n  \n  detailedAnalysis: {\n    followerAuthenticity: {\n      score: analysis.scoring.followerQuality,\n      ratio: analysis.analysis.followerRatio,\n      assessment: analysis.scoring.followerQuality >= 70 ? 'Healthy follower ratio' : 'Suspicious ratio detected'\n    },\n    engagementQuality: {\n      score: analysis.scoring.engagementQuality,\n      rate: analysis.analysis.engagementRate,\n      assessment: analysis.scoring.engagementQuality >= 60 ? 'Genuine engagement' : 'Low or fake engagement'\n    },\n    contentConsistency: {\n      score: analysis.scoring.contentConsistency,\n      frequency: analysis.analysis.postsPerWeek,\n      assessment: analysis.scoring.contentConsistency >= 60 ? 'Regular posting pattern' : 'Irregular activity'\n    },\n    growthPattern: {\n      score: analysis.scoring.growthPattern,\n      velocity: analysis.analysis.growthVelocity,\n      assessment: analysis.scoring.growthPattern >= 70 ? 'Organic growth' : 'Suspicious growth pattern'\n    }\n  },\n  \n  fraudIndicators: {\n    automatedRedFlags: analysis.fraudAssessment.redFlags,\n    aiConcerns: aiAnalysis.indicators || [],\n    suspiciousPatterns: Object.keys(analysis.fraudAssessment.suspiciousIndicators)\n      .filter(key => analysis.fraudAssessment.suspiciousIndicators[key])\n      .map(key => key.replace(/([A-Z])/g, ' $1').trim())\n  },\n  \n  aiInsights: {\n    verdict: aiAnalysis.verdict,\n    keyFindings: aiAnalysis.indicators || [],\n    specificConcerns: aiAnalysis.concerns || 'None provided',\n    summary: aiAnalysis.summary || 'AI analysis completed'\n  },\n  \n  recommendations: {\n    partnership: partnershipRecommendation,\n    nextSteps: finalDecision.includes('APPROVED') ? [\n      'Proceed with partnership negotiations',\n      'Set clear deliverables and KPIs',\n      'Monitor performance metrics closely',\n      'Establish fraud detection checkpoints'\n    ] : finalDecision.includes('REJECTED') ? [\n      'Do not proceed with partnership',\n      'Document fraud indicators for records',\n      'Consider reporting to platform',\n      'Review screening criteria'\n    ] : [\n      'Conduct manual profile review',\n      'Request additional verification documents',\n      'Analyze recent audience growth patterns',\n      'Review competitor partnerships',\n      'Consider trial campaign first'\n    ],\n    estimatedFakeFollowerPercentage: Math.max(0, Math.round(100 - finalScore)) + '%'\n  },\n  \n  confidenceScore: {\n    automated: automatedScore,\n    aiVerification: aiConfidence,\n    combined: finalScore,\n    methodology: '70% algorithmic analysis + 30% AI behavioral analysis'\n  }\n};\n\nconsole.log(`\\n========== FRAUD DETECTION REPORT ==========`);\nconsole.log(`Influencer: @${analysis.influencer.username}`);\nconsole.log(`Platform: ${analysis.influencer.platform}`);\nconsole.log(`Final Score: ${finalScore}/100`);\nconsole.log(`Decision: ${finalDecision}`);\nconsole.log(`==========================================\\n`);\n\nreturn [{ json: report }];"},"notesInFlow":true,"typeVersion":2},{"id":"b2b71f85-95d2-4924-80ff-600fe5b07d64","name":"Send Report & Notification","type":"n8n-nodes-base.emailSend","notes":"Delivers detailed fraud assessment report to brand partnership team via email with visual scoring dashboard and clear approval/rejection recommendation","position":[1040,144],"webhookId":"ea2f0b64-3d28-4536-834b-7443d30e8f2c","parameters":{"options":{},"subject":"={{ $json.executiveSummary.finalDecision }} - Influencer Fraud Report: @{{ $json.influencerProfile.username }}","toEmail":"user@example.com","fromEmail":"user@example.com"},"credentials":{"smtp":{"id":"credential-id","name":"SMTP -test"}},"notesInFlow":true,"typeVersion":2.1},{"id":"112a5f5f-6db0-4ac9-a6b1-ab94d9b92b43","name":"Save to Database","type":"n8n-nodes-base.postgres","notes":"Stores complete fraud assessment in database for historical tracking, trend analysis, and future reference during partnership decisions","position":[1264,144],"parameters":{"table":"influencer_fraud_reports","schema":"partnerships","columns":{"value":{},"schema":[],"mappingMode":"autoMapInputData","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"credentials":{"postgres":{"id":"credential-id","name":"Postgres-test"}},"notesInFlow":true,"typeVersion":2.4},{"id":"398cce3c-5d49-4434-87c1-4191bf7021fd","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-944,-752],"parameters":{"width":720,"height":1748,"content":"## 🛡️ AI Influencer Fraud & Fake Follower Detector\n\nAnalyzes influencer profiles and scores authenticity before brand partnership approval. Detects fake followers, bot accounts, and suspicious engagement patterns using AI-powered behavioral analysis.\n\n## 🎯 How It Works\n\n**Simple 7-Node Workflow:**\n1. **Input** → Submit influencer username and platform (Instagram/Twitter/TikTok)\n2. **Fetch** → Retrieve complete profile data and engagement metrics\n3. **Analyze** → Examine follower patterns, ratios, growth velocity, engagement\n4. **AI Check** → Deep behavioral analysis with Claude AI\n5. **Report** → Generate comprehensive fraud assessment\n6. **Notify** → Send detailed email report to partnership team\n7. **Log** → Save to database for tracking\n\n## ⚙️ Setup Instructions\n\n### 1. Configure API Access\n**Social Platform APIs:**\n- **Instagram**: Get Graph API access token from Meta for Developers\n- **Twitter**: OAuth 2.0 credentials from Twitter Developer Portal\n- **TikTok**: Business API credentials (optional)\n\n**AI Analysis:**\n- **Anthropic Claude API**: Get key from console.anthropic.com\n- Used for advanced behavioral fraud detection\n\n### 2. Setup Notifications\n- Configure SMTP in \"Send Report\" node\n- Update recipient email (partnerships@company.com)\n- Customize HTML template if needed\n\n### 3. Database (Optional)\n- Create PostgreSQL table (schema below)\n- Add database credentials to final node\n- Skip if you don't need historical tracking\n\n### Database Schema\n```sql\nCREATE TABLE partnerships.influencer_fraud_reports (\n  id SERIAL PRIMARY KEY,\n  report_id VARCHAR(255) UNIQUE,\n  username VARCHAR(255),\n  platform VARCHAR(50),\n  profile_url TEXT,\n  followers BIGINT,\n  following BIGINT,\n  posts INTEGER,\n  verified BOOLEAN,\n  authenticity_score INTEGER,\n  risk_level VARCHAR(50),\n  final_decision TEXT,\n  partnership_recommendation VARCHAR(100),\n  ai_verdict VARCHAR(50),\n  ai_confidence VARCHAR(20),\n  red_flags JSONB,\n  fake_follower_estimate VARCHAR(20),\n  detailed_analysis JSONB,\n  created_at TIMESTAMP\n);\n```\n\n## 🚀 How to Use\n\n**Webhook Endpoint**: `POST /webhook/influencer-fraud-check`\n\n**Request Body:**\n```json\n{\n  \"username\": \"influencer_handle\",\n  \"platform\": \"instagram\"  // or \"twitter\", \"tiktok\"\n}\n```\n\n**Example:**\n```bash\ncurl -X POST https://your-n8n.com/webhook/influencer-fraud-check \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"username\":\"example_user\",\"platform\":\"instagram\"}'\n```\n\n"},"typeVersion":1},{"id":"77bed5f9-06df-4aea-849e-c6f1736ce728","name":"Sticky Note - Workflow","type":"n8n-nodes-base.stickyNote","position":[-112,16],"parameters":{"color":4,"width":640,"height":352,"content":"## Input → Fetch Profile → Analyze Patterns"},"typeVersion":1},{"id":"bc08e159-a9c4-43b3-b060-182640d96b92","name":"Sticky Note - Workflow1","type":"n8n-nodes-base.stickyNote","position":[560,16],"parameters":{"color":4,"width":640,"height":352,"content":"## IAI Verification → Generate Report → Notify Team "},"typeVersion":1},{"id":"01c4e97a-d604-4f8e-a245-0e2c3abc13f1","name":"Sticky Note - Workflow2","type":"n8n-nodes-base.stickyNote","position":[1232,16],"parameters":{"color":4,"width":320,"height":352,"content":"## Database Log"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"3149600b-0b4b-4ab2-b43a-549d5c636b55","connections":{"Fetch Influencer Data":{"main":[[{"node":"Analyze Follower Patterns","type":"main","index":0}]]},"Generate Fraud Report":{"main":[[{"node":"Send Report & Notification","type":"main","index":0}]]},"AI Authenticity Analysis":{"main":[[{"node":"Generate Fraud Report","type":"main","index":0}]]},"Influencer Profile Input":{"main":[[{"node":"Fetch Influencer Data","type":"main","index":0}]]},"Analyze Follower Patterns":{"main":[[{"node":"AI Authenticity Analysis","type":"main","index":0}]]},"Send Report & Notification":{"main":[[{"node":"Save to Database","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":11,"nodeTypes":{"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.postgres":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.httpRequest":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Oneclick AI Squad","username":"oneclick-ai","bio":"The AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations  from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.","verified":true,"links":["https://www.oneclickitsolution.com/"],"avatar":"https://gravatar.com/avatar/848fca91367142f65f9e5c55d64e5c9952b160d7b060d103b52aa343c6bc7b3d?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"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/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"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":30,"icon":"file:postgres.svg","name":"n8n-nodes-base.postgres","codex":{"data":{"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-i-chose-n8n-over-zapier-in-2020/","icon":"😍","label":"Why I chose n8n over Zapier in 2020"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with 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/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/postgres/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Postgres"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNzkgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTc3LjM5MSA0Ny45MjJjLS40NjYtMS40MTItMS42ODgtMi4zOTYtMy4yNjgtMi42MzItLjc0NS0uMTExLTEuNTk4LS4wNjQtMi42MDguMTQ0LTEuNzYuMzYzLTMuMDY1LjUwMS00LjAxOC41MjggMy41OTYtNi4wNzIgNi41MjEtMTIuOTk3IDguMjA0LTE5LjUxNSAyLjcyMi0xMC41NCAxLjI2OC0xNS4zNDEtLjQzMi0xNy41MTNDNzAuNzcgMy4xODUgNjQuMjA2LjA5NyA1Ni4yODcuMDAyYy00LjIyNC0uMDUyLTcuOTMzLjc4Mi05Ljg2NyAxLjM4MmEzNyAzNyAwIDAgMC01Ljc3LS41MjhjLTMuODA5LS4wNjEtNy4xNzQuNzctMTAuMDUgMi40NzZhNDYgNDYgMCAwIDAtNy4wOTgtMS43ODJDMTYuNTYxLjQxMSAxMC45NjggMS4yOTkgNi44NzYgNC4xOSAxLjkyMiA3LjY4OS0uMzc1IDEzLjc3LjA1IDIyLjI2MmMuMTM1IDIuNjk2IDEuNjQzIDEwLjkgNC4wMTggMTguNjggMS4zNjUgNC40NzIgMi44MiA4LjE4NSA0LjMyNiAxMS4wMzggMi4xMzUgNC4wNDYgNC40MTkgNi40MjggNi45ODQgNy4yODQgMS40MzguNDc5IDQuMDQ5LjgxNCA2Ljc5Ny0xLjQ3M2E2IDYgMCAwIDAgMS40MjkgMS4yM2MuNzgzLjQ5NCAxLjc0Ljg5NyAyLjY5NiAxLjEzNiAzLjQ0Ni44NjIgNi42NzQuNjQ2IDkuNDI3LS41NjFsLjA0MSAxLjM2Mi4wNiAxLjg5OWMuMTYzIDQuMDY0LjQ0IDcuMjIzIDEuMjU5IDkuNDM0LjA0NS4xMjIuMTA1LjMwNy4xNjkuNTAzLjQwOSAxLjI1MSAxLjA5MiAzLjM0NiAyLjgzIDQuOTg3IDEuOCAxLjY5OSAzLjk3OCAyLjIyIDUuOTcyIDIuMjIgMSAwIDEuOTU1LS4xMzEgMi43OTItLjMxMSAyLjk4NC0uNjM5IDYuMzczLTEuNjE0IDguODI0LTUuMTA0IDIuMzE4LTMuMyAzLjQ0NC04LjI3IDMuNjQ4LTE2LjEwMWwuMDc0LS42MzQuMDQ4LS40MTQuNTQ2LjA0OC4xNDEuMDFjMy4wMzkuMTM4IDYuNzU1LS41MDYgOS4wMzctMS41NjYgMS44MDMtLjgzNyA3LjU4Mi0zLjg4OCA2LjIyMS04LjAwNyIvPjxwYXRoIGZpbGw9IiMzMzY3OTEiIGQ9Ik03Mi4xOTUgNDguNzIzYy05LjAzNiAxLjg2NC05LjY1Ny0xLjE5NS05LjY1Ny0xLjE5NSA5LjU0MS0xNC4xNTcgMTMuNTI5LTMyLjEyNyAxMC4wODctMzYuNTI1QzYzLjIzNS0uOTk0IDQ2Ljk4MSA0LjY4IDQ2LjcxIDQuODI3bC0uMDg3LjAxNmMtMS43ODUtLjM3MS0zLjc4My0uNTkxLTYuMDI5LS42MjgtNC4wODktLjA2Ny03LjE5IDEuMDcyLTkuNTQ0IDIuODU3IDAgMC0yOC45OTUtMTEuOTQ1LTI3LjY0NyAxNS4wMjMuMjg3IDUuNzM3IDguMjIzIDQzLjQxIDE3LjY4OSAzMi4wMzEgMy40Ni00LjE2MSA2LjgwMy03LjY3OSA2LjgwMy03LjY3OSAxLjY2IDEuMTAzIDMuNjQ4IDEuNjY2IDUuNzMyIDEuNDYzbC4xNjItLjEzN2E2LjMgNi4zIDAgMCAwIC4wNjUgMS42MmMtMi40MzkgMi43MjUtMS43MjIgMy4yMDMtNi41OTcgNC4yMDYtNC45MzMgMS4wMTctMi4wMzUgMi44MjYtLjE0MyAzLjI5OSAyLjI5NC41NzQgNy42IDEuMzg2IDExLjE4NS0zLjYzM2wtLjE0My41NzNjLjk1Ni43NjUgMS42MjYgNC45NzggMS41MTQgOC43OTdzLS4xODggNi40NDEuNTY1IDguNDg5IDEuNTAzIDYuNjU2IDcuOTEyIDUuMjgyYzUuMzU1LTEuMTQ4IDguMTMtNC4xMjEgOC41MTYtOS4wODEuMjc0LTMuNTI2Ljg5NC0zLjAwNS45MzMtNi4xNThsLjQ5Ny0xLjQ5M2MuNTczLTQuNzguMDkxLTYuMzIyIDMuMzktNS42MDVsLjgwMi4wN2MyLjQyOC4xMSA1LjYwNi0uMzkxIDcuNDcxLTEuMjU3IDQuMDE2LTEuODY0IDYuMzk4LTQuOTc2IDIuNDM4LTQuMTU4Ii8+PHBhdGggZD0iTTMyLjc0NyAyNC42NmMtLjgxNC0uMTEzLTEuNTUyLS4wMDgtMS45MjUuMjc0YS43LjcgMCAwIDAtLjI5Mi40N2MtLjA0Ny4zMzYuMTg4LjcwNy4zMzMuODk4LjQwOS41NDIgMS4wMDYuOTE1IDEuNTk4Ljk5N2EyIDIgMCAwIDAgLjI1Ni4wMThjLjk4NiAwIDEuODgzLS43NjggMS45NjItMS4zMzUuMDk5LS43MS0uOTMyLTEuMTgzLTEuOTMxLTEuMzIybTI2Ljk3NS4wMjJjLS4wNzgtLjU1Ni0xLjA2OC0uNzE1LTIuMDA3LS41ODRzLTEuODQ4LjU1NC0xLjc3MiAxLjExMmMuMDYxLjQzNC44NDQgMS4xNzQgMS43NzEgMS4xNzRxLjExNyAwIC4yMzctLjAxNmMuNjE5LS4wODYgMS4wNzMtLjQ3OSAxLjI4OC0uNzA1LjMyOS0uMzQ1LjUxOC0uNzMuNDg0LS45OG0xNS40NzcgMjMuODI4Yy0uMzQ1LTEuMDQyLTEuNDUzLTEuMzc3LTMuMjk2LS45OTctNS40NzEgMS4xMjktNy40My4zNDctOC4wNzMtLjEyNyA0LjI1Mi02LjQ3OCA3Ljc1LTE0LjMwOCA5LjYzNy0yMS42MTQuODk0LTMuNDYxIDEuMzg4LTYuNjc1IDEuNDI4LTkuMjk0LjA0NS0yLjg3Ni0uNDQ1LTQuOTg4LTEuNDU1LTYuMjc5LTQuMDcyLTUuMjAzLTEwLjA0OC03Ljk5NC0xNy4yODMtOC4wNy00Ljk3My0uMDU2LTkuMTc1IDEuMjE3LTkuOTkgMS41NzVhMjUgMjUgMCAwIDAtNS42MjItLjcyMmMtMy43MzQtLjA2LTYuOTYxLjgzNC05LjYzMyAyLjY1NWE0MyA0MyAwIDAgMC03LjgyOC0yLjA1MmMtNi4zNDItMS4wMjEtMTEuMzgxLS4yNDgtMTQuOTc4IDIuMy00LjI5MSAzLjA0LTYuMjcyIDguNDc1LTUuODg4IDE2LjE1Mi4xMjkgMi41ODMgMS42MDEgMTAuNTI5IDMuOTIzIDE4LjEzOSAzLjA1NyAxMC4wMTYgNi4zOCAxNS42ODYgOS44NzcgMTYuODUyYTQuNCA0LjQgMCAwIDAgMS40MDIuMjMyYzEuMjc2IDAgMi44MzktLjU3NSA0LjQ2Ni0yLjUzMWExNjEgMTYxIDAgMCAxIDYuMTU2LTYuOTY2IDkuOSA5LjkgMCAwIDAgNC40MjkgMS4xOTFsLjAxLjEyMWMtLjMxLjM2OC0uNTY0LjY5LS43ODEuOTY1LTEuMDcgMS4zNTgtMS4yOTMgMS42NDEtNC43MzggMi4zNTEtLjk4LjIwMi0zLjU4Mi43MzgtMy42MiAyLjU2My0uMDQxIDEuOTkzIDMuMDc2IDIuODMgMy40MzEgMi45MTkgMS4yMzguMzEgMi40My40NjMgMy41NjguNDYzIDIuNzY2IDAgNS4yLS45MDkgNy4xNDUtMi42NjgtLjA2IDcuMTA2LjIzNiAxNC4xMDcgMS4wODkgMTYuMjQxLjY5OSAxLjc0NiAyLjQwNiA2LjAxNCA3Ljc5OCA2LjAxNC43OTEgMCAxLjY2Mi0uMDkyIDIuNjItLjI5NyA1LjYyNy0xLjIwNyA4LjA3MS0zLjY5NCA5LjAxNi05LjE3Ny41MDYtMi45MyAxLjM3NC05LjkyOCAxLjc4Mi0xMy42ODIuODYyLjI2OSAxLjk3MS4zOTIgMy4xNy4zOTIgMi41MDEgMCA1LjM4Ny0uNTMxIDcuMTk3LTEuMzcyIDIuMDMzLS45NDQgNS43MDItMy4yNjEgNS4wMzctNS4yNzR6TTYxLjggMjMuMTQ3Yy0uMDE5IDEuMTA4LS4xNzEgMi4xMTQtLjMzMyAzLjE2NC0uMTc0IDEuMTI5LS4zNTQgMi4yOTctLjM5OSAzLjcxNS0uMDQ1IDEuMzc5LjEyOCAyLjgxNC4yOTQgNC4yLjMzNyAyLjgwMS42ODIgNS42ODUtLjY1NSA4LjUzMWExMSAxMSAwIDAgMS0uNTkyLTEuMjE4Yy0uMTY2LS40MDMtLjUyNy0xLjA1LTEuMDI3LTEuOTQ2LTEuOTQ0LTMuNDg3LTYuNDk3LTExLjY1Mi00LjE2Ny0xNC45ODQuNjk0LS45OTIgMi40NTYtMi4wMTEgNi44NzktMS40NjN6TTU2LjQzOSA0LjM3NGM2LjQ4Mi4xNDMgMTEuNjA5IDIuNTY4IDE1LjI0IDcuMjA3IDIuNzg0IDMuNTU4LS4yODIgMTkuNzQ5LTkuMTU4IDMzLjcxNmwtLjI2OS0uMzM5LS4xMTItLjE0YzIuMjk0LTMuNzg4IDEuODQ1LTcuNTM2IDEuNDQ2LTEwLjg1OS0uMTY0LTEuMzY0LS4zMTktMi42NTItLjI4LTMuODYxLjA0MS0xLjI4My4yMS0yLjM4Mi4zNzQtMy40NDYuMjAyLTEuMzExLjQwNy0yLjY2Ny4zNS00LjI2NWExLjggMS44IDAgMCAwIC4wMzctLjYwMWMtLjE0NC0xLjUzMy0xLjg5NC02LjEyLTUuNDYyLTEwLjI3My0xLjk1MS0yLjI3MS00Ljc5Ny00LjgxMy04LjY4Mi02LjUyN2EyOS4zIDI5LjMgMCAwIDEgNi41MTUtLjYxMnpNMjAuMTY3IDUzLjI5OGMtMS43OTMgMi4xNTUtMy4wMzEgMS43NDItMy40MzggMS42MDctMi42NTMtLjg4NS01LjczLTYuNDkxLTguNDQ0LTE1LjM4Mi0yLjM0OC03LjY5My0zLjcyLTE1LjQyOC0zLjgyOS0xNy41OTctLjM0My02Ljg2IDEuMzItMTEuNjQxIDQuOTQzLTE0LjIxIDUuODk2LTQuMTgxIDE1LjU4OS0xLjY3OSAxOS40ODQtLjQwOWwtLjE3LjE2M2MtNi4zOTEgNi40NTUtNi4yNCAxNy40ODMtNi4yMjQgMTguMTU3YTIyIDIyIDAgMCAwIC4wNTEgMS4xMzVjLjExIDEuODU1LjMxNSA1LjMwNy0uMjMyIDkuMjE3LS41MDggMy42MzMuNjEyIDcuMTg5IDMuMDcyIDkuNzU2cS4zODMuMzk4Ljc5NS43NWExNjQgMTY0IDAgMCAwLTYuMDA4IDYuODE0em02LjgzLTkuMTEzYy0xLjk4My0yLjA2OS0yLjg4NC00Ljk0Ny0yLjQ3MS03Ljg5Ni41NzctNC4xMy4zNjQtNy43MjcuMjUtOS42NTlsLS4wMzktLjY5NGMuOTM0LS44MjggNS4yNjEtMy4xNDYgOC4zNDYtMi40MzkgMS40MDguMzIzIDIuMjY2IDEuMjgxIDIuNjIzIDIuOTMxIDEuODQ2IDguNTM5LjI0NCAxMi4wOTgtMS4wNDMgMTQuOTU3LS4yNjUuNTg5LS41MTYgMS4xNDYtLjczIDEuNzIybC0uMTY2LjQ0NWMtLjQyIDEuMTI2LS44MTEgMi4xNzMtMS4wNTMgMy4xNjctMi4xMDgtLjAwNi00LjE1OS0uOTA3LTUuNzE4LTIuNTM0em0uMzI0IDExLjUxNmE1IDUgMCAwIDEtMS40OTQtLjY0MmMuMjcxLS4xMjguNzU0LS4zMDEgMS41OTEtLjQ3NCA0LjA1Mi0uODM0IDQuNjc4LTEuNDIzIDYuMDQ1LTMuMTU4LjMxMy0uMzk4LjY2OS0uODQ5IDEuMTYtMS4zOTguNzMzLS44MjEgMS4wNjgtLjY4MiAxLjY3Ni0uNDMuNDkzLjIwNC45NzIuODIxIDEuMTY3IDEuNTAxLjA5Mi4zMjEuMTk1LjkzLS4xNDMgMS40MDQtMi44NTUgMy45OTctNy4wMTUgMy45NDYtMTAuMDAzIDMuMTk4em0yMS4yMDcgMTkuNzM1Yy00Ljk1NyAxLjA2Mi02LjcxMy0xLjQ2Ny03Ljg2OS00LjM1OS0uNzQ3LTEuODY3LTEuMTEzLTEwLjI4NS0uODUzLTE5LjU4MmExLjEgMS4xIDAgMCAwLS4wNDgtLjM1NiA1IDUgMCAwIDAtLjEzOS0uNjU3Yy0uMzg3LTEuMzUzLTEuMzMxLTIuNDg0LTIuNDYyLTIuOTUzLS40NS0uMTg2LTEuMjc1LS41MjgtMi4yNjctLjI3NC4yMTItLjg3MS41NzgtMS44NTUuOTc2LTIuOTIxbC4xNjctLjQ0OGMuMTg4LS41MDUuNDIzLTEuMDI5LjY3My0xLjU4MyAxLjM0Ny0yLjk5MiAzLjE5Mi03LjA5MSAxLjE5LTE2LjM1LS43NS0zLjQ2OC0zLjI1NC01LjE2MS03LjA1LTQuNzY4LTIuMjc2LjIzNS00LjM1OCAxLjE1NC01LjM5NiAxLjY4cS0uMzM0LjE2OS0uNjE4LjMyOWMuMjktMy40OTQgMS4zODUtMTAuMDI0IDUuNDgxLTE0LjE1NiAyLjU3OS0yLjYwMSA2LjAxNC0zLjg4NiAxMC4xOTktMy44MTcgOC4yNDYuMTM1IDEzLjUzNCA0LjM2NyAxNi41MTggNy44OTMgMi41NzEgMy4wMzkgMy45NjQgNi4xIDQuNTIgNy43NTEtNC4xNzktLjQyNS03LjAyMi40LTguNDYzIDIuNDYtMy4xMzUgNC40ODEgMS43MTUgMTMuMTc4IDQuMDQ2IDE3LjM1OC40MjcuNzY2Ljc5NiAxLjQyOC45MTIgMS43MDkuNzU5IDEuODM5IDEuNzQyIDMuMDY3IDIuNDU5IDMuOTY0LjIyLjI3NS40MzMuNTQxLjU5Ni43NzQtMS4yNjYuMzY1LTMuNTM5IDEuMjA4LTMuMzMyIDUuNDIyLS4xNjcgMi4xMTUtMS4zNTYgMTIuMDE2LTEuOTU5IDE1LjUxNC0uNzk3IDQuNjIxLTIuNDk3IDYuMzQzLTcuMjc5IDcuMzY4em0yMC42OTMtMjMuNjhjLTEuMjk0LjYwMS0zLjQ2IDEuMDUyLTUuNTE4IDEuMTQ4LTIuMjczLjEwNy0zLjQzLS4yNTUtMy43MDItLjQ3Ny0uMTI4LTIuNjI2Ljg1LTIuOTAxIDEuODg0LTMuMTkxLjE2My0uMDQ2LjMyMS0uMDkuNDc0LS4xNDRhNCA0IDAgMCAwIC4zMTMuMjNjMS44MjcgMS4yMDYgNS4wODUgMS4zMzYgOS42ODUuMzg2bC4wNS0uMDFjLS42Mi41OC0xLjY4MiAxLjM1OS0zLjE4NyAyLjA1OHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Postgres","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"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/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"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/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"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-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"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"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":49,"name":"AI Summarization"}],"image":[]}}