[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: Sync KPI Metrics from ClickUp and Google Sheets to Slack and Gmail

[Assistant]
<thinking>
**Analyse du besoin**: Description

Automate daily KPI tracking and reporting by integrating ClickUp tasks and Google Sheets lead data into a unified dashboard. This workflow computes performance metrics, analyzes sentiment...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 10 nodes utilisant google, email, slack.
Structure: code personnalisé, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"id":"H39e9rSjzJIcbpt4","meta":{"instanceId":"8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177","templateCredsSetupCompleted":true},"name":"Sync KPI Metrics from ClickUp and Google Sheets to Slack and Gmail","tags":[],"nodes":[{"id":"a9ce4348-b49b-47b8-a723-72328fc7c928","name":"Error Trigger Handler","type":"n8n-nodes-base.errorTrigger","position":[-2720,96],"parameters":{},"typeVersion":1},{"id":"172f269d-41ce-4d11-8d2d-3442315a8d2d","name":"Slack - Send Error Alert","type":"n8n-nodes-base.slack","position":[-2496,96],"webhookId":"1abab466-eb85-4d88-a60d-c9028cff110b","parameters":{"text":"=⌠*KPI Dashboard Workflow Failed*\n\n*Error Details:*\n{{ $json.error?.message || 'Unknown error occurred' }}\n\n*Failed Node:* {{ $json.node?.name || 'Unknown node' }}\n*Execution ID:* {{ $execution.id }}\n*Timestamp:* {{ $now.format('YYYY-MM-DD HH:mm:ss') }}\n\n*Action Required:*\n1. Check execution logs in n8n\n2. Verify data source connections\n3. Review node configurations\n4. Restart workflow if needed\n\n_Automated alert from KPI Dashboard System_","select":"channel","channelId":{"__rl":true,"mode":"list","value":"YOUR_ALERTS_CHANNEL_ID","cachedResultName":"workflow-alerts"},"otherOptions":{}},"typeVersion":2},{"id":"d7e79592-f836-4053-b917-c741784a61dd","name":"Daily Cron Trigger","type":"n8n-nodes-base.cron","position":[-2672,-672],"parameters":{},"typeVersion":1},{"id":"9cad37f4-6719-439d-9652-5eeec89ad983","name":"ClickUp - Fetch Tasks","type":"n8n-nodes-base.clickUp","position":[-2448,-768],"parameters":{"list":"901611392518","team":"9016683627","limit":5,"space":"90162844741","folder":"90164394824","filters":{"subtasks":false},"operation":"getAll","returnAll":false,"authentication":"oAuth2"},"typeVersion":1},{"id":"d5bb389e-dc40-45ad-bd5e-7c59d9a536c9","name":"Google Sheets - Fetch Lead Data","type":"n8n-nodes-base.googleSheets","position":[-2448,-576],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":1856159589,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit#gid=1856159589","cachedResultName":"KPI Data"},"documentId":{"__rl":true,"mode":"list","value":"17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM","cachedResultUrl":"https://docs.google.com/spreadsheets/d/17rcNd_ZpUQLm0uWEVbD-NY6GyFUkrD4BglvawlyBygM/edit?usp=drivesdk","cachedResultName":"sample_leads_50"}},"typeVersion":3},{"id":"75c5f34a-d851-4eae-bff7-7289d608a03c","name":"Merge - Consolidate Datasets","type":"n8n-nodes-base.merge","position":[-2224,-672],"parameters":{},"typeVersion":1},{"id":"fa353353-2fd0-424a-a09a-639831c2dabc","name":"Code - Compute KPI Trends","type":"n8n-nodes-base.code","position":[-2000,-672],"parameters":{"jsCode":"// n8n Code Node - Compute KPI Trends\n// This code analyzes ClickUp tasks and lead data to generate KPIs\n\nconst items = $input.all();\nconst data = items.map(item => item.json);\n\n// Separate tasks and leads\nconst tasks = data.filter(item => item.id && item.id.startsWith('86d0'));\nconst leads = data.filter(item => item.leadId);\n\n// Initialize KPI object\nconst kpis = {\n  timestamp: new Date().toISOString(),\n  tasks: {},\n  leads: {},\n  overall: {}\n};\n\n// ===== TASK KPIs =====\nif (tasks.length > 0) {\n  // Status distribution\n  const statusCount = {};\n  const priorityCount = {};\n  const assigneeCount = {};\n  let totalTimeSpent = 0;\n  let tasksWithTime = 0;\n  let overdueTasks = 0;\n  const today = Date.now();\n\n  tasks.forEach(task => {\n    // Status counting\n    const status = task.status?.status || 'unknown';\n    statusCount[status] = (statusCount[status] || 0) + 1;\n\n    // Priority counting\n    const priority = task.priority?.priority || 'none';\n    priorityCount[priority] = (priorityCount[priority] || 0) + 1;\n\n    // Assignee counting\n    task.assignees?.forEach(assignee => {\n      assigneeCount[assignee.username] = (assigneeCount[assignee.username] || 0) + 1;\n    });\n\n    // Time tracking\n    if (task.time_spent) {\n      totalTimeSpent += task.time_spent;\n      tasksWithTime++;\n    }\n\n    // Overdue calculation\n    if (task.due_date && parseInt(task.due_date) < today && !task.date_done) {\n      overdueTasks++;\n    }\n  });\n\n  kpis.tasks = {\n    total: tasks.length,\n    byStatus: statusCount,\n    byPriority: priorityCount,\n    byAssignee: assigneeCount,\n    overdue: overdueTasks,\n    overduePercentage: ((overdueTasks / tasks.length) * 100).toFixed(2),\n    avgTimeSpent: tasksWithTime > 0 ? Math.round(totalTimeSpent / tasksWithTime) : 0,\n    avgTimeSpentHours: tasksWithTime > 0 ? (totalTimeSpent / tasksWithTime / 3600000).toFixed(2) : 0,\n    completion: {\n      done: statusCount['done'] || 0,\n      inProgress: statusCount['in progress'] || 0,\n      finalReview: statusCount['final review'] || 0,\n      backlogs: statusCount['backlogs'] || 0\n    }\n  };\n}\n\n// ===== LEAD KPIs =====\nif (leads.length > 0) {\n  const sourceCount = {};\n  const statusCount = {};\n  const responsesByDate = {};\n  let positiveResponses = 0;\n  let negativeResponses = 0;\n  let neutralResponses = 0;\n\n  // Keywords for sentiment analysis\n  const positiveKeywords = ['interested', 'love', 'promising', 'sounds interesting', 'count me in', 'yes', 'great'];\n  const negativeKeywords = ['not interested', 'not sure', 'concerns', 'difficult', 'already have'];\n\n  leads.forEach(lead => {\n    // Source counting\n    const source = lead.source || 'unknown';\n    sourceCount[source] = (sourceCount[source] || 0) + 1;\n\n    // Status counting\n    const status = lead.status || 'unknown';\n    statusCount[status] = (statusCount[status] || 0) + 1;\n\n    // Date grouping\n    const date = lead.replyDate || 'unknown';\n    responsesByDate[date] = (responsesByDate[date] || 0) + 1;\n\n    // Simple sentiment analysis\n    if (lead.reply) {\n      const replyLower = lead.reply.toLowerCase();\n      const hasPositive = positiveKeywords.some(kw => replyLower.includes(kw));\n      const hasNegative = negativeKeywords.some(kw => replyLower.includes(kw));\n\n      if (hasPositive && !hasNegative) {\n        positiveResponses++;\n      } else if (hasNegative && !hasPositive) {\n        negativeResponses++;\n      } else {\n        neutralResponses++;\n      }\n    }\n  });\n\n  kpis.leads = {\n    total: leads.length,\n    bySource: sourceCount,\n    byStatus: statusCount,\n    byDate: responsesByDate,\n    sentiment: {\n      positive: positiveResponses,\n      negative: negativeResponses,\n      neutral: neutralResponses,\n      positiveRate: ((positiveResponses / leads.length) * 100).toFixed(2),\n      negativeRate: ((negativeResponses / leads.length) * 100).toFixed(2)\n    },\n    topSources: Object.entries(sourceCount)\n      .sort((a, b) => b[1] - a[1])\n      .slice(0, 3)\n      .map(([source, count]) => ({ source, count }))\n  };\n}\n\n// ===== OVERALL KPIs =====\nkpis.overall = {\n  totalItems: data.length,\n  tasksCount: tasks.length,\n  leadsCount: leads.length,\n  dataQuality: {\n    tasksWithDueDate: tasks.filter(t => t.due_date).length,\n    tasksWithAssignees: tasks.filter(t => t.assignees?.length > 0).length,\n    leadsWithCompany: leads.filter(l => l.company).length,\n    leadsWithPhone: leads.filter(l => l.phone).length\n  }\n};\n\n// ===== TREND INDICATORS =====\nkpis.trends = {\n  taskTrend: tasks.length > 0 ? 'stable' : 'no data',\n  leadTrend: leads.length > 5 ? 'active' : 'low activity',\n  urgentTasks: tasks.filter(t => t.priority?.priority === 'urgent').length,\n  newReplies: leads.filter(l => l.status === 'New Reply').length\n};\n\n// Return as single item with comprehensive KPI data\nreturn [{ json: kpis }];"},"typeVersion":1},{"id":"414f7e49-df31-4690-950c-d7f451fc6014","name":"Set - Format Output Data","type":"n8n-nodes-base.set","position":[-1776,-672],"parameters":{"options":{},"assignments":{"assignments":[{"id":"dbb44ee9-0676-45ac-8c9e-e1ab1b801a6e","name":"tasks","type":"object","value":"={{ $json.tasks }}"},{"id":"63779c8a-c71e-4267-9ec0-22098ecabd28","name":"tasks.overdue","type":"number","value":"={{ $json.tasks.overdue }}"},{"id":"5d3f4a88-1526-4cb3-bc24-963efd1e50bf","name":"tasks.overduePercentage","type":"string","value":"={{ $json.tasks.overduePercentage }}"},{"id":"709e0406-4d96-49ab-b0d1-40e35bc876f1","name":"tasks.avgTimeSpent","type":"number","value":"={{ $json.tasks.avgTimeSpent }}"},{"id":"6aebe018-4dd6-4ca9-826a-8290c7b3c355","name":"tasks.avgTimeSpentHours","type":"string","value":"={{ $json.tasks.avgTimeSpentHours }}"},{"id":"c5912159-c328-4403-8e50-8ae94511d307","name":"tasks.completion","type":"object","value":"={{ $json.tasks.completion }}"},{"id":"0141ac77-5e6d-46f1-a8fe-8e781f33a632","name":"leads","type":"object","value":"={{ $json.leads }}"},{"id":"54567372-ce0a-4aa1-b163-aed6f0b1d8db","name":"leads.topSources","type":"array","value":"={{ $json.leads.topSources }}"},{"id":"6ea32021-40ad-454e-ad96-f905f8cf9967","name":"overall","type":"object","value":"={{ $json.overall }}"},{"id":"f77c2c65-3b7e-43f1-9bbe-71b7e60468ea","name":"trends","type":"object","value":"={{ $json.trends }}"}]}},"typeVersion":3.4},{"id":"5449a5fb-aa27-4280-8e2f-dc1333b4611f","name":"Slack - Post Dashboard Snapshot","type":"n8n-nodes-base.slack","position":[-1552,-768],"webhookId":"d987216d-dd09-4518-aacd-01fbda90908f","parameters":{"text":"=📊 *Daily KPI Dashboard Updated*\n\n*Task Metrics:*  \n• Total Task: {{ $json.tasks.total }}  \n• Overdue:  {{ $json.tasks.overdue }} ({{ $json.tasks.overduePercentage }}%)\n• Average Time Spent: {{ $json.tasks.avgTimeSpentHours }} hours\n\n*Lead Generation:*\n• Total: {{ $json.leads.total }} leads  \n• Positive Sentiment: {{ $json.leads.sentiment.positiveRate }}%\n• New Replies: {{ $json.trends.newReplies }}\n\n*Top Sources:*\n{{ Object.entries($json.leads.bySource).map(([source, count]) => `• ${source}: ${count}`).join('\\n') }}\n\n*Overall Status:*\n• Total Items: {{ $json.overall.totalItems }} \n• Tasks: {{ $json.overall.tasksCount }} | Leads: {{ $json.overall.leadsCount }}\n• Urgent Tasks: {{ $json.trends.urgentTasks }}\n\n_Report generated at {{ $now.format('HH:mm') }}_","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C09GNB90TED","cachedResultName":"general-information"},"otherOptions":{}},"typeVersion":2},{"id":"3853cf8a-ca5c-44e0-93d1-b31f6c222b10","name":"Gmail - Send KPI Report","type":"n8n-nodes-base.gmail","position":[-1552,-576],"webhookId":"ac83548d-967a-4ebc-b011-25668788c29c","parameters":{"sendTo":"={{ $env.REPORT_EMAIL || 'your-email@example.com' }}","message":"=<!DOCTYPE html>       <meta charset=\"UTF-8\">     <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">     <title>Daily KPI Report</title>

📊 Daily KPI Dashboard Report

Generated on {{ $now.format('MMMM DD, YYYY') }} at {{ $now.format('HH:mm:ss') }}

                 ✅                 Tasks Overview

Total Tasks

{{ $json.tasks.total }}

Overdue Tasks

{{ $json.tasks.overdue }}

{{ $json.tasks.overduePercentage }}% of total

Urgent Priority

{{ $json.trends.urgentTasks }}

Requires immediate attention

Avg Time Spent

{{ $json.tasks.avgTimeSpentHours }}

hours per task

                 TASK STATUS BREAKDOWN

In Progress

{{ $json.tasks.completion.inProgress }}

Final Review

{{ $json.tasks.completion.finalReview }}

Backlogs

{{ $json.tasks.completion.backlogs }}

Completed

{{ $json.tasks.completion.done }}

                 TASK DISTRIBUTION BY ASSIGNEE
                     {{ Object.entries($json.tasks.byAssignee).map(([name, count]) => `<div class=\"assignee-badge\">${name}: <strong>${count}</strong> task(s)</div>`).join('') }}

                 👥                 Leads Overview

Total Leads

{{ $json.leads.total }}

New Replies

{{ $json.trends.newReplies }}

Awaiting response

                 SENTIMENT ANALYSIS

😊

{{ $json.leads.sentiment.positive }}

Positive

{{ $json.leads.sentiment.positiveRate }}%

😐

{{ $json.leads.sentiment.neutral }}

Neutral

{{ (($json.leads.sentiment.neutral / $json.leads.total) * 100).toFixed(2) }}%

😟

{{ $json.leads.sentiment.negative }}

Negative

{{ $json.leads.sentiment.negativeRate }}%

                 TOP LEAD SOURCES
                     {{ Object.entries($json.leads.bySource).map(([source, count]) => `<div class=\"source-item\"><strong>${source}</strong><br>${count} lead(s)</div>`).join('') }}

                 REPLIES BY DATE
                     {{ Object.entries($json.leads.byDate).map(([date, count]) => `
                             ${date}                             ${count} replies
                     `).join('') }}

                 📈                 Trends & Insights

TASK TREND

                         {{ $json.trends.taskTrend }}                         {{ $json.trends.taskTrend }}

LEAD TREND

                         {{ $json.trends.leadTrend }}                         {{ $json.trends.leadTrend }}

                 💡 Key Insights:

You have {{ $json.tasks.overdue }} overdue tasks that need immediate attention

{{ $json.leads.sentiment.positiveRate }}% of leads show positive interest

Average task completion time: {{ $json.tasks.avgTimeSpentHours }} hours

{{ $json.trends.newReplies }} new lead replies to follow up on

This report was automatically generated by your KPI Dashboard System

For questions or support, please contact your system administrator

  ","options":{},"subject":"=Daily KPI Dashboard - {{ $now.format('MMMM DD, YYYY') }}"},"typeVersion":2}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Daily Cron Trigger":{"main":[[{"node":"Google Sheets - Fetch Lead Data","type":"main","index":0},{"node":"ClickUp - Fetch Tasks","type":"main","index":0}]]},"ClickUp - Fetch Tasks":{"main":[[{"node":"Merge - Consolidate Datasets","type":"main","index":0}]]},"Error Trigger Handler":{"main":[[{"node":"Slack - Send Error Alert","type":"main","index":0}]]},"Set - Format Output Data":{"main":[[{"node":"Slack - Post Dashboard Snapshot","type":"main","index":0},{"node":"Gmail - Send KPI Report","type":"main","index":0}]]},"Code - Compute KPI Trends":{"main":[[{"node":"Set - Format Output Data","type":"main","index":0}]]},"Merge - Consolidate Datasets":{"main":[[{"node":"Code - Compute KPI Trends","type":"main","index":0}]]},"Google Sheets - Fetch Lead Data":{"main":[[{"node":"Merge - Consolidate Datasets","type":"main","index":1}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Crée un workflow n8n pour: Who Is This For Marketing teams, social media managers, and brand strategists who want to understand competitor visual strategies across multiple platforms. Perfect for agencies managing multiple client accounts or brands looking to benchmark their visual content. What This Template Does This workflow automates competitive visual intelligence gathering across Instagram and TikTok using AI-powered image analysis: Collects recent posts from your account and up to 3 competitors via a simple form interface Routes content to appropriate Apify scrapers based on selected platforms Filters and processes image content from scraped posts Analyzes each image using GPT-4o Vision to extract color palettes, composition styles, mood/emotion, and text design elements Generates a comprehensive competitive

[Assistant]
<thinking>
**Analyse du besoin**: Who Is This For

Marketing teams, social media managers, and brand strategists who want to understand competitor visual strategies across multiple platforms. Perfect for agencies managing multiple cli...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 10 nodes utilisant google.
Structure: logique conditionnelle, code personnalisé, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"062f0e1ec3617ffb26cbc1b3c3518f28f3e57f08ddc210c471f532bb0bd6cf07","templateCredsSetupCompleted":true},"nodes":[{"id":"fa9f137e-b5e8-4a30-8320-f74f383bbd42","name":"Scrape Instagram Posts","type":"@apify/n8n-nodes-apify.apify","position":[496,624],"parameters":{"memory":2048,"actorId":{"__rl":true,"mode":"url","value":"https://console.apify.com/actors/shu8hvrXbJbY3Eb9W/input","__regex":"https://console.apify.com/actors/([a-zA-Z0-9]+).*"},"timeout":{},"operation":"Run actor and get dataset","customBody":"={{ {\n  \"directUrls\": [\n    \"https://www.instagram.com/\" + $('Workflow Configuration1').item.json[\"ownAccount\"] + \"/\",\n    \"https://www.instagram.com/\" + JSON.parse($('Workflow Configuration1').item.json.competitors)[0] + \"/\",\n    \"https://www.instagram.com/\" + JSON.parse($('Workflow Configuration1').item.json.competitors)[1] + \"/\"\n  ].filter(url => !url.includes(\"undefined\") && !url.includes(\"null\")),\n  \"resultsType\": \"posts\",\n  \"resultsLimit\": $('Workflow Configuration1').item.json.postsCount || 10\n} }}","authentication":"apifyOAuth2Api"},"typeVersion":1},{"id":"d2f7637e-8d91-465a-937d-ab94b2ce0ad0","name":"Scrape TikTok Posts","type":"@apify/n8n-nodes-apify.apify","position":[496,800],"parameters":{"memory":2048,"actorId":{"__rl":true,"mode":"list","value":"GdWCkxBtKWOsKjdch","cachedResultUrl":"https://console.apify.com/actors/GdWCkxBtKWOsKjdch/input","cachedResultName":"TikTok Scraper (clockworks/tiktok-scraper)"},"timeout":{},"operation":"Run actor and get dataset","customBody":"={{ {\n  \"profiles\": [\n    $('Workflow Configuration1').item.json.ownAccount,\n    JSON.parse($('Workflow Configuration1').item.json.competitors)[0],\n    JSON.parse($('Workflow Configuration1').item.json.competitors)[1]\n  ].filter(p => p),\n  \"resultsPerPage\": $('Workflow Configuration1').item.json.postsCount || 10,\n  \"shouldDownloadVideos\": false\n} }}","authentication":"apifyOAuth2Api"},"typeVersion":1},{"id":"9fc5651a-1546-40f6-83b6-45692162aeee","name":"Analyze Images with GPT-4o Vision","type":"n8n-nodes-base.code","position":[960,720],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Get OpenAI API key from Workflow Configuration node\nconst apiKey = $('Workflow Configuration1').item.json.openaiApiKey;\nconst imageUrl = $input.item.json.displayUrl || $input.item.json.coverUrl;\nconst accountName = $input.item.json.ownerUsername || $input.item.json.authorMeta?.name || 'unknown';\n\n// Detect platform based on data structure\nconst platform = $input.item.json.videoMeta ? 'TikTok' : 'Instagram';\n\n// Call OpenAI GPT-4o Vision API\nconst response = await this.helpers.httpRequest({\n  method: 'POST',\n  url: 'https://api.openai.com/v1/chat/completions',\n  headers: {\n    'Content-Type': 'application/json',\n    'Authorization': `Bearer ${apiKey}`\n  },\n  body: {\n    model: 'gpt-4o',\n    messages: [\n      {\n        role: 'user',\n        content: [\n          {\n            type: 'text',\n            text: 'Analyze this image and extract visual attributes in JSON format: color_palette (array of 3-5 dominant hex colors), composition_style (string), mood_emotion (string), text_design_elements (object with font_style, text_placement, text_content). Return only valid JSON.'\n          },\n          {\n            type: 'image_url',\n            image_url: {\n              url: imageUrl\n            }\n          }\n        ]\n      }\n    ],\n    max_tokens: 500\n  },\n  json: true\n});\n\n// Parse the AI response\nlet analysis;\ntry {\n  const content = response.choices[0].message.content;\n  const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n  if (jsonMatch) {\n    analysis = JSON.parse(jsonMatch[0]);\n  } else {\n    analysis = JSON.parse(content);\n  }\n} catch (error) {\n  analysis = {\n    color_palette: [],\n    composition_style: 'Unable to analyze',\n    mood_emotion: 'Unable to analyze',\n    text_design_elements: {}\n  };\n}\n\n// Return analyzed image with metadata\nreturn {\n  json: {\n    imageUrl: imageUrl,\n    accountName: accountName,\n    platform: platform,\n    colorPalette: analysis.color_palette || [],\n    compositionStyle: analysis.composition_style || '',\n    moodEmotion: analysis.mood_emotion || '',\n    textDesignElements: analysis.text_design_elements || {},\n    rawAnalysis: response.choices[0].message.content\n  }\n};"},"typeVersion":2},{"id":"e795ee95-1dc4-42aa-99d3-2a35ce7cd319","name":"Aggregate All Results","type":"n8n-nodes-base.aggregate","position":[1184,720],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"analysisResults"},"typeVersion":1},{"id":"17c3d793-9833-4f54-9224-857d848034e7","name":"Generate Competitive Analysis Report","type":"n8n-nodes-base.code","position":[1408,720],"parameters":{"jsCode":"// Generate Comprehensive Comparison Report using OpenAI\n\nconst items = $input.all();\nconst aggregatedData = items[0].json;\n\n// Get OpenAI API key from Workflow Configuration\nconst openaiApiKey = $('Workflow Configuration1').item.json.openaiApiKey;\n\nif (!openaiApiKey) {\n  throw new Error('OpenAI API key not found in Workflow Configuration');\n}\n\n// Prepare data summary for OpenAI prompt\nconst dataSummary = JSON.stringify(aggregatedData, null, 2);\n\n// Create comprehensive prompt for OpenAI\nconst prompt = `You are a social media visual content strategy expert. Analyze the following data from multiple social media platforms (Instagram, Pinterest, TikTok) and generate a comprehensive comparison report.\n\nData:\n${dataSummary}\n\nPlease provide a detailed report with the following sections:\n\n1. COMPETITIVE COMPARISON MATRIX\n   - Create a matrix showing visual patterns by account\n   - Compare color schemes, composition styles, content types\n   - Highlight top-performing visual elements per account\n\n2. PLATFORM-SPECIFIC WINNING PATTERNS\n   - Instagram: What visual patterns drive the most engagement?\n   - Pinterest: What visual styles get the most saves/repins?\n   - TikTok: What visual elements capture attention?\n\n3. CROSS-PLATFORM INSIGHTS AND TRENDS\n   - Common visual themes across all platforms\n   - Platform-specific vs universal visual strategies\n   - Emerging visual trends identified\n\n4. RECOMMENDED ACTIONS\n   - Specific actionable recommendations to improve visual content strategy\n   - Quick wins that can be implemented immediately\n   - Long-term strategic visual content improvements\n\nFormat the report in a clear, structured manner with headers and bullet points.`;\n\n// Call OpenAI API\nconst response = await this.helpers.httpRequest({\n  method: 'POST',\n  url: 'https://api.openai.com/v1/chat/completions',\n  headers: {\n    'Authorization': `Bearer ${openaiApiKey}`,\n    'Content-Type': 'application/json'\n  },\n  body: {\n    model: 'gpt-4',\n    messages: [\n      {\n        role: 'system',\n        content: 'You are a social media visual content strategy expert specializing in competitive analysis and actionable insights.'\n      },\n      {\n        role: 'user',\n        content: prompt\n      }\n    ],\n    temperature: 0.7,\n    max_tokens: 2500\n  },\n  json: true\n});\n\n// Extract the generated report\nconst report = response.choices[0].message.content;\n\n// Parse report into sections\nconst sections = {\n  fullReport: report,\n  competitiveMatrix: extractSection(report, 'COMPETITIVE COMPARISON MATRIX', 'PLATFORM-SPECIFIC WINNING PATTERNS'),\n  platformPatterns: extractSection(report, 'PLATFORM-SPECIFIC WINNING PATTERNS', 'CROSS-PLATFORM INSIGHTS'),\n  crossPlatformInsights: extractSection(report, 'CROSS-PLATFORM INSIGHTS', 'RECOMMENDED ACTIONS'),\n  recommendedActions: extractSection(report, 'RECOMMENDED ACTIONS', null),\n  generatedAt: new Date().toISOString(),\n  dataAnalyzed: {\n    totalAccounts: aggregatedData.totalAccounts || 0,\n    totalImages: aggregatedData.totalImages || 0,\n    platforms: aggregatedData.platforms || []\n  }\n};\n\n// Helper function to extract sections\nfunction extractSection(text, startMarker, endMarker) {\n  const startIndex = text.indexOf(startMarker);\n  if (startIndex === -1) return '';\n  \n  const contentStart = startIndex + startMarker.length;\n  \n  if (endMarker) {\n    const endIndex = text.indexOf(endMarker, contentStart);\n    if (endIndex === -1) return text.substring(contentStart).trim();\n    return text.substring(contentStart, endIndex).trim();\n  }\n  \n  return text.substring(contentStart).trim();\n}\n\n// Return formatted report with all sections\nreturn [{\n  json: sections\n}];"},"typeVersion":2},{"id":"907d303b-36c2-48e8-ac06-291d0de9313d","name":"Log Results to Google Sheets","type":"n8n-nodes-base.googleSheets","position":[1616,720],"parameters":{"columns":{"value":{"summary":"={{ $json.fullReport.substring(0, 500) }}","platforms":"={{ $('Workflow Configuration1').item.json.platforms }}","timestamp":"={{ $now.toISO() }}","competitors":"={{ $('Workflow Configuration1').item.json.competitors }}","own_account":"={{ $('Workflow Configuration1').item.json.ownAccount }}","posts_analyzed":"={{ $('Aggregate All Results').item.json.analysisResults.length }}"},"schema":[{"id":"timestamp","required":false,"displayName":"timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"own_account","required":false,"displayName":"own_account","defaultMatch":false,"canBeUsedToMatch":true},{"id":"competitors","required":false,"displayName":"competitors","defaultMatch":false,"canBeUsedToMatch":true},{"id":"platforms","required":false,"displayName":"platforms","defaultMatch":false,"canBeUsedToMatch":true},{"id":"posts_analyzed","required":false,"displayName":"posts_analyzed","defaultMatch":false,"canBeUsedToMatch":true},{"id":"summary","required":false,"displayName":"summary","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["timestamp"]},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.7},{"id":"f8bd3bbf-f924-49d2-b0c2-2b2536b30d97","name":"Form Trigger1","type":"n8n-nodes-base.formTrigger","position":[-160,720],"webhookId":"your-webhook-id","parameters":{"options":{"appendAttribution":false},"formTitle":"Cross-Platform Competitive Visual Intelligence","formFields":{"values":[{"fieldLabel":"Your Account/Hashtag","requiredField":true},{"fieldLabel":"Competitor 1 Account"},{"fieldLabel":"Competitor 2 Account"},{"fieldLabel":"Competitor 3 Account"},{"fieldType":"checkbox","fieldLabel":"Select Platforms","fieldOptions":{"values":[{"option":"Instagram"},{"option":"Pinterest"},{"option":"TikTok"}]},"requiredField":true},{"fieldType":"number","fieldLabel":"Number of Posts to Analyze","placeholder":"10","requiredField":true}]},"formDescription":"Analyze visual content from your brand and competitors across Instagram, Pinterest, and TikTok"},"typeVersion":2.3},{"id":"b61645e7-9be0-4791-ab99-c9cd3b5bcaca","name":"Workflow Configuration1","type":"n8n-nodes-base.set","position":[64,720],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"ownAccount","type":"string","value":"={{ $json[\"Your Account/Hashtag\"] }}"},{"id":"id-2","name":"competitors","type":"array","value":"={{ JSON.stringify([$json[\"Competitor 1 Account\"], $json[\"Competitor 2 Account\"], $json[\"Competitor 3 Account\"]].filter(c => c)) }}"},{"id":"id-3","name":"platforms","type":"array","value":"={{ $json['Select Platforms'] }}"},{"id":"id-4","name":"postsCount","type":"number","value":"={{ $json['Number of Posts to Analyze'] }}"},{"id":"id-5","name":"openaiApiKey","type":"string","value":"YOUR_OPENAI_API_KEY"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"23c3d08b-e38e-469f-ac24-7bcfdfdc9305","name":"Platform Router1","type":"n8n-nodes-base.switch","position":[288,704],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"42237866-d2cb-4b01-9447-d1d0ab6584b6","operator":{"type":"array","operation":"contains","rightType":"any"},"leftValue":"={{ $json['Select Platforms']}}","rightValue":"Instagram"}]},"renameOutput":true},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"98782347-1e0c-48c4-8232-00ccf1780f9f","operator":{"type":"array","operation":"contains","rightType":"any"},"leftValue":"={{ $json['Select Platforms']}}","rightValue":"TikTok"}]},"renameOutput":true}]},"options":{"ignoreCase":true,"fallbackOutput":"none","allMatchingOutputs":true},"looseTypeValidation":true},"typeVersion":3.3,"alwaysOutputData":true},{"id":"63607524-f0e1-459d-a18e-7000d8d3608d","name":"Filter Images Only1","type":"n8n-nodes-base.filter","position":[736,720],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"id-1","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.type }}","rightValue":"Image"},{"id":"id-2","operator":{"type":"string","operation":"notEmpty"},"leftValue":"={{ $json.displayUrl || $json.imageUrl }}"}]}},"typeVersion":2.2}],"connections":{"Form Trigger1":{"main":[[{"node":"Workflow Configuration1","type":"main","index":0}]]},"Platform Router1":{"main":[[{"node":"Scrape Instagram Posts","type":"main","index":0}],[{"node":"Scrape TikTok Posts","type":"main","index":0}]]},"Filter Images Only1":{"main":[[{"node":"Analyze Images with GPT-4o Vision","type":"main","index":0}]]},"Scrape TikTok Posts":{"main":[[{"node":"Filter Images Only1","type":"main","index":0}]]},"Aggregate All Results":{"main":[[{"node":"Generate Competitive Analysis Report","type":"main","index":0}]]},"Scrape Instagram Posts":{"main":[[{"node":"Filter Images Only1","type":"main","index":0}]]},"Workflow Configuration1":{"main":[[{"node":"Platform Router1","type":"main","index":0}]]},"Analyze Images with GPT-4o Vision":{"main":[[{"node":"Aggregate All Results","type":"main","index":0}]]},"Generate Competitive Analysis Report":{"main":[[{"node":"Log Results to Google Sheets","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: Analyze competitor visual content across Instagram and TikTok with GPT-4o Vision

[Assistant]
<thinking>
**Analyse du besoin**: Who Is This For

Marketing teams, social media managers, and brand strategists who want to understand competitor visual strategies across multiple platforms. Perfect for agencies managing multiple cli...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 10 nodes utilisant google.
Structure: logique conditionnelle, code personnalisé, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"062f0e1ec3617ffb26cbc1b3c3518f28f3e57f08ddc210c471f532bb0bd6cf07","templateCredsSetupCompleted":true},"nodes":[{"id":"fa9f137e-b5e8-4a30-8320-f74f383bbd42","name":"Scrape Instagram Posts","type":"@apify/n8n-nodes-apify.apify","position":[496,624],"parameters":{"memory":2048,"actorId":{"__rl":true,"mode":"url","value":"https://console.apify.com/actors/shu8hvrXbJbY3Eb9W/input","__regex":"https://console.apify.com/actors/([a-zA-Z0-9]+).*"},"timeout":{},"operation":"Run actor and get dataset","customBody":"={{ {\n  \"directUrls\": [\n    \"https://www.instagram.com/\" + $('Workflow Configuration1').item.json[\"ownAccount\"] + \"/\",\n    \"https://www.instagram.com/\" + JSON.parse($('Workflow Configuration1').item.json.competitors)[0] + \"/\",\n    \"https://www.instagram.com/\" + JSON.parse($('Workflow Configuration1').item.json.competitors)[1] + \"/\"\n  ].filter(url => !url.includes(\"undefined\") && !url.includes(\"null\")),\n  \"resultsType\": \"posts\",\n  \"resultsLimit\": $('Workflow Configuration1').item.json.postsCount || 10\n} }}","authentication":"apifyOAuth2Api"},"typeVersion":1},{"id":"d2f7637e-8d91-465a-937d-ab94b2ce0ad0","name":"Scrape TikTok Posts","type":"@apify/n8n-nodes-apify.apify","position":[496,800],"parameters":{"memory":2048,"actorId":{"__rl":true,"mode":"list","value":"GdWCkxBtKWOsKjdch","cachedResultUrl":"https://console.apify.com/actors/GdWCkxBtKWOsKjdch/input","cachedResultName":"TikTok Scraper (clockworks/tiktok-scraper)"},"timeout":{},"operation":"Run actor and get dataset","customBody":"={{ {\n  \"profiles\": [\n    $('Workflow Configuration1').item.json.ownAccount,\n    JSON.parse($('Workflow Configuration1').item.json.competitors)[0],\n    JSON.parse($('Workflow Configuration1').item.json.competitors)[1]\n  ].filter(p => p),\n  \"resultsPerPage\": $('Workflow Configuration1').item.json.postsCount || 10,\n  \"shouldDownloadVideos\": false\n} }}","authentication":"apifyOAuth2Api"},"typeVersion":1},{"id":"9fc5651a-1546-40f6-83b6-45692162aeee","name":"Analyze Images with GPT-4o Vision","type":"n8n-nodes-base.code","position":[960,720],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Get OpenAI API key from Workflow Configuration node\nconst apiKey = $('Workflow Configuration1').item.json.openaiApiKey;\nconst imageUrl = $input.item.json.displayUrl || $input.item.json.coverUrl;\nconst accountName = $input.item.json.ownerUsername || $input.item.json.authorMeta?.name || 'unknown';\n\n// Detect platform based on data structure\nconst platform = $input.item.json.videoMeta ? 'TikTok' : 'Instagram';\n\n// Call OpenAI GPT-4o Vision API\nconst response = await this.helpers.httpRequest({\n  method: 'POST',\n  url: 'https://api.openai.com/v1/chat/completions',\n  headers: {\n    'Content-Type': 'application/json',\n    'Authorization': `Bearer ${apiKey}`\n  },\n  body: {\n    model: 'gpt-4o',\n    messages: [\n      {\n        role: 'user',\n        content: [\n          {\n            type: 'text',\n            text: 'Analyze this image and extract visual attributes in JSON format: color_palette (array of 3-5 dominant hex colors), composition_style (string), mood_emotion (string), text_design_elements (object with font_style, text_placement, text_content). Return only valid JSON.'\n          },\n          {\n            type: 'image_url',\n            image_url: {\n              url: imageUrl\n            }\n          }\n        ]\n      }\n    ],\n    max_tokens: 500\n  },\n  json: true\n});\n\n// Parse the AI response\nlet analysis;\ntry {\n  const content = response.choices[0].message.content;\n  const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n  if (jsonMatch) {\n    analysis = JSON.parse(jsonMatch[0]);\n  } else {\n    analysis = JSON.parse(content);\n  }\n} catch (error) {\n  analysis = {\n    color_palette: [],\n    composition_style: 'Unable to analyze',\n    mood_emotion: 'Unable to analyze',\n    text_design_elements: {}\n  };\n}\n\n// Return analyzed image with metadata\nreturn {\n  json: {\n    imageUrl: imageUrl,\n    accountName: accountName,\n    platform: platform,\n    colorPalette: analysis.color_palette || [],\n    compositionStyle: analysis.composition_style || '',\n    moodEmotion: analysis.mood_emotion || '',\n    textDesignElements: analysis.text_design_elements || {},\n    rawAnalysis: response.choices[0].message.content\n  }\n};"},"typeVersion":2},{"id":"e795ee95-1dc4-42aa-99d3-2a35ce7cd319","name":"Aggregate All Results","type":"n8n-nodes-base.aggregate","position":[1184,720],"parameters":{"options":{},"aggregate":"aggregateAllItemData","destinationFieldName":"analysisResults"},"typeVersion":1},{"id":"17c3d793-9833-4f54-9224-857d848034e7","name":"Generate Competitive Analysis Report","type":"n8n-nodes-base.code","position":[1408,720],"parameters":{"jsCode":"// Generate Comprehensive Comparison Report using OpenAI\n\nconst items = $input.all();\nconst aggregatedData = items[0].json;\n\n// Get OpenAI API key from Workflow Configuration\nconst openaiApiKey = $('Workflow Configuration1').item.json.openaiApiKey;\n\nif (!openaiApiKey) {\n  throw new Error('OpenAI API key not found in Workflow Configuration');\n}\n\n// Prepare data summary for OpenAI prompt\nconst dataSummary = JSON.stringify(aggregatedData, null, 2);\n\n// Create comprehensive prompt for OpenAI\nconst prompt = `You are a social media visual content strategy expert. Analyze the following data from multiple social media platforms (Instagram, Pinterest, TikTok) and generate a comprehensive comparison report.\n\nData:\n${dataSummary}\n\nPlease provide a detailed report with the following sections:\n\n1. COMPETITIVE COMPARISON MATRIX\n   - Create a matrix showing visual patterns by account\n   - Compare color schemes, composition styles, content types\n   - Highlight top-performing visual elements per account\n\n2. PLATFORM-SPECIFIC WINNING PATTERNS\n   - Instagram: What visual patterns drive the most engagement?\n   - Pinterest: What visual styles get the most saves/repins?\n   - TikTok: What visual elements capture attention?\n\n3. CROSS-PLATFORM INSIGHTS AND TRENDS\n   - Common visual themes across all platforms\n   - Platform-specific vs universal visual strategies\n   - Emerging visual trends identified\n\n4. RECOMMENDED ACTIONS\n   - Specific actionable recommendations to improve visual content strategy\n   - Quick wins that can be implemented immediately\n   - Long-term strategic visual content improvements\n\nFormat the report in a clear, structured manner with headers and bullet points.`;\n\n// Call OpenAI API\nconst response = await this.helpers.httpRequest({\n  method: 'POST',\n  url: 'https://api.openai.com/v1/chat/completions',\n  headers: {\n    'Authorization': `Bearer ${openaiApiKey}`,\n    'Content-Type': 'application/json'\n  },\n  body: {\n    model: 'gpt-4',\n    messages: [\n      {\n        role: 'system',\n        content: 'You are a social media visual content strategy expert specializing in competitive analysis and actionable insights.'\n      },\n      {\n        role: 'user',\n        content: prompt\n      }\n    ],\n    temperature: 0.7,\n    max_tokens: 2500\n  },\n  json: true\n});\n\n// Extract the generated report\nconst report = response.choices[0].message.content;\n\n// Parse report into sections\nconst sections = {\n  fullReport: report,\n  competitiveMatrix: extractSection(report, 'COMPETITIVE COMPARISON MATRIX', 'PLATFORM-SPECIFIC WINNING PATTERNS'),\n  platformPatterns: extractSection(report, 'PLATFORM-SPECIFIC WINNING PATTERNS', 'CROSS-PLATFORM INSIGHTS'),\n  crossPlatformInsights: extractSection(report, 'CROSS-PLATFORM INSIGHTS', 'RECOMMENDED ACTIONS'),\n  recommendedActions: extractSection(report, 'RECOMMENDED ACTIONS', null),\n  generatedAt: new Date().toISOString(),\n  dataAnalyzed: {\n    totalAccounts: aggregatedData.totalAccounts || 0,\n    totalImages: aggregatedData.totalImages || 0,\n    platforms: aggregatedData.platforms || []\n  }\n};\n\n// Helper function to extract sections\nfunction extractSection(text, startMarker, endMarker) {\n  const startIndex = text.indexOf(startMarker);\n  if (startIndex === -1) return '';\n  \n  const contentStart = startIndex + startMarker.length;\n  \n  if (endMarker) {\n    const endIndex = text.indexOf(endMarker, contentStart);\n    if (endIndex === -1) return text.substring(contentStart).trim();\n    return text.substring(contentStart, endIndex).trim();\n  }\n  \n  return text.substring(contentStart).trim();\n}\n\n// Return formatted report with all sections\nreturn [{\n  json: sections\n}];"},"typeVersion":2},{"id":"907d303b-36c2-48e8-ac06-291d0de9313d","name":"Log Results to Google Sheets","type":"n8n-nodes-base.googleSheets","position":[1616,720],"parameters":{"columns":{"value":{"summary":"={{ $json.fullReport.substring(0, 500) }}","platforms":"={{ $('Workflow Configuration1').item.json.platforms }}","timestamp":"={{ $now.toISO() }}","competitors":"={{ $('Workflow Configuration1').item.json.competitors }}","own_account":"={{ $('Workflow Configuration1').item.json.ownAccount }}","posts_analyzed":"={{ $('Aggregate All Results').item.json.analysisResults.length }}"},"schema":[{"id":"timestamp","required":false,"displayName":"timestamp","defaultMatch":false,"canBeUsedToMatch":true},{"id":"own_account","required":false,"displayName":"own_account","defaultMatch":false,"canBeUsedToMatch":true},{"id":"competitors","required":false,"displayName":"competitors","defaultMatch":false,"canBeUsedToMatch":true},{"id":"platforms","required":false,"displayName":"platforms","defaultMatch":false,"canBeUsedToMatch":true},{"id":"posts_analyzed","required":false,"displayName":"posts_analyzed","defaultMatch":false,"canBeUsedToMatch":true},{"id":"summary","required":false,"displayName":"summary","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["timestamp"]},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultName":"Sheet1"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_GOOGLE_SHEET_ID"}},"typeVersion":4.7},{"id":"f8bd3bbf-f924-49d2-b0c2-2b2536b30d97","name":"Form Trigger1","type":"n8n-nodes-base.formTrigger","position":[-160,720],"webhookId":"your-webhook-id","parameters":{"options":{"appendAttribution":false},"formTitle":"Cross-Platform Competitive Visual Intelligence","formFields":{"values":[{"fieldLabel":"Your Account/Hashtag","requiredField":true},{"fieldLabel":"Competitor 1 Account"},{"fieldLabel":"Competitor 2 Account"},{"fieldLabel":"Competitor 3 Account"},{"fieldType":"checkbox","fieldLabel":"Select Platforms","fieldOptions":{"values":[{"option":"Instagram"},{"option":"Pinterest"},{"option":"TikTok"}]},"requiredField":true},{"fieldType":"number","fieldLabel":"Number of Posts to Analyze","placeholder":"10","requiredField":true}]},"formDescription":"Analyze visual content from your brand and competitors across Instagram, Pinterest, and TikTok"},"typeVersion":2.3},{"id":"b61645e7-9be0-4791-ab99-c9cd3b5bcaca","name":"Workflow Configuration1","type":"n8n-nodes-base.set","position":[64,720],"parameters":{"options":{},"assignments":{"assignments":[{"id":"id-1","name":"ownAccount","type":"string","value":"={{ $json[\"Your Account/Hashtag\"] }}"},{"id":"id-2","name":"competitors","type":"array","value":"={{ JSON.stringify([$json[\"Competitor 1 Account\"], $json[\"Competitor 2 Account\"], $json[\"Competitor 3 Account\"]].filter(c => c)) }}"},{"id":"id-3","name":"platforms","type":"array","value":"={{ $json['Select Platforms'] }}"},{"id":"id-4","name":"postsCount","type":"number","value":"={{ $json['Number of Posts to Analyze'] }}"},{"id":"id-5","name":"openaiApiKey","type":"string","value":"YOUR_OPENAI_API_KEY"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"23c3d08b-e38e-469f-ac24-7bcfdfdc9305","name":"Platform Router1","type":"n8n-nodes-base.switch","position":[288,704],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"42237866-d2cb-4b01-9447-d1d0ab6584b6","operator":{"type":"array","operation":"contains","rightType":"any"},"leftValue":"={{ $json['Select Platforms']}}","rightValue":"Instagram"}]},"renameOutput":true},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":false,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"98782347-1e0c-48c4-8232-00ccf1780f9f","operator":{"type":"array","operation":"contains","rightType":"any"},"leftValue":"={{ $json['Select Platforms']}}","rightValue":"TikTok"}]},"renameOutput":true}]},"options":{"ignoreCase":true,"fallbackOutput":"none","allMatchingOutputs":true},"looseTypeValidation":true},"typeVersion":3.3,"alwaysOutputData":true},{"id":"63607524-f0e1-459d-a18e-7000d8d3608d","name":"Filter Images Only1","type":"n8n-nodes-base.filter","position":[736,720],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"id-1","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.type }}","rightValue":"Image"},{"id":"id-2","operator":{"type":"string","operation":"notEmpty"},"leftValue":"={{ $json.displayUrl || $json.imageUrl }}"}]}},"typeVersion":2.2}],"connections":{"Form Trigger1":{"main":[[{"node":"Workflow Configuration1","type":"main","index":0}]]},"Platform Router1":{"main":[[{"node":"Scrape Instagram Posts","type":"main","index":0}],[{"node":"Scrape TikTok Posts","type":"main","index":0}]]},"Filter Images Only1":{"main":[[{"node":"Analyze Images with GPT-4o Vision","type":"main","index":0}]]},"Scrape TikTok Posts":{"main":[[{"node":"Filter Images Only1","type":"main","index":0}]]},"Aggregate All Results":{"main":[[{"node":"Generate Competitive Analysis Report","type":"main","index":0}]]},"Scrape Instagram Posts":{"main":[[{"node":"Filter Images Only1","type":"main","index":0}]]},"Workflow Configuration1":{"main":[[{"node":"Platform Router1","type":"main","index":0}]]},"Analyze Images with GPT-4o Vision":{"main":[[{"node":"Aggregate All Results","type":"main","index":0}]]},"Generate Competitive Analysis Report":{"main":[[{"node":"Log Results to Google Sheets","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Crée un workflow n8n pour: How It Works This sub-workflow uploads files to Dropbox and returns a direct download link: Upload file - Receives file from parent workflow and uploads to Dropbox Check for existing link - Queries Dropbox API to see if a shared link already exists for this file Create or reuse link - If no link exists, creates a new public shared link; otherwise uses existing one Convert to direct link - Transforms Dropbox's standard sharing URL (dropbox.com) into a direct download URL (dl.dropboxusercontent.com) Return URL - Outputs the final direct download link for use in other workflows Important: File names must be unique, or you'll get links to old files with the same name. Setup Steps Time estimate: ~25-30 minutes (first time) Create Dropbox app - Register at https://www.dropbox.com/developers/apps

[Assistant]
<thinking>
**Analyse du besoin**: How It Works
This sub-workflow uploads files to Dropbox and returns a direct download link:

Upload file - Receives file from parent workflow and uploads to Dropbox
Check for existing link - Queries D...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 14 nodes utilisant http.
Structure: logique conditionnelle, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"id":"McIM3fyCBUnCR97N","meta":{"instanceId":"42bde649da4575cc0d49afcf8affcdbece40e5e40061aa2c9b7a8b3639284dfe"},"name":"Released: [SUB] Dropbox upload links","tags":[],"nodes":[{"id":"50809acd-5528-44cf-b2d8-993cddae08a9","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-1568,-16],"parameters":{"inputSource":"passthrough"},"typeVersion":1.1},{"id":"eacbf743-344e-4ec7-8711-bbf3cbd28b27","name":"Normalize Path1","type":"n8n-nodes-base.set","position":[-1264,-16],"parameters":{"options":{}},"typeVersion":3},{"id":"9678708f-8a78-423b-8877-4cb98814fe37","name":"Dropbox: Create Shared Link","type":"n8n-nodes-base.httpRequest","position":[-432,144],"parameters":{"url":"https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings","method":"POST","options":{},"jsonBody":"={\n  \"path\": \"{{ $('Normalize Path1').item.json.path_lower }}\",\n  \"settings\": {\n    \"requested_visibility\": \"public\"\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $json.token }}"}]}},"typeVersion":4.2},{"id":"d873e83d-7d0e-4264-bf4e-93700ae3c88c","name":"If: Link Exists?","type":"n8n-nodes-base.if","position":[-688,-16],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"ce8a640e-90ae-4337-9110-0e23262a649c","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.links[0].url }}","rightValue":""}]}},"typeVersion":2},{"id":"ab00f2f0-5e52-4213-9ab1-4e03eb6a42b2","name":"Extract Existing Link","type":"n8n-nodes-base.set","position":[-832,-16],"parameters":{"options":{}},"typeVersion":3},{"id":"cb96c7eb-763d-4cd6-9198-bc7b54bf1f00","name":"Dropbox: List Shared Links","type":"n8n-nodes-base.httpRequest","position":[-992,-16],"parameters":{"url":"https://api.dropboxapi.com/2/sharing/list_shared_links","method":"POST","options":{},"jsonBody":"={\n  \"path\": \"{{ $json.path_lower }}\",\n  \"direct_only\": true\n}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"dropboxOAuth2Api"},"typeVersion":4.2},{"id":"108812a1-f6e4-4fb6-838f-d6c43d2e7ec2","name":"Rewrite Dropbox Host","type":"n8n-nodes-base.set","position":[-432,16],"parameters":{"options":{}},"typeVersion":3},{"id":"574020e5-9928-41c0-be49-a58033dd8b3b","name":"Build Direct Link","type":"n8n-nodes-base.set","position":[-272,16],"parameters":{"fields":{"values":[{"name":"shared_link_direct","stringValue":"={{ String($json.links[0].url || '').trim().replace(/^https:\\/\\/(?:www\\.)?dropbox\\.com\\//, 'https://dl.dropboxusercontent.com/') }}"}]},"include":"none","options":{}},"typeVersion":3},{"id":"4f2228ce-d31e-4a1a-bd55-c18d90851dc5","name":"Final Response","type":"n8n-nodes-base.set","position":[-112,16],"parameters":{"options":{},"assignments":{"assignments":[{"id":"success_response","name":"response","type":"string","value":"={{ $json.shared_link_direct }}"},{"id":"216b1279-56bc-45a5-9edd-3aeded1c516f","name":"url","type":"string","value":"={{ $json.shared_link_direct }}"}]}},"typeVersion":3.4},{"id":"2002c9c4-e6a6-4cd2-af23-bcfc0828d695","name":"Upload a file","type":"n8n-nodes-base.dropbox","position":[-1408,-16],"parameters":{"path":"=/Automate/N8N/host/{{ $json['Upload file'][0].filename }}","binaryData":true,"authentication":"oAuth2","binaryPropertyName":"=Upload_file"},"typeVersion":1},{"id":"3da92dc4-669e-42eb-846c-d4e77462742e","name":"Get DropBox access token","type":"n8n-nodes-base.dataTable","position":[-576,96],"parameters":{"operation":"get","dataTableId":{"__rl":true,"mode":"list","value":"hZbk3Yqoqdn3lIJ4","cachedResultUrl":"/projects/w1o5aCEZlpQzzMF5/datatables/hZbk3Yqoqdn3lIJ4","cachedResultName":"cred-Dropbox"}},"typeVersion":1},{"id":"107a77a9-c3c7-4d5b-9e8c-5ce85fc62a6d","name":"Upload File","type":"n8n-nodes-base.formTrigger","position":[-848,576],"webhookId":"dfc36d64-a5ed-49d7-952d-8287a1f26748","parameters":{"options":{},"formTitle":"Upload File To DropBox","formFields":{"values":[{"fieldType":"file","fieldLabel":"Upload file","requiredField":true}]}},"typeVersion":2.3},{"id":"c85db16f-40dd-4a64-8bf4-84e4b7d449a7","name":"Completed","type":"n8n-nodes-base.noOp","position":[-480,576],"parameters":{},"typeVersion":1},{"id":"7f00f7d0-bed1-4660-9e3d-5ed9284d7575","name":"Call '[SUB] Dropbox upload links'","type":"n8n-nodes-base.executeWorkflow","position":[-656,576],"parameters":{"options":{},"workflowId":{"__rl":true,"mode":"list","value":"DsRqr6QdhNM0TRaQ","cachedResultUrl":"/workflow/DsRqr6QdhNM0TRaQ","cachedResultName":"[SUB] Dropbox upload link"},"workflowInputs":{"value":{},"mappingMode":"defineBelow"}},"typeVersion":1.3}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Upload File":{"main":[[{"node":"Call '[SUB] Dropbox upload links'","type":"main","index":0}]]},"Upload a file":{"main":[[{"node":"Normalize Path1","type":"main","index":0}]]},"Normalize Path1":{"main":[[{"node":"Dropbox: List Shared Links","type":"main","index":0}]]},"If: Link Exists?":{"main":[[{"node":"Get DropBox access token","type":"main","index":0}],[{"node":"Rewrite Dropbox Host","type":"main","index":0}]]},"Build Direct Link":{"main":[[{"node":"Final Response","type":"main","index":0}]]},"Rewrite Dropbox Host":{"main":[[{"node":"Build Direct Link","type":"main","index":0}]]},"Extract Existing Link":{"main":[[{"node":"If: Link Exists?","type":"main","index":0}]]},"Get DropBox access token":{"main":[[{"node":"Dropbox: Create Shared Link","type":"main","index":0}]]},"Dropbox: List Shared Links":{"main":[[{"node":"Extract Existing Link","type":"main","index":0}]]},"Dropbox: Create Shared Link":{"main":[[{"node":"Dropbox: List Shared Links","type":"main","index":0}]]},"Call '[SUB] Dropbox upload links'":{"main":[[{"node":"Completed","type":"main","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Upload a file","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: Upload Files to Dropbox and Generate Direct Download Links

[Assistant]
<thinking>
**Analyse du besoin**: How It Works
This sub-workflow uploads files to Dropbox and returns a direct download link:

Upload file - Receives file from parent workflow and uploads to Dropbox
Check for existing link - Queries D...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 14 nodes utilisant http.
Structure: logique conditionnelle, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"id":"McIM3fyCBUnCR97N","meta":{"instanceId":"42bde649da4575cc0d49afcf8affcdbece40e5e40061aa2c9b7a8b3639284dfe"},"name":"Released: [SUB] Dropbox upload links","tags":[],"nodes":[{"id":"50809acd-5528-44cf-b2d8-993cddae08a9","name":"When Executed by Another Workflow","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-1568,-16],"parameters":{"inputSource":"passthrough"},"typeVersion":1.1},{"id":"eacbf743-344e-4ec7-8711-bbf3cbd28b27","name":"Normalize Path1","type":"n8n-nodes-base.set","position":[-1264,-16],"parameters":{"options":{}},"typeVersion":3},{"id":"9678708f-8a78-423b-8877-4cb98814fe37","name":"Dropbox: Create Shared Link","type":"n8n-nodes-base.httpRequest","position":[-432,144],"parameters":{"url":"https://api.dropboxapi.com/2/sharing/create_shared_link_with_settings","method":"POST","options":{},"jsonBody":"={\n  \"path\": \"{{ $('Normalize Path1').item.json.path_lower }}\",\n  \"settings\": {\n    \"requested_visibility\": \"public\"\n  }\n}\n","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $json.token }}"}]}},"typeVersion":4.2},{"id":"d873e83d-7d0e-4264-bf4e-93700ae3c88c","name":"If: Link Exists?","type":"n8n-nodes-base.if","position":[-688,-16],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"ce8a640e-90ae-4337-9110-0e23262a649c","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.links[0].url }}","rightValue":""}]}},"typeVersion":2},{"id":"ab00f2f0-5e52-4213-9ab1-4e03eb6a42b2","name":"Extract Existing Link","type":"n8n-nodes-base.set","position":[-832,-16],"parameters":{"options":{}},"typeVersion":3},{"id":"cb96c7eb-763d-4cd6-9198-bc7b54bf1f00","name":"Dropbox: List Shared Links","type":"n8n-nodes-base.httpRequest","position":[-992,-16],"parameters":{"url":"https://api.dropboxapi.com/2/sharing/list_shared_links","method":"POST","options":{},"jsonBody":"={\n  \"path\": \"{{ $json.path_lower }}\",\n  \"direct_only\": true\n}","sendBody":true,"specifyBody":"json","authentication":"predefinedCredentialType","nodeCredentialType":"dropboxOAuth2Api"},"typeVersion":4.2},{"id":"108812a1-f6e4-4fb6-838f-d6c43d2e7ec2","name":"Rewrite Dropbox Host","type":"n8n-nodes-base.set","position":[-432,16],"parameters":{"options":{}},"typeVersion":3},{"id":"574020e5-9928-41c0-be49-a58033dd8b3b","name":"Build Direct Link","type":"n8n-nodes-base.set","position":[-272,16],"parameters":{"fields":{"values":[{"name":"shared_link_direct","stringValue":"={{ String($json.links[0].url || '').trim().replace(/^https:\\/\\/(?:www\\.)?dropbox\\.com\\//, 'https://dl.dropboxusercontent.com/') }}"}]},"include":"none","options":{}},"typeVersion":3},{"id":"4f2228ce-d31e-4a1a-bd55-c18d90851dc5","name":"Final Response","type":"n8n-nodes-base.set","position":[-112,16],"parameters":{"options":{},"assignments":{"assignments":[{"id":"success_response","name":"response","type":"string","value":"={{ $json.shared_link_direct }}"},{"id":"216b1279-56bc-45a5-9edd-3aeded1c516f","name":"url","type":"string","value":"={{ $json.shared_link_direct }}"}]}},"typeVersion":3.4},{"id":"2002c9c4-e6a6-4cd2-af23-bcfc0828d695","name":"Upload a file","type":"n8n-nodes-base.dropbox","position":[-1408,-16],"parameters":{"path":"=/Automate/N8N/host/{{ $json['Upload file'][0].filename }}","binaryData":true,"authentication":"oAuth2","binaryPropertyName":"=Upload_file"},"typeVersion":1},{"id":"3da92dc4-669e-42eb-846c-d4e77462742e","name":"Get DropBox access token","type":"n8n-nodes-base.dataTable","position":[-576,96],"parameters":{"operation":"get","dataTableId":{"__rl":true,"mode":"list","value":"hZbk3Yqoqdn3lIJ4","cachedResultUrl":"/projects/w1o5aCEZlpQzzMF5/datatables/hZbk3Yqoqdn3lIJ4","cachedResultName":"cred-Dropbox"}},"typeVersion":1},{"id":"107a77a9-c3c7-4d5b-9e8c-5ce85fc62a6d","name":"Upload File","type":"n8n-nodes-base.formTrigger","position":[-848,576],"webhookId":"dfc36d64-a5ed-49d7-952d-8287a1f26748","parameters":{"options":{},"formTitle":"Upload File To DropBox","formFields":{"values":[{"fieldType":"file","fieldLabel":"Upload file","requiredField":true}]}},"typeVersion":2.3},{"id":"c85db16f-40dd-4a64-8bf4-84e4b7d449a7","name":"Completed","type":"n8n-nodes-base.noOp","position":[-480,576],"parameters":{},"typeVersion":1},{"id":"7f00f7d0-bed1-4660-9e3d-5ed9284d7575","name":"Call '[SUB] Dropbox upload links'","type":"n8n-nodes-base.executeWorkflow","position":[-656,576],"parameters":{"options":{},"workflowId":{"__rl":true,"mode":"list","value":"DsRqr6QdhNM0TRaQ","cachedResultUrl":"/workflow/DsRqr6QdhNM0TRaQ","cachedResultName":"[SUB] Dropbox upload link"},"workflowInputs":{"value":{},"mappingMode":"defineBelow"}},"typeVersion":1.3}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Upload File":{"main":[[{"node":"Call '[SUB] Dropbox upload links'","type":"main","index":0}]]},"Upload a file":{"main":[[{"node":"Normalize Path1","type":"main","index":0}]]},"Normalize Path1":{"main":[[{"node":"Dropbox: List Shared Links","type":"main","index":0}]]},"If: Link Exists?":{"main":[[{"node":"Get DropBox access token","type":"main","index":0}],[{"node":"Rewrite Dropbox Host","type":"main","index":0}]]},"Build Direct Link":{"main":[[{"node":"Final Response","type":"main","index":0}]]},"Rewrite Dropbox Host":{"main":[[{"node":"Build Direct Link","type":"main","index":0}]]},"Extract Existing Link":{"main":[[{"node":"If: Link Exists?","type":"main","index":0}]]},"Get DropBox access token":{"main":[[{"node":"Dropbox: Create Shared Link","type":"main","index":0}]]},"Dropbox: List Shared Links":{"main":[[{"node":"Extract Existing Link","type":"main","index":0}]]},"Dropbox: Create Shared Link":{"main":[[{"node":"Dropbox: List Shared Links","type":"main","index":0}]]},"Call '[SUB] Dropbox upload links'":{"main":[[{"node":"Completed","type":"main","index":0}]]},"When Executed by Another Workflow":{"main":[[{"node":"Upload a file","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Crée un workflow n8n pour: Overview This automated workflow fetches Upwork job postings using Apify, removes duplicate job listings via MongoDB, and sends new job opportunities to Slack. Key Features: Automated job retrieval from Upwork via Apify API Duplicate filtering using MongoDB to store only unique jobs Slack notifications for new job postings Runs every 20 minutes during working hours (9 AM - 5 PM) This workflow requires an active Apify subscription to function, as it uses the Apify Upwork API to fetch job listings. Who is This For? This workflow is ideal for: Freelancers looking to track Upwork jobs in real time Recruiters automating job collection for analytics Developers who want to integrate Upwork job data into their applications What Problem Does This Solve? Manually checking Upwork for jobs is time-con

[Assistant]
<thinking>
**Analyse du besoin**: Overview

This automated workflow fetches Upwork job postings using Apify, removes duplicate job listings via MongoDB, and sends new job opportunities to Slack.

Key Features:
Automated job retrieval ...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 8 nodes utilisant slack, http.
Structure: logique conditionnelle, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"2f9460831fcdb0e9a4494f0630367cfe2968282072e2d27c6ee6ab0a4c165a36","templateCredsSetupCompleted":true},"nodes":[{"id":"140f236c-8946-4ca8-b18f-0af99107b15c","name":"Assign parameters","type":"n8n-nodes-base.set","position":[300,80],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b836ba12-262a-4fed-a31d-9e2f6514137a","name":"startUrls","type":"array","value":"=[\n    {\n      \"url\": \"https://www.upwork.com/nx/search/jobs/?nbs=1&q=python\",\n      \"method\": \"GET\"\n    },\n{\n            \"url\": \"https://www.upwork.com/nx/search/jobs/?nbs=1&q=java\",\n            \"method\": \"GET\"\n        }\n  ]"},{"id":"5f7ba5cc-a8fc-4f67-9feb-6243d08462f9","name":"proxyCountryCode","type":"string","value":"FR"}]}},"typeVersion":3.4},{"id":"d1863b34-d35f-477c-bb94-8a77ff08b51d","name":"Query For Upwork Job Posts","type":"n8n-nodes-base.httpRequest","position":[520,80],"parameters":{"url":"=https://api.apify.com/v2/acts/arlusm~upwork-scraper-with-fresh-job-posts/run-sync-get-dataset-items","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"startUrls","value":"={{ $json.startUrls }}"},{"name":"proxyCountryCode","value":"={{ $json.proxyCountryCode }}"}]},"genericAuthType":"httpQueryAuth"},"typeVersion":4.2},{"id":"a923af43-f417-470c-af97-2a50dc0c0d79","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-100,80],"parameters":{"rule":{"interval":[{"field":"minutes","minutesInterval":10}]}},"typeVersion":1.2},{"id":"26322972-4ecd-4f8e-a1fc-81607a911c22","name":"If Working Hours","type":"n8n-nodes-base.if","position":[80,80],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"795a6d51-0ea0-4493-bc1e-a1807a2cbd77","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.Hour }}","rightValue":2},{"id":"f9ba101d-226d-4d6a-aab8-62229762a046","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $json.Hour }}","rightValue":15}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"d68cb363-df1f-4601-b194-c1dc044b0c6a","name":"Find Existing Entries","type":"n8n-nodes-base.mongoDb","position":[720,-40],"parameters":{"query":"={\n  \"title\": \"{{ $json.title }}\",\n  \"budget\": \"{{ $json.budget }}\"\n}\n","options":{},"collection":"n8n"},"typeVersion":1.1,"alwaysOutputData":false},{"id":"82a6a26a-9fd5-4ce5-986f-e0aeb0c43fcc","name":"Output New Entries","type":"n8n-nodes-base.merge","position":[940,80],"parameters":{"mode":"combine","options":{},"joinMode":"keepNonMatches","fieldsToMatchString":"title, budget"},"typeVersion":3},{"id":"361603e9-d173-42e2-a170-de08725ffd24","name":"Add New Entries To MongoDB","type":"n8n-nodes-base.mongoDb","position":[1160,-40],"parameters":{"fields":"title,link,paymentType,budget,projectLength,shortBio,skills,publishedDate,normalizedDate,searchUrl","options":{},"operation":"insert","collection":"n8n"},"typeVersion":1.1},{"id":"bc83acf0-b28b-48ff-bcb1-695404f30282","name":"Send message in #general","type":"n8n-nodes-base.slack","position":[1160,200],"webhookId":"7b8d0119-c115-4ed3-9d2d-ea8d58edfae6","parameters":{"text":"=Job Title : {{ $json.title }}\nPublished : {{ $json.publishedDate }}\nLink : {{ $json.link }}\nPayment Type: {{ $json.paymentType }}\nBudget: {{ $json.budget }}\nSkills: {{ $json.skills }}\nBio: {{ $json.shortBio }}","select":"channel","channelId":{"__rl":true,"mode":"name","value":"#general"},"otherOptions":{}},"typeVersion":2.3}],"connections":{"If Working Hours":{"main":[[{"node":"Assign parameters","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"If Working Hours","type":"main","index":0}]]},"Assign parameters":{"main":[[{"node":"Query For Upwork Job Posts","type":"main","index":0}]]},"Output New Entries":{"main":[[{"node":"Add New Entries To MongoDB","type":"main","index":0},{"node":"Send message in #general","type":"main","index":0}]]},"Find Existing Entries":{"main":[[{"node":"Output New Entries","type":"main","index":0}]]},"Query For Upwork Job Posts":{"main":[[{"node":"Find Existing Entries","type":"main","index":0},{"node":"Output New Entries","type":"main","index":1}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: Automated Upwork Job Alerts with MongoDB & Slack

[Assistant]
<thinking>
**Analyse du besoin**: Overview

This automated workflow fetches Upwork job postings using Apify, removes duplicate job listings via MongoDB, and sends new job opportunities to Slack.

Key Features:
Automated job retrieval ...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 8 nodes utilisant slack, http.
Structure: logique conditionnelle, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"2f9460831fcdb0e9a4494f0630367cfe2968282072e2d27c6ee6ab0a4c165a36","templateCredsSetupCompleted":true},"nodes":[{"id":"140f236c-8946-4ca8-b18f-0af99107b15c","name":"Assign parameters","type":"n8n-nodes-base.set","position":[300,80],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b836ba12-262a-4fed-a31d-9e2f6514137a","name":"startUrls","type":"array","value":"=[\n    {\n      \"url\": \"https://www.upwork.com/nx/search/jobs/?nbs=1&q=python\",\n      \"method\": \"GET\"\n    },\n{\n            \"url\": \"https://www.upwork.com/nx/search/jobs/?nbs=1&q=java\",\n            \"method\": \"GET\"\n        }\n  ]"},{"id":"5f7ba5cc-a8fc-4f67-9feb-6243d08462f9","name":"proxyCountryCode","type":"string","value":"FR"}]}},"typeVersion":3.4},{"id":"d1863b34-d35f-477c-bb94-8a77ff08b51d","name":"Query For Upwork Job Posts","type":"n8n-nodes-base.httpRequest","position":[520,80],"parameters":{"url":"=https://api.apify.com/v2/acts/arlusm~upwork-scraper-with-fresh-job-posts/run-sync-get-dataset-items","method":"POST","options":{},"sendBody":true,"authentication":"genericCredentialType","bodyParameters":{"parameters":[{"name":"startUrls","value":"={{ $json.startUrls }}"},{"name":"proxyCountryCode","value":"={{ $json.proxyCountryCode }}"}]},"genericAuthType":"httpQueryAuth"},"typeVersion":4.2},{"id":"a923af43-f417-470c-af97-2a50dc0c0d79","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-100,80],"parameters":{"rule":{"interval":[{"field":"minutes","minutesInterval":10}]}},"typeVersion":1.2},{"id":"26322972-4ecd-4f8e-a1fc-81607a911c22","name":"If Working Hours","type":"n8n-nodes-base.if","position":[80,80],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"795a6d51-0ea0-4493-bc1e-a1807a2cbd77","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.Hour }}","rightValue":2},{"id":"f9ba101d-226d-4d6a-aab8-62229762a046","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $json.Hour }}","rightValue":15}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"d68cb363-df1f-4601-b194-c1dc044b0c6a","name":"Find Existing Entries","type":"n8n-nodes-base.mongoDb","position":[720,-40],"parameters":{"query":"={\n  \"title\": \"{{ $json.title }}\",\n  \"budget\": \"{{ $json.budget }}\"\n}\n","options":{},"collection":"n8n"},"typeVersion":1.1,"alwaysOutputData":false},{"id":"82a6a26a-9fd5-4ce5-986f-e0aeb0c43fcc","name":"Output New Entries","type":"n8n-nodes-base.merge","position":[940,80],"parameters":{"mode":"combine","options":{},"joinMode":"keepNonMatches","fieldsToMatchString":"title, budget"},"typeVersion":3},{"id":"361603e9-d173-42e2-a170-de08725ffd24","name":"Add New Entries To MongoDB","type":"n8n-nodes-base.mongoDb","position":[1160,-40],"parameters":{"fields":"title,link,paymentType,budget,projectLength,shortBio,skills,publishedDate,normalizedDate,searchUrl","options":{},"operation":"insert","collection":"n8n"},"typeVersion":1.1},{"id":"bc83acf0-b28b-48ff-bcb1-695404f30282","name":"Send message in #general","type":"n8n-nodes-base.slack","position":[1160,200],"webhookId":"7b8d0119-c115-4ed3-9d2d-ea8d58edfae6","parameters":{"text":"=Job Title : {{ $json.title }}\nPublished : {{ $json.publishedDate }}\nLink : {{ $json.link }}\nPayment Type: {{ $json.paymentType }}\nBudget: {{ $json.budget }}\nSkills: {{ $json.skills }}\nBio: {{ $json.shortBio }}","select":"channel","channelId":{"__rl":true,"mode":"name","value":"#general"},"otherOptions":{}},"typeVersion":2.3}],"connections":{"If Working Hours":{"main":[[{"node":"Assign parameters","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"If Working Hours","type":"main","index":0}]]},"Assign parameters":{"main":[[{"node":"Query For Upwork Job Posts","type":"main","index":0}]]},"Output New Entries":{"main":[[{"node":"Add New Entries To MongoDB","type":"main","index":0},{"node":"Send message in #general","type":"main","index":0}]]},"Find Existing Entries":{"main":[[{"node":"Output New Entries","type":"main","index":0}]]},"Query For Upwork Job Posts":{"main":[[{"node":"Find Existing Entries","type":"main","index":0},{"node":"Output New Entries","type":"main","index":1}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Crée un workflow n8n pour: Task: Create a simple API endpoint using the Webhook and Respond to Webhook nodes Why: You can prototype or replace a backend process with a single workflow Main use cases: Replace backend logic with a workflow

[Assistant]
<thinking>
**Analyse du besoin**: Task:
Create a simple API endpoint using the Webhook and Respond to Webhook nodes

Why:
You can prototype or replace a backend process with a single workflow

Main use cases:
Replace backend logic wit...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 3 nodes utilisant nodes natifs.
Structure: flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"8c8c5237b8e37b006a7adce87f4369350c58e41f3ca9de16196d3197f69eabcd"},"nodes":[{"id":"f80aceed-b676-42aa-bf25-f7a44408b1bc","name":"Webhook","type":"n8n-nodes-base.webhook","position":[375,115],"webhookId":"6f7b288e-1efe-4504-a6fd-660931327269","parameters":{"path":"6f7b288e-1efe-4504-a6fd-660931327269","options":{},"responseMode":"responseNode"},"typeVersion":1},{"id":"9c36dae5-0700-450c-9739-e9f3eff31bfe","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[815,115],"parameters":{"options":{},"respondWith":"text","responseBody":"=The URL of the Google search query for the term \"{{$node[\"Webhook\"].json[\"query\"][\"first_name\"]}} {{$node[\"Webhook\"].json[\"query\"][\"last_name\"]}}\" is: {{$json[\"product\"]}}"},"typeVersion":1},{"id":"5a228fcb-78b9-4a28-95d2-d7c9fdf1d4ea","name":"Create URL string","type":"n8n-nodes-base.set","position":[595,115],"parameters":{"values":{"string":[{"name":"product","value":"=https://www.google.com/search?q={{$json[\"query\"][\"first_name\"]}}+{{$json[\"query\"][\"last_name\"]}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1}],"connections":{"Webhook":{"main":[[{"node":"Create URL string","type":"main","index":0}]]},"Create URL string":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: Creating an API endpoint

[Assistant]
<thinking>
**Analyse du besoin**: Task:
Create a simple API endpoint using the Webhook and Respond to Webhook nodes

Why:
You can prototype or replace a backend process with a single workflow

Main use cases:
Replace backend logic wit...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 3 nodes utilisant nodes natifs.
Structure: flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"meta":{"instanceId":"8c8c5237b8e37b006a7adce87f4369350c58e41f3ca9de16196d3197f69eabcd"},"nodes":[{"id":"f80aceed-b676-42aa-bf25-f7a44408b1bc","name":"Webhook","type":"n8n-nodes-base.webhook","position":[375,115],"webhookId":"6f7b288e-1efe-4504-a6fd-660931327269","parameters":{"path":"6f7b288e-1efe-4504-a6fd-660931327269","options":{},"responseMode":"responseNode"},"typeVersion":1},{"id":"9c36dae5-0700-450c-9739-e9f3eff31bfe","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[815,115],"parameters":{"options":{},"respondWith":"text","responseBody":"=The URL of the Google search query for the term \"{{$node[\"Webhook\"].json[\"query\"][\"first_name\"]}} {{$node[\"Webhook\"].json[\"query\"][\"last_name\"]}}\" is: {{$json[\"product\"]}}"},"typeVersion":1},{"id":"5a228fcb-78b9-4a28-95d2-d7c9fdf1d4ea","name":"Create URL string","type":"n8n-nodes-base.set","position":[595,115],"parameters":{"values":{"string":[{"name":"product","value":"=https://www.google.com/search?q={{$json[\"query\"][\"first_name\"]}}+{{$json[\"query\"][\"last_name\"]}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1}],"connections":{"Webhook":{"main":[[{"node":"Create URL string","type":"main","index":0}]]},"Create URL string":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Crée un workflow n8n pour: Trump-o-meter: Extract and Evaluate Truth Social Posts Use Case Automatically extracting posts from Donald Trump's Truth Social account and estimating their potential impact on the U.S. stock market enables teams to monitor high-profile communications that may influence financial markets. This automation streamlines intelligence gathering for analysts, traders, and policy observers. What This Automation Does This automation retrieves up to 3 posts from Donald Trump's Truth Social profile and outputs structured information including: Author name Image URL Post text Post URL Estimated stock market impact: Direction: positive, negative, or neutral Magnitude: None, Small, Medium, Large How It Works Creates a browser session on Truth Social using an Airtop profile. Navigates to https://truthsoc

[Assistant]
<thinking>
**Analyse du besoin**: Trump-o-meter: Extract and Evaluate Truth Social Posts
Use Case

Automatically extracting posts from Donald Trump's Truth Social account and estimating their potential impact on the U.S. stock market ...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 9 nodes utilisant slack.
Structure: traitement par lots, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"id":"puzC1akjHG3456ue","meta":{"instanceId":"28a947b92b197fc2524eaba16e57560338657b2b0b5796300b2f1cedc1d0d355","templateCredsSetupCompleted":true},"name":"Trump-o-meter Template","tags":[],"nodes":[{"id":"238f0e0a-71ca-4434-b481-da683df58312","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-440,-380],"parameters":{},"typeVersion":1},{"id":"e8c37340-3fb4-4f4c-841e-7eade92e3c75","name":"Filter","type":"n8n-nodes-base.filter","position":[660,-380],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"409837cd-d016-4473-9c6d-84f8c7483fb0","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $json.post_text }}","rightValue":"None"},{"id":"08272483-deba-4d06-a66c-c50cfabb710f","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.stock_market_impact.magnitude }}","rightValue":"None"}]}},"typeVersion":2.2},{"id":"aa96b4a4-b93c-4e01-82f7-672d853b41f0","name":"Slack","type":"n8n-nodes-base.slack","position":[880,-380],"webhookId":"d2351a3b-b7a9-44d6-ba2a-8b0444773945","parameters":{"text":"={{ $json.post_text }}\n\nPotential impact on the stock market: {{ $json.stock_market_impact.magnitude }}, {{ $json.stock_market_impact.direction }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08E83RDJN9","cachedResultName":"n8n-debug"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"2752a716-65ad-45cc-a373-fa001713b172","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[440,-380],"parameters":{"options":{},"fieldToSplitOut":"output.posts"},"typeVersion":1},{"id":"84cd624a-39f0-4318-8277-5b708814057b","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-440,-180],"parameters":{"rule":{"interval":[{"field":"weeks"}]}},"typeVersion":1.2},{"id":"39dd927f-d163-4d55-896b-73051714c9d0","name":"Extract and Analyze Posts","type":"n8n-nodes-base.airtop","position":[220,-280],"parameters":{"prompt":"This is Truth Social. \nExtract up to 6 posts from @realDonaldTrump. \nFor each post, extract the name of the author, the image URL, the text and the URL.\n\nAlso try to estimate the potential impact of each post on the public stock market in the US:\nDirection - positive, negative, or neutral\nMagnitude - None, Small, Medium or Large","resource":"extraction","additionalFields":{"outputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"posts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"author_name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the author of the post.\"\n          },\n          \"image_url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the image associated with the post.\"\n          },\n          \"post_text\": {\n            \"type\": \"string\",\n            \"description\": \"The text content of the post.\"\n          },\n          \"post_url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the post.\"\n          },\n          \"stock_market_impact\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"direction\": {\n                \"type\": \"string\",\n                \"description\": \"The estimated direction of the post's impact on the US stock market.\"\n              },\n              \"magnitude\": {\n                \"type\": \"string\",\n                \"description\": \"The estimated magnitude of the post's impact on the US stock market.\"\n              }\n            },\n            \"required\": [\n              \"direction\",\n              \"magnitude\"\n            ],\n            \"additionalProperties\": false\n          }\n        },\n        \"required\": [\n          \"author_name\",\n          \"image_url\",\n          \"post_text\",\n          \"post_url\",\n          \"stock_market_impact\"\n        ],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\n    \"posts\"\n  ],\n  \"additionalProperties\": false,\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n}","parseJsonOutput":true}},"typeVersion":1},{"id":"3da92d0a-c837-4625-8b56-669dd79b88ba","name":"Create Airtop Session","type":"n8n-nodes-base.airtop","position":[-220,-280],"parameters":{"proxy":"integrated","profileName":"ENTER AIRTOP PROFILE NAME","proxyConfig":{"sticky":true,"country":"US"},"additionalFields":{}},"typeVersion":1},{"id":"03bca384-9f71-449f-9662-415b7582bfa8","name":"Create Airtop Browser","type":"n8n-nodes-base.airtop","position":[0,-280],"parameters":{"url":"https://truthsocial.com/@realDonaldTrump","resource":"window","additionalFields":{"waitUntil":"load"}},"typeVersion":1},{"id":"44dcc003-1804-45df-bf62-d819b58026d3","name":"Terminate Airtop Session","type":"n8n-nodes-base.airtop","position":[440,-180],"parameters":{"operation":"terminate","sessionId":"={{ $('Create Airtop Session').item.json.sessionId }}"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Slack":{"main":[[]]},"Filter":{"main":[[{"node":"Slack","type":"main","index":0}]]},"Split Out":{"main":[[{"node":"Filter","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Create Airtop Session","type":"main","index":0}]]},"Create Airtop Browser":{"main":[[{"node":"Extract and Analyze Posts","type":"main","index":0}]]},"Create Airtop Session":{"main":[[{"node":"Create Airtop Browser","type":"main","index":0}]]},"Extract and Analyze Posts":{"main":[[{"node":"Split Out","type":"main","index":0},{"node":"Terminate Airtop Session","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Create Airtop Session","type":"main","index":0}]]}}}


[System]
Tu es un expert n8n. Crée des workflows JSON complets et fonctionnels.
Utilise <thinking> pour expliquer ton raisonnement avant de générer le JSON.
Structure ton thinking: analyse du besoin, choix du trigger, architecture, flux de données, points d'attention.

[User] Génère un workflow n8n: Extract and Analyze Truth Social Posts for Stock Market Impact with Airtop & Slack

[Assistant]
<thinking>
**Analyse du besoin**: Trump-o-meter: Extract and Evaluate Truth Social Posts
Use Case

Automatically extracting posts from Donald Trump's Truth Social account and estimating their potential impact on the U.S. stock market ...

**Choix du trigger**: Sélection basée sur le cas d'usage décrit.

**Architecture**: 9 nodes utilisant slack.
Structure: traitement par lots, flux standard.

**Flux de données**: Connexions définies entre les nodes pour assurer le passage des données.

**Points d'attention**: Vérifier les credentials, tester chaque node individuellement.
</thinking>

{"id":"puzC1akjHG3456ue","meta":{"instanceId":"28a947b92b197fc2524eaba16e57560338657b2b0b5796300b2f1cedc1d0d355","templateCredsSetupCompleted":true},"name":"Trump-o-meter Template","tags":[],"nodes":[{"id":"238f0e0a-71ca-4434-b481-da683df58312","name":"When clicking ‘Execute workflow’","type":"n8n-nodes-base.manualTrigger","position":[-440,-380],"parameters":{},"typeVersion":1},{"id":"e8c37340-3fb4-4f4c-841e-7eade92e3c75","name":"Filter","type":"n8n-nodes-base.filter","position":[660,-380],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"409837cd-d016-4473-9c6d-84f8c7483fb0","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $json.post_text }}","rightValue":"None"},{"id":"08272483-deba-4d06-a66c-c50cfabb710f","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.stock_market_impact.magnitude }}","rightValue":"None"}]}},"typeVersion":2.2},{"id":"aa96b4a4-b93c-4e01-82f7-672d853b41f0","name":"Slack","type":"n8n-nodes-base.slack","position":[880,-380],"webhookId":"d2351a3b-b7a9-44d6-ba2a-8b0444773945","parameters":{"text":"={{ $json.post_text }}\n\nPotential impact on the stock market: {{ $json.stock_market_impact.magnitude }}, {{ $json.stock_market_impact.direction }}","select":"channel","channelId":{"__rl":true,"mode":"list","value":"C08E83RDJN9","cachedResultName":"n8n-debug"},"otherOptions":{},"authentication":"oAuth2"},"typeVersion":2.3},{"id":"2752a716-65ad-45cc-a373-fa001713b172","name":"Split Out","type":"n8n-nodes-base.splitOut","position":[440,-380],"parameters":{"options":{},"fieldToSplitOut":"output.posts"},"typeVersion":1},{"id":"84cd624a-39f0-4318-8277-5b708814057b","name":"Schedule Trigger","type":"n8n-nodes-base.scheduleTrigger","position":[-440,-180],"parameters":{"rule":{"interval":[{"field":"weeks"}]}},"typeVersion":1.2},{"id":"39dd927f-d163-4d55-896b-73051714c9d0","name":"Extract and Analyze Posts","type":"n8n-nodes-base.airtop","position":[220,-280],"parameters":{"prompt":"This is Truth Social. \nExtract up to 6 posts from @realDonaldTrump. \nFor each post, extract the name of the author, the image URL, the text and the URL.\n\nAlso try to estimate the potential impact of each post on the public stock market in the US:\nDirection - positive, negative, or neutral\nMagnitude - None, Small, Medium or Large","resource":"extraction","additionalFields":{"outputSchema":"{\n  \"type\": \"object\",\n  \"properties\": {\n    \"posts\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"author_name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the author of the post.\"\n          },\n          \"image_url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the image associated with the post.\"\n          },\n          \"post_text\": {\n            \"type\": \"string\",\n            \"description\": \"The text content of the post.\"\n          },\n          \"post_url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL of the post.\"\n          },\n          \"stock_market_impact\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"direction\": {\n                \"type\": \"string\",\n                \"description\": \"The estimated direction of the post's impact on the US stock market.\"\n              },\n              \"magnitude\": {\n                \"type\": \"string\",\n                \"description\": \"The estimated magnitude of the post's impact on the US stock market.\"\n              }\n            },\n            \"required\": [\n              \"direction\",\n              \"magnitude\"\n            ],\n            \"additionalProperties\": false\n          }\n        },\n        \"required\": [\n          \"author_name\",\n          \"image_url\",\n          \"post_text\",\n          \"post_url\",\n          \"stock_market_impact\"\n        ],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\n    \"posts\"\n  ],\n  \"additionalProperties\": false,\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\"\n}","parseJsonOutput":true}},"typeVersion":1},{"id":"3da92d0a-c837-4625-8b56-669dd79b88ba","name":"Create Airtop Session","type":"n8n-nodes-base.airtop","position":[-220,-280],"parameters":{"proxy":"integrated","profileName":"ENTER AIRTOP PROFILE NAME","proxyConfig":{"sticky":true,"country":"US"},"additionalFields":{}},"typeVersion":1},{"id":"03bca384-9f71-449f-9662-415b7582bfa8","name":"Create Airtop Browser","type":"n8n-nodes-base.airtop","position":[0,-280],"parameters":{"url":"https://truthsocial.com/@realDonaldTrump","resource":"window","additionalFields":{"waitUntil":"load"}},"typeVersion":1},{"id":"44dcc003-1804-45df-bf62-d819b58026d3","name":"Terminate Airtop Session","type":"n8n-nodes-base.airtop","position":[440,-180],"parameters":{"operation":"terminate","sessionId":"={{ $('Create Airtop Session').item.json.sessionId }}"},"typeVersion":1}],"active":false,"settings":{"executionOrder":"v1"},"connections":{"Slack":{"main":[[]]},"Filter":{"main":[[{"node":"Slack","type":"main","index":0}]]},"Split Out":{"main":[[{"node":"Filter","type":"main","index":0}]]},"Schedule Trigger":{"main":[[{"node":"Create Airtop Session","type":"main","index":0}]]},"Create Airtop Browser":{"main":[[{"node":"Extract and Analyze Posts","type":"main","index":0}]]},"Create Airtop Session":{"main":[[{"node":"Create Airtop Browser","type":"main","index":0}]]},"Extract and Analyze Posts":{"main":[[{"node":"Split Out","type":"main","index":0},{"node":"Terminate Airtop Session","type":"main","index":0}]]},"When clicking ‘Execute workflow’":{"main":[[{"node":"Create Airtop Session","type":"main","index":0}]]}}}