AutomationFlowsGeneral › Daily Twilio SMS from Google Sheets

Daily Twilio SMS from Google Sheets

Original n8n title: Congratulations Workflow

Congratulations Workflow. Uses googleSheets, noOp, twilio. Scheduled trigger; 8 nodes.

Cron / scheduled trigger★★★★☆ complexity8 nodesGoogle SheetsTwilio
General Trigger: Cron / scheduled Nodes: 8 Complexity: ★★★★☆ Added:

The workflow JSON

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

Download .json
{
  "id": "247",
  "name": "Congratulations Workflow",
  "nodes": [
    {
      "name": "Daily Trigger",
      "type": "n8n-nodes-base.cron",
      "position": [
        200,
        400
      ],
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "hour": 8
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Congratulations Calendar",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        400,
        400
      ],
      "parameters": {
        "range": "A:E",
        "options": {
          "valueRenderMode": "FORMATTED_VALUE"
        },
        "sheetId": "",
        "authentication": "oAuth2"
      },
      "credentials": {
        "googleSheetsOAuth2Api": "<your credential>"
      },
      "typeVersion": 1
    },
    {
      "name": "Any Event Today?",
      "type": "n8n-nodes-base.if",
      "position": [
        600,
        400
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$node[\"Congratulations Calendar\"].json[\"Date\"]}}",
              "value2": "={{(new Date).getDate()}}/{{(new Date).getMonth()+1}}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Do Nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        800,
        550
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "Congratulations Messages",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1000,
        550
      ],
      "parameters": {
        "range": "Congratulations Messages!A:B",
        "options": {},
        "sheetId": "",
        "authentication": "oAuth2"
      },
      "credentials": {
        "googleSheetsOAuth2Api": "<your credential>"
      },
      "typeVersion": 1
    },
    {
      "name": "Merge Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        1200,
        400
      ],
      "parameters": {
        "mode": "mergeByKey",
        "propertyName1": "Event Name",
        "propertyName2": "Event Name"
      },
      "typeVersion": 1
    },
    {
      "name": "Personalize Message",
      "type": "n8n-nodes-base.function",
      "position": [
        1400,
        400
      ],
      "parameters": {
        "functionCode": "const newItems = [];\n\nfor (let i=0;i<items.length;i++) {\n  wishes_array = items[i].json.Congratulations.split(',');\n  greeting = wishes_array.shift();\n  \n  new_wish = greeting + ' ' + items[i].json['First Name'] + ',' + wishes_array.join(',');\n  newItems.push({json: {Wishes: new_wish, \"Phone Number\": items[i].json['Phone Number']}});\n}\n\nreturn newItems;"
      },
      "typeVersion": 1
    },
    {
      "name": "Send SMS",
      "type": "n8n-nodes-base.twilio",
      "position": [
        1600,
        400
      ],
      "parameters": {
        "to": "={{$node[\"Personalize Message\"].json[\"Phone Number\"]}}",
        "from": "",
        "message": "={{$node[\"Personalize Message\"].json[\"Wishes\"]}}"
      },
      "credentials": {
        "twilioApi": "<your credential>"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {},
  "connections": {
    "Merge Data": {
      "main": [
        [
          {
            "node": "Personalize Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Trigger": {
      "main": [
        [
          {
            "node": "Congratulations Calendar",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Any Event Today?": {
      "main": [
        [
          {
            "node": "Merge Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Do Nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Personalize Message": {
      "main": [
        [
          {
            "node": "Send SMS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Congratulations Calendar": {
      "main": [
        [
          {
            "node": "Any Event Today?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Congratulations Messages": {
      "main": [
        [
          {
            "node": "Merge Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}

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

Congratulations Workflow. Uses googleSheets, noOp, twilio. Scheduled trigger; 8 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

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

General

Shopify to Google Sheets Product Sync Automation. Uses noOp, graphql, googleSheets, scheduleTrigger. Scheduled trigger; 25 nodes.

GraphQL, Google Sheets
General

Wait Code. Uses scheduleTrigger, markdown, splitInBatches, rssFeedRead. Scheduled trigger; 23 nodes.

RSS Feed Read, Google Sheets
General

Amazon Product Price Tracker. Uses googleSheets, splitInBatches, httpRequest, emailSend. Scheduled trigger; 16 nodes.

Google Sheets, HTTP Request, Email Send
General

Limit Code. Uses scheduleTrigger, strava, googleSheets, removeDuplicates. Scheduled trigger; 13 nodes.

Strava, Google Sheets
General

Code Schedule. Uses itemLists, httpRequest, googleSheets, stickyNote. Scheduled trigger; 13 nodes.

Item Lists, HTTP Request, Google Sheets