AutomationFlowsSocial Media › Detect Influencer Fraud with Instagram, X, TikTok

Detect Influencer Fraud with Instagram, X, TikTok

Original n8n title: Detect Influencer Fraud and Fake Followers with Instagram, X, Tiktok and Claude

ByOneclick AI Squad @oneclick-ai on n8n.io

Analyzes influencer profiles and scores authenticity before brand partnership approval. Detects fake followers, bot accounts, and suspicious engagement patterns using AI-powered behavioral analysis.

Webhook trigger★★★★☆ complexity11 nodesHTTP RequestEmail SendPostgres
Social Media Trigger: Webhook Nodes: 11 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #13708 — we link there as the canonical source.

This workflow follows the Emailsend → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "WemZJe4i3HbdVSwE",
  "meta": {
    "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
      ],
      "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": {
          "name": "<your credential>"
        }
      },
      "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
      ],
      "parameters": {
        "options": {},
        "subject": "={{ $json.executiveSummary.finalDecision }} - Influencer Fraud Report: @{{ $json.influencerProfile.username }}",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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": "## \ud83d\udee1\ufe0f 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## \ud83c\udfaf How It Works\n\n**Simple 7-Node Workflow:**\n1. **Input** \u2192 Submit influencer username and platform (Instagram/Twitter/TikTok)\n2. **Fetch** \u2192 Retrieve complete profile data and engagement metrics\n3. **Analyze** \u2192 Examine follower patterns, ratios, growth velocity, engagement\n4. **AI Check** \u2192 Deep behavioral analysis with Claude AI\n5. **Report** \u2192 Generate comprehensive fraud assessment\n6. **Notify** \u2192 Send detailed email report to partnership team\n7. **Log** \u2192 Save to database for tracking\n\n## \u2699\ufe0f 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## \ud83d\ude80 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 \u2192 Fetch Profile \u2192 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 \u2192 Generate Report \u2192 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,
  "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
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Analyzes influencer profiles and scores authenticity before brand partnership approval. Detects fake followers, bot accounts, and suspicious engagement patterns using AI-powered behavioral analysis.

Source: https://n8n.io/workflows/13708/ — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Social Media

TikTok Analytics Pull (tiktok-pull). Uses httpRequest, postgres. Scheduled trigger; 4 nodes.

HTTP Request, Postgres
Social Media

Automatically discovers trending topics in your niche and generates ready-to-use content ideas with AI. Twitter/X trending topics and hashtags Reddit hot posts from niche subreddits Google Trends dail

HTTP Request, Email Send, Slack +1
Social Media

Automatically collect and analyze your competitor’s YouTube performance. This workflow extracts video titles, views, likes, and descriptions from any YouTube channel and saves the data to Google Sheet

Form Trigger, HTTP Request, Google Sheets
Social Media

Tired of manually checking your YouTube Studio every day just to see how your channel is performing? This workflow is your solution.

HTTP Request, Telegram
Social Media

YouTube Analytics Pull (yt-data-api-pull). Uses youtube, postgres, telegram. Scheduled trigger; 5 nodes.

YouTube, Postgres, Telegram