AutomationFlowsEmail & Gmail › Httprequest Workflow (http Request) #2

Httprequest Workflow (http Request) #2

Httprequest Workflow. Uses httpRequest, googleCalendar, clearbit, gmail. Scheduled trigger; 19 nodes.

Cron / scheduled trigger★★★★☆ complexity19 nodesHTTP RequestGoogle CalendarClearbitGmail
Email & Gmail Trigger: Cron / scheduled Nodes: 19 Complexity: ★★★★☆ Added:
Httprequest Workflow (http Request) #2 — n8n workflow card showing HTTP Request, Google Calendar, Clearbit integration

This workflow follows the Gmail → Google Calendar recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

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

Download .json
{
  "meta": {
    "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": "you@example.com",
          "cachedResultName": "you@example.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": {
          "name": "<your credential>"
        }
      },
      "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<div style=\"display: flex; align-items: center; margin: 2em 0 1em\">\n  <img src=\"{{ $env.WEBHOOK_URL }}\" style=\"width: 20px; height: 20px; margin-right: 10px\" />\n  <h3 style=\"margin: 0\">LinkedIn posts</h3>\n</div>\n<table style=\"width: 100%\">\n`;\nfor(article of $input.item.json.data.slice(0,10)) {\n  html += `\n    <tr>\n      <td style=\"background-color: #f7f9fc; font-family: sans-serif; padding: 0.3em 1em\">\n        <div>\n          <a style=\"display: block; color: #000; text-decoration: none; margin-bottom: 5px; font-size: 1.1em\" href=\"${article.url}\"><i>${article.text}</i></a>\n        </div>\n        <p style=\"margin: 0; font-size: 0.8em\">\n          <span title=\"Likes\">\u2764\ufe0f ${article.num_likes}</span> | <span title=\"Comments\">\ud83d\udcac ${article.num_comments}</span>\n        </p>\n      </td>\n    </tr>\n  `\n}\nhtml += '</table>';\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<div style=\"display: flex; align-items: center; margin: 2em 0 1em\">\n  <img src=\"{{ $env.WEBHOOK_URL }}\" style=\"width: 20px; height: 20px; margin-right: 10px\" />\n  <h3 style=\"margin: 0\">Tweets</h3>\n</div>\n<table style=\"width: 100%\">`;\nfor(article of $input.item.json.results) {\n  html += `\n    <tr>\n      <td style=\"background-color: #f7f9fc; font-family: sans-serif; padding: 0.3em 1em\">\n        <div>\n          <a style=\"display: block; color: #000; text-decoration: none; margin-bottom: 5px; font-size: 1.1em\" href=\"{{ $env.WEBHOOK_URL }}{article.user.username}/status/${article.tweet_id}\">\n          <i>${article.text}</i></a>\n        </div>\n        <p style=\"margin: 0; font-size: 0.8em\">\n          <span title=\"Retweets\">\ud83d\udd04 ${article.retweet_count}</span> | <span title=\"Favorites\">\u2764\ufe0f ${article.favorite_count}</span> | <span title=\"Replies\">\ud83d\udcac ${article.reply_count}</span>\n        </p>\n      </td>\n    </tr>\n  `\n}\nhtml += '</table>';\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": "<!DOCTYPE html>\n\n<html>\n<head>\n  <meta charset=\"UTF-8\" />\n  <title>Social media activity for company: {{ $json.name }}</title>\n</head>\n<body>\n  <div class=\"container\">\n     <h2 style=\"font-size: 1.2em\">\n      \ud83d\uddd3\ufe0f Meeting with \n       <span>{{ $json.attendeeEmail }}</span> \n       at {{ $json.startHour }}:{{ $json.startMinute < 10 ? `0${$json.startMinute}` : $json.startMinute }}h\n    </h2>\n    {{ $json.html_linkedin ?? ''}}\n    {{ $json.html_twitter  ?? ''}}\n  </div>\n</body>\n</html>\n\n<style>\n.container {\n  font-family: sans-serif;\n}\n</style>"
      },
      "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\ufe0f\u20e3 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\ufe0f\u20e3 Set API keys for these two in `linkedInAPIKey` and `twitterAPIKey`fields of this node\n\n3\ufe0f\u20e3 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\ud83d\udca1 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."
    }
  ],
  "connections": {
    "Get recetn tweets": {
      "main": [
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        []
      ]
    },
    "Get recent LinkedIn posts": {
      "main": [
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        [],
        []
      ]
    },
    "Get meetings for today": {
      "main": [
        []
      ]
    }
  },
  "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.",
  "notes": "Excellent quality workflow: Httprequest Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation.",
  "id": "wfaa2e701cb0c0"
}

Credentials you'll need

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

Pro

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

About this workflow

Httprequest Workflow. Uses httpRequest, googleCalendar, clearbit, gmail. Scheduled trigger; 19 nodes.

Source: https://github.com/basictechorg/n8n-productivity/blob/main/workflows/email-automation/0428_Splitout_GoogleCalendar_Send_Webhook.json — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

Splitout Googlecalendar. Uses httpRequest, scheduleTrigger, googleCalendar, splitOut. Scheduled trigger; 19 nodes.

HTTP Request, Google Calendar, Clearbit +1
Email & Gmail

It’s very important to come prepared to Sales calls. This often means a lot of manual research about the person you’re calling with. This workflow delivers the latest social media activity (LinkedIn +

HTTP Request, Google Calendar, Clearbit +1
Email & Gmail

Splitout Googlecalendar. Uses scheduleTrigger, googleCalendar, splitOut, httpRequest. Scheduled trigger; 21 nodes.

Google Calendar, HTTP Request, Clearbit +2
Email & Gmail

HVACFlow - Smart HVAC Service Management System copy. Uses mongoDb, gmail, twilio, googleCalendar. Scheduled trigger; 42 nodes.

MongoDB, Gmail, Twilio +3
Email & Gmail

This workflow is designed for sales teams and business development managers who use Pipedrive to track leads and Google Calendar to schedule discovery calls. It automates the sending of commercial bri

HTTP Request, Pipedrive, Google Calendar +1