{ "meta": { "instanceId": "workflow-e382e415", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:52.528136", "updatedAt": "2025-09-29T07:07:52.528163", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "nodes": [ { "id": "f59411f9-5dad-4f8c-af0c-c3ab25171107", "name": "Get recetn tweets", "type": "n8n-nodes-base.httpRequest", "position": [ 233.55908776779552, 1409.619212163096 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "options": { "batching": { "batch": { "batchSize": 1, "batchInterval": 2000 } } }, "sendQuery": true, "sendHeaders": true, "queryParameters": { "parameters": [ { "name": "limit", "value": "10" }, { "name": "user_id", "value": "={{ $json.twitter.id }}" }, { "name": "include_replies", "value": "={{ false }}" }, { "name": "include_pinned", "value": "={{ false }}" } ] }, "headerParameters": { "parameters": [ { "name": "X-RapidAPI-Host", "value": "twitter154.p.rapidapi.com" }, { "name": "X-RapidAPI-Key", "value": "={{ $('Setup').first().json.twitterAPIKey }}" } ] } }, "typeVersion": 4.1, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "c25d29ef-71bb-4ea1-8794-47911dac997f", "name": "Setup", "type": "n8n-nodes-base.set", "position": [ -440, 980 ], "parameters": { "fields": { "values": [ { "name": "linkedInAPIKey" }, { "name": "twitterAPIKey" }, { "name": "emails" } ] }, "options": {} }, "typeVersion": 3.2, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "5bf52838-157b-49fe-a4d8-3817198502dd", "name": "Every morning @ 7", "type": "n8n-nodes-base.scheduleTrigger", "position": [ -680, 980 ], "parameters": { "rule": { "interval": [ { "triggerAtHour": 7 } ] } }, "typeVersion": 1.1, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow." }, { "id": "aff4dd6e-a480-4f43-9b48-05172d4b7b2d", "name": "Get meetings for today", "type": "n8n-nodes-base.googleCalendar", "position": [ -80, 980 ], "parameters": { "options": { "timeMax": "={{ $now.endOf('day') }}", "timeMin": "={{ $now.beginningOf('day') }}", "singleEvents": true }, "calendar": { "__rl": true, "mode": "list", "value": "milorad.filipovic19@gmail.com", "cachedResultName": "milorad.filipovic19@gmail.com" }, "operation": "getAll" }, "typeVersion": 1, "notes": "This googleCalendar node performs automated tasks as part of the workflow." }, { "id": "63973273-3821-4c9f-8976-6dd47ac9a62e", "name": "Get attendees email domains", "type": "n8n-nodes-base.set", "position": [ 120, 980 ], "parameters": { "fields": { "values": [ { "name": "domain", "type": "arrayValue", "arrayValue": "={{ $json.attendees.filter(a => !a.organizer).map(a => a.email.split('@').pop()) }}" }, { "name": "attendeeEmails", "type": "arrayValue", "arrayValue": "={{ $json.attendees.filter(a => !a.organizer).map(a => a.email) }}" } ] }, "options": {} }, "typeVersion": 3.2, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "093b978f-8d5e-4051-be21-e8a7a3430c9c", "name": "Split Out", "type": "n8n-nodes-base.splitOut", "position": [ 300, 980 ], "parameters": { "include": "selectedOtherFields", "options": {}, "fieldToSplitOut": "domain", "fieldsToInclude": "attendeeEmails, start" }, "typeVersion": 1, "notes": "This splitOut node performs automated tasks as part of the workflow." }, { "id": "467308c9-c6a0-4d1c-a6e1-4598075e62a6", "name": "Get recent LinkedIn posts", "type": "n8n-nodes-base.httpRequest", "position": [ 233.55908776779552, 1209.619212163096 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "options": { "batching": { "batch": {} } }, "sendQuery": true, "sendHeaders": true, "queryParameters": { "parameters": [ { "name": "linkedin_url", "value": "={{ $env.WEBHOOK_URL }}{{ $json.linkedin.handle }}" }, { "name": "sort_by", "value": "recent" } ] }, "headerParameters": { "parameters": [ { "name": "X-RapidAPI-Key", "value": "={{ $('Setup').item.json.linkedInAPIKey }}" }, { "name": "X-RapidAPI-Host", "value": "fresh-linkedin-profile-data.p.rapidapi.com" } ] } }, "typeVersion": 4.1, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "71a9223b-4d71-4d0d-a4df-f8836d3c3d1f", "name": "Enrich attendee company", "type": "n8n-nodes-base.clearbit", "position": [ 640, 980 ], "parameters": { "domain": "={{ $json.domain }}", "additionalFields": {} }, "typeVersion": 1, "notes": "This clearbit node performs automated tasks as part of the workflow." }, { "id": "0fad8349-2a4f-4cee-a03e-98e8d95b015c", "name": "Gmail", "type": "n8n-nodes-base.gmail", "position": [ 1313.5590877677955, 1309.619212163096 ], "parameters": { "sendTo": "={{ $('Setup').first().json.emails }}", "message": "={{ $json.html }}", "options": {}, "subject": "=Latest social activity for: {{ $('Extract data for email').item.json.name }} " }, "credentials": { "gmailOAuth2": { "id": "{{ $credentials.gmailOAuth2.id }}", "name": "mrdosija@gmail.com" } }, "typeVersion": 2.1, "notes": "This gmail node performs automated tasks as part of the workflow." }, { "id": "bf667011-717e-4a5a-ac7d-c377edb063f8", "name": "Format LinkedIn Posts", "type": "n8n-nodes-base.code", "position": [ 453.5590877677955, 1209.619212163096 ], "parameters": { "mode": "runOnceForEachItem", "jsCode": "// console.log('LINKEDIN', $('Enrich attendee company').item.json.name.toLowerCase())\nconst company = $('Enrich attendee company').item.json.name.toLowerCase();\n\nlet html = `\n
\n \n

LinkedIn posts

\n
\n\n`;\nfor(article of $input.item.json.data.slice(0,10)) {\n html += `\n \n \n \n `\n}\nhtml += '
\n
\n ${article.text}\n
\n

\n ❤️ ${article.num_likes} | 💬 ${article.num_comments}\n

\n
';\n\nreturn { \n \"html_linkedin\": html,\n name: $('Switch').item.json.name,\n meeting: $('Split Out').item.json\n};" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "ee7ad92e-d4ed-4046-8d31-9c5ce4dda92b", "name": "Format Tweets", "type": "n8n-nodes-base.code", "position": [ 453.5590877677955, 1409.619212163096 ], "parameters": { "mode": "runOnceForEachItem", "jsCode": "const company = $('Enrich attendee company').item.json.name.toLowerCase();\nlet html = `\n
\n \n

Tweets

\n
\n`;\nfor(article of $input.item.json.results) {\n html += `\n \n \n \n `\n}\nhtml += '
\n
\n \n ${article.text}\n
\n

\n 🔄 ${article.retweet_count} | ❤️ ${article.favorite_count} | 💬 ${article.reply_count}\n

\n
';\n\nreturn { \n \"html_twitter\": html,\n name: $('Switch').item.json.name,\n meeting: $('Split Out').item.json\n};" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "0523a00c-e6d3-4158-a861-3bbdd1d6af24", "name": "Combine all activity for a company", "type": "n8n-nodes-base.merge", "position": [ 693.5590877677955, 1309.619212163096 ], "parameters": { "mode": "combine", "options": { "clashHandling": { "values": { "resolveClash": "preferInput2" } } }, "joinMode": "keepEverything", "mergeByFields": { "values": [ { "field1": "name", "field2": "name" } ] } }, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow." }, { "id": "f7f8a5fd-e768-4011-bdbb-cf41a617ce00", "name": "Extract data for email", "type": "n8n-nodes-base.set", "position": [ 873.5590877677955, 1309.619212163096 ], "parameters": { "fields": { "values": [ { "name": "attendeeEmail", "stringValue": "={{ $json.meeting.attendeeEmails.find(a => a.endsWith($json.meeting.domain)) }}" }, { "name": "startHour", "type": "numberValue", "numberValue": "={{ DateTime.fromISO($json.meeting.start.dateTime).hour }}" }, { "name": "startMinute", "type": "numberValue", "numberValue": "={{ DateTime.fromISO($json.meeting.start.dateTime).minute }}" } ] }, "include": "selected", "options": {}, "includeFields": "name, html_twitter, html_linkedin" }, "typeVersion": 3.2, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "679fb981-1774-4a3e-8aa4-0cef2f416ecb", "name": "Prepare email template", "type": "n8n-nodes-base.html", "position": [ 1093.5590877677955, 1309.619212163096 ], "parameters": { "html": "\n\n\n\n \n Social media activity for company: {{ $json.name }}\n\n\n
\n

\n 🗓️ Meeting with \n {{ $json.attendeeEmail }} \n at {{ $json.startHour }}:{{ $json.startMinute < 10 ? `0${$json.startMinute}` : $json.startMinute }}h\n

\n {{ $json.html_linkedin ?? ''}}\n {{ $json.html_twitter ?? ''}}\n
\n\n\n\n" }, "typeVersion": 1.1, "notes": "This html node performs automated tasks as part of the workflow." }, { "id": "8d08145c-9376-4933-8cb2-05babc855b7a", "name": "Switch", "type": "n8n-nodes-base.switch", "position": [ -6.440912232204482, 1309.619212163096 ], "parameters": { "rules": { "values": [ { "outputKey": "YOUR_CREDENTIAL_HERE", "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "operator": { "type": "boolean", "operation": "true", "singleValue": true }, "leftValue": "={{ $json.linkedin.handle !== null }}", "rightValue": "" } ] }, "renameOutput": true }, { "outputKey": "YOUR_CREDENTIAL_HERE", "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "bbb0310e-8b20-4bc6-a540-a4cd17470e28", "operator": { "type": "boolean", "operation": "true", "singleValue": true }, "leftValue": "={{ $json.twitter.id !== null }}", "rightValue": "" } ] }, "renameOutput": true } ] }, "options": { "allMatchingOutputs": true, "looseTypeValidation": false } }, "typeVersion": 3, "notes": "This switch node performs automated tasks as part of the workflow." }, { "id": "e4332ab1-5618-477c-9c0b-a2a01278036f", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ -520, 720 ], "parameters": { "color": 7, "width": 409.31582584657923, "height": 426.61520915049425, "content": "## Start here\n1️⃣ Register on [RapidAPI]({{ $env.API_BASE_URL }} and subscribe to these two APIs:\n- [Fresh LinkedIn Profile Data]({{ $env.API_BASE_URL }}\n- [Twitter]({{ $env.API_BASE_URL }}\n\n\n2️⃣ Set API keys for these two in `linkedInAPIKey` and `twitterAPIKey`fields of this node\n\n3️⃣ Set email addresses that should receive the list in the `emails` field of this node" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "2b7a7085-8e19-40a2-9910-6ad829433706", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ -220.44091223220448, 1289.619212163096 ], "parameters": { "color": 7, "width": 334.90628250854803, "height": 308.7389742148118, "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n💡 If you need to get activities from more social media accounts found by ClearBit, they can be added here, just make sure to process them properly in separate switch node branches" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "8f616351-c18d-460c-9d58-abe01c04e90b", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ 840, 560 ], "parameters": { "color": 5, "width": 738.9631933644362, "height": 717.2835666148258, "content": "### You will receive one email for every company in your calendar. These emails will look something like this:\n\n![hd]({{ $env.WEBHOOK_URL }}" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "dbd6c7df-d857-40e2-b1ba-cb1e68f9cb1a", "name": "Keep only ones with the domain", "type": "n8n-nodes-base.filter", "position": [ 460, 980 ], "parameters": { "options": {}, "conditions": { "options": { "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "881d891e-ea17-4879-a5cf-72d08b281f56", "operator": { "type": "string", "operation": "exists", "singleValue": true }, "leftValue": "={{ $json.domain }}", "rightValue": "" } ] } }, "typeVersion": 2, "notes": "This filter node performs automated tasks as part of the workflow." } ], "pinData": {}, "connections": { "f59411f9-5dad-4f8c-af0c-c3ab25171107": { "main": [ [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-d56463bb", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-5cbc17cf", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-29eab2c9", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-2bad84a0", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-17da130e", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-974cd633", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-ec43e2a7", "type": "main", "index": 0 } ], [ { "node": "error-handler-f59411f9-5dad-4f8c-af0c-c3ab25171107-cf314d02", "type": "main", "index": 0 } ] ] }, "467308c9-c6a0-4d1c-a6e1-4598075e62a6": { "main": [ [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-df359ab4", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-80b85698", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-cddabbb3", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-3ac13c7a", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-49feebfb", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-84249ad9", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-f9299cd4", "type": "main", "index": 0 } ], [ { "node": "error-handler-467308c9-c6a0-4d1c-a6e1-4598075e62a6-574528de", "type": "main", "index": 0 } ] ] }, "aff4dd6e-a480-4f43-9b48-05172d4b7b2d": { "main": [ [ { "node": "error-handler-aff4dd6e-a480-4f43-9b48-05172d4b7b2d-72d16094", "type": "main", "index": 0 } ] ] } }, "name": "Httprequest Workflow", "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "description": "Automated workflow: Httprequest Workflow. This workflow integrates 14 different services: stickyNote, httpRequest, filter, code, scheduleTrigger. It contains 24 nodes and follows best practices for error handling and security.", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "notes": "Excellent quality workflow: Httprequest Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }