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 →
{
"name": "Expertise Inflation Index (EII) - Full Pipeline",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "eii-analyze",
"options": {}
},
"id": "webhook-trigger",
"name": "Webhook Trigger",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
240,
300
]
},
{
"parameters": {
"url": "https://api.firecrawl.dev/v0/scrape",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "firecrawlApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{$env.FIRECRAWL_API_KEY}}"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "url",
"value": "={{$json.url}}"
},
{
"name": "formats",
"value": "[\"markdown\"]"
},
{
"name": "onlyMainContent",
"value": true
}
]
},
"options": {}
},
"id": "firecrawl-scrape",
"name": "Firecrawl Scrape",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
460,
300
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict"
},
"conditions": [
{
"id": "success-check",
"leftValue": "={{$json.success}}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "equal"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "check-scrape-success",
"name": "Check Scrape Success",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
680,
300
]
},
{
"parameters": {
"url": "https://api.openai.com/v1/chat/completions",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "openAiApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{$env.OPENAI_API_KEY}}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "model",
"value": "gpt-4"
},
{
"name": "messages",
"value": "=[{\"role\": \"user\", \"content\": \"{{$('Load EII Prompt').first().$json.prompt.replace('[INSERT ARTICLE TEXT HERE]', $json.data.markdown)}}\"}]"
},
{
"name": "temperature",
"value": 0.3
},
{
"name": "max_tokens",
"value": 1000
}
]
},
"options": {}
},
"id": "openai-analysis",
"name": "OpenAI Analysis",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
1120,
200
]
},
{
"parameters": {
"url": "https://api.anthropic.com/v1/messages",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "anthropicApi",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{$env.ANTHROPIC_API_KEY}}"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "anthropic-version",
"value": "2023-06-01"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "model",
"value": "claude-3-haiku-20240307"
},
{
"name": "max_tokens",
"value": 1000
},
{
"name": "temperature",
"value": 0.3
},
{
"name": "messages",
"value": "=[{\"role\": \"user\", \"content\": \"{{$('Load EII Prompt').first().$json.prompt.replace('[INSERT ARTICLE TEXT HERE]', $('Firecrawl Scrape').first().$json.data.markdown)}}\"}]"
}
]
},
"options": {}
},
"id": "anthropic-analysis",
"name": "Anthropic Analysis",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
1120,
400
]
},
{
"parameters": {
"jsCode": "// Load the EII scoring prompt\nconst fs = require('fs');\nconst path = require('path');\n\n// Read the prompt file\nconst promptPath = path.join(__dirname, '../prompts/score_prompt.txt');\nlet prompt;\n\ntry {\n prompt = fs.readFileSync(promptPath, 'utf8');\n} catch (error) {\n // Fallback prompt if file not found\n prompt = `You are an expert analyst tasked with evaluating articles for \"expertise inflation\" - the tendency for AI-related content to exhibit overconfidence, excessive jargon, and inflated claims of expertise.\n\nAnalyze the following article and score it on these five dimensions (1-10 scale):\n\n**CONFIDENCE INFLATION (1-10):**\n- 1-3: Humble, acknowledges limitations, uses hedging language\n- 4-6: Moderate confidence, some definitive statements but balanced\n- 7-8: High confidence, frequent definitive claims, minimal uncertainty\n- 9-10: Extreme overconfidence, absolute statements, dismisses alternatives\n\n**JARGON DENSITY (1-10):**\n- 1-3: Plain language, minimal technical terms, concepts well-explained\n- 4-6: Some technical language but accessible, good explanations\n- 7-8: Heavy jargon, buzzwords, assumes expert knowledge\n- 9-10: Incomprehensible jargon wall, buzzword bingo, obfuscating\n\n**SELF-REFERENCE/AUTHORITY (1-10):**\n- 1-3: Minimal self-promotion, cites others, collaborative tone\n- 4-6: Some personal expertise mentioned, balanced citations\n- 7-8: Frequent self-citation, emphasizes own authority/experience\n- 9-10: Extreme self-promotion, dismisses others, \"guru\" positioning\n\n**ORIGINALITY CLAIMS (1-10):**\n- 1-3: Builds on existing work, gives credit, incremental insights\n- 4-6: Some novel ideas mixed with established concepts\n- 7-8: Claims significant breakthroughs, overstates novelty\n- 9-10: Claims to have \"cracked the code\", revolutionary breakthrough\n\n**HUMOR/SELF-AWARENESS (1-10):**\n- 1-3: No humor, takes itself very seriously, lacks perspective\n- 4-6: Occasional light moments, some self-awareness\n- 7-8: Good humor, acknowledges absurdities, self-deprecating\n- 9-10: Satirical, highly self-aware, embraces the absurd\n\nReturn your analysis as a JSON object with this exact structure:\n\n{\n \"scores\": {\n \"confidence\": <1-10 integer>,\n \"jargon_density\": <1-10 integer>, \n \"self_reference\": <1-10 integer>,\n \"originality\": <1-10 integer>,\n \"humor_rating\": <1-10 integer>\n },\n \"analysis\": {\n \"overall_eii_score\": <calculated average of first 4 scores>,\n \"key_phrases\": [\"<notable overconfident phrase>\", \"<jargon example>\", \"<self-reference example>\"],\n \"tone_summary\": \"<2-3 sentence summary of the article's tone and approach>\",\n \"inflation_type\": \"<primary type: 'Technical Guru', 'Thought Leader', 'Breakthrough Claimer', 'Jargon Bomber', or 'Balanced'>\"\n }\n}\n\n---\n\nARTICLE TO ANALYZE:\n\n[INSERT ARTICLE TEXT HERE]`;\n}\n\nreturn [{ json: { prompt } }];"
},
"id": "load-eii-prompt",
"name": "Load EII Prompt",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
900,
300
]
},
{
"parameters": {
"jsCode": "// Parse LLM responses and prepare data for Supabase\nconst openaiResult = $('OpenAI Analysis').first();\nconst anthropicResult = $('Anthropic Analysis').first();\nconst originalUrl = $('Webhook Trigger').first().$json.url;\nconst scrapedData = $('Firecrawl Scrape').first().$json.data;\n\n// Extract JSON from OpenAI response\nlet openaiScores = null;\ntry {\n const openaiContent = openaiResult.$json.choices[0].message.content;\n const jsonStart = openaiContent.indexOf('{');\n const jsonEnd = openaiContent.lastIndexOf('}') + 1;\n if (jsonStart !== -1 && jsonEnd > jsonStart) {\n openaiScores = JSON.parse(openaiContent.substring(jsonStart, jsonEnd));\n }\n} catch (error) {\n console.log('Failed to parse OpenAI response:', error);\n}\n\n// Extract JSON from Anthropic response\nlet anthropicScores = null;\ntry {\n const anthropicContent = anthropicResult.$json.content[0].text;\n const jsonStart = anthropicContent.indexOf('{');\n const jsonEnd = anthropicContent.lastIndexOf('}') + 1;\n if (jsonStart !== -1 && jsonEnd > jsonStart) {\n anthropicScores = JSON.parse(anthropicContent.substring(jsonStart, jsonEnd));\n }\n} catch (error) {\n console.log('Failed to parse Anthropic response:', error);\n}\n\n// Use OpenAI as primary, Anthropic as fallback\nconst finalScores = openaiScores || anthropicScores;\n\nif (!finalScores) {\n throw new Error('Failed to parse any LLM response');\n}\n\n// Prepare article data for insertion\nconst articleData = {\n title: scrapedData.title || 'Untitled',\n source: new URL(originalUrl).hostname,\n url: originalUrl,\n author: scrapedData.author || null,\n content: scrapedData.markdown,\n published_at: scrapedData.publishedTime || new Date().toISOString(),\n scored_at: new Date().toISOString()\n};\n\n// Prepare scores data\nconst scoresData = {\n confidence: finalScores.scores.confidence,\n jargon_density: finalScores.scores.jargon_density,\n self_reference: finalScores.scores.self_reference,\n originality: finalScores.scores.originality,\n humor_rating: finalScores.scores.humor_rating,\n summary: JSON.stringify(finalScores.analysis)\n};\n\nreturn [{\n json: {\n article: articleData,\n scores: scoresData,\n analysis: finalScores.analysis,\n model_used: openaiScores ? 'gpt-4' : 'claude-3-haiku'\n }\n}];"
},
"id": "prepare-supabase-data",
"name": "Prepare Supabase Data",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1360,
300
]
},
{
"parameters": {
"url": "={{$env.SUPABASE_URL}}/rest/v1/articles",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{$env.SUPABASE_SERVICE_ROLE_KEY}}"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "apikey",
"value": "{{$env.SUPABASE_ANON_KEY}}"
},
{
"name": "Prefer",
"value": "return=representation"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "title",
"value": "={{$json.article.title}}"
},
{
"name": "source",
"value": "={{$json.article.source}}"
},
{
"name": "url",
"value": "={{$json.article.url}}"
},
{
"name": "author",
"value": "={{$json.article.author}}"
},
{
"name": "content",
"value": "={{$json.article.content}}"
},
{
"name": "published_at",
"value": "={{$json.article.published_at}}"
},
{
"name": "scored_at",
"value": "={{$json.article.scored_at}}"
}
]
},
"options": {}
},
"id": "insert-article",
"name": "Insert Article",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
1580,
200
]
},
{
"parameters": {
"url": "={{$env.SUPABASE_URL}}/rest/v1/scores",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer {{$env.SUPABASE_SERVICE_ROLE_KEY}}"
},
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "apikey",
"value": "={{$env.SUPABASE_ANON_KEY}}"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "article_id",
"value": "={{$('Insert Article').first().$json[0].id}}"
},
{
"name": "confidence",
"value": "={{$json.scores.confidence}}"
},
{
"name": "jargon_density",
"value": "={{$json.scores.jargon_density}}"
},
{
"name": "self_reference",
"value": "={{$json.scores.self_reference}}"
},
{
"name": "originality",
"value": "={{$json.scores.originality}}"
},
{
"name": "humor_rating",
"value": "={{$json.scores.humor_rating}}"
},
{
"name": "summary",
"value": "={{$json.scores.summary}}"
}
]
},
"options": {}
},
"id": "insert-scores",
"name": "Insert Scores",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.1,
"position": [
1580,
400
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={\n \"success\": true,\n \"message\": \"Article analyzed successfully\",\n \"data\": {\n \"url\": \"{{$json.article.url}}\",\n \"title\": \"{{$json.article.title}}\",\n \"eii_score\": {{$json.analysis.overall_eii_score}},\n \"scores\": {\n \"confidence\": {{$json.scores.confidence}},\n \"jargon_density\": {{$json.scores.jargon_density}},\n \"self_reference\": {{$json.scores.self_reference}},\n \"originality\": {{$json.scores.originality}},\n \"humor_rating\": {{$json.scores.humor_rating}}\n },\n \"analysis\": {\n \"tone_summary\": \"{{$json.analysis.tone_summary}}\",\n \"inflation_type\": \"{{$json.analysis.inflation_type}}\",\n \"key_phrases\": {{JSON.stringify($json.analysis.key_phrases)}}\n },\n \"model_used\": \"{{$json.model_used}}\"\n }\n}",
"options": {}
},
"id": "webhook-response",
"name": "Webhook Response",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
1800,
300
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={\n \"success\": false,\n \"error\": \"Failed to scrape article\",\n \"message\": \"Unable to extract content from the provided URL\",\n \"url\": \"{{$('Webhook Trigger').first().$json.url}}\"\n}",
"responseCode": 400,
"options": {}
},
"id": "error-response",
"name": "Error Response",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
680,
480
]
}
],
"connections": {
"Webhook Trigger": {
"main": [
[
{
"node": "Firecrawl Scrape",
"type": "main",
"index": 0
}
]
]
},
"Firecrawl Scrape": {
"main": [
[
{
"node": "Check Scrape Success",
"type": "main",
"index": 0
}
]
]
},
"Check Scrape Success": {
"main": [
[
{
"node": "Load EII Prompt",
"type": "main",
"index": 0
}
],
[
{
"node": "Error Response",
"type": "main",
"index": 0
}
]
]
},
"Load EII Prompt": {
"main": [
[
{
"node": "OpenAI Analysis",
"type": "main",
"index": 0
},
{
"node": "Anthropic Analysis",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Analysis": {
"main": [
[
{
"node": "Prepare Supabase Data",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Analysis": {
"main": [
[
{
"node": "Prepare Supabase Data",
"type": "main",
"index": 0
}
]
]
},
"Prepare Supabase Data": {
"main": [
[
{
"node": "Insert Article",
"type": "main",
"index": 0
},
{
"node": "Insert Scores",
"type": "main",
"index": 0
}
]
]
},
"Insert Article": {
"main": [
[
{
"node": "Webhook Response",
"type": "main",
"index": 0
}
]
]
},
"Insert Scores": {
"main": [
[
{
"node": "Webhook Response",
"type": "main",
"index": 0
}
]
]
}
},
"createdAt": "2025-07-18T14:00:00.000Z",
"updatedAt": "2025-07-18T14:00:00.000Z",
"settings": {
"executionOrder": "v1"
},
"staticData": null,
"tags": [
{
"createdAt": "2025-07-18T14:00:00.000Z",
"updatedAt": "2025-07-18T14:00:00.000Z",
"id": "eii-analysis",
"name": "EII Analysis"
}
],
"triggerCount": 0,
"versionId": "1"
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Expertise Inflation Index (EII) - Full Pipeline. Uses httpRequest. Webhook trigger; 11 nodes.
Source: https://github.com/dp-pcs/expertise-inflation-index/blob/c6c482e9183c1529db4920a563ee2c9aceac2289/n8n/eii_workflow.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This n8n template provides enterprise-level version control for your workflows using GitHub integration. Stop losing hours to broken workflows and manual exports – get proper commit history, visual di
This flow creates dummy files for every item added in your *Arrs (Radarr/Sonarr) with the tag .
This workflow acts as a central API gateway for all technical indicator agents in the Binance Spot Market Quant AI system. It listens for incoming webhook requests and dynamically routes them to the c
Sign PDF documents with legally-compliant digital signatures using X.509 certificates. Supports multiple PAdES signature levels (B, T, LT, LTA) with optional visible stamps.
📡 This workflow serves as the central Alpha Vantage API fetcher for Tesla trading indicators, delivering cleaned 20-point JSON outputs for three timeframes: , , and . It is required by the following a