AutomationFlowsSocial Media › Collect Posts From Twitter and Send to Airtable

Collect Posts From Twitter and Send to Airtable

ByOsherD @osherd on n8n.io

This workflow collects tweets (100 but adjustable) and add them to AirTable. Starting the 2nd execution, the workflow will add only the new tweets (based on Tweet ID), so there won't be any tweet duplications

Event trigger★★★★☆ complexity7 nodesTwitterAirtable
Social Media Trigger: Event Nodes: 7 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #1403 — we link there as the canonical source.

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": 1003,
  "name": "New tweets",
  "nodes": [
    {
      "name": "On clicking 'execute'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        240,
        260
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "Twitter",
      "type": "n8n-nodes-base.twitter",
      "position": [
        520,
        160
      ],
      "parameters": {
        "limit": 100,
        "operation": "search",
        "searchText": "verstappen",
        "additionalFields": {
          "resultType": "mixed"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Set_AT_list",
      "type": "n8n-nodes-base.set",
      "position": [
        780,
        360
      ],
      "parameters": {
        "values": {
          "number": [
            {
              "name": "Likes",
              "value": "={{$node[\"Twitter\"].json[\"favorite_count\"] ? $node[\"Twitter\"].json[\"favorite_count\"] : 0 }}"
            }
          ],
          "string": [
            {
              "name": "Tweet",
              "value": "={{$node[\"get airtable list\"].json[\"fields\"][\"Tweet\"]}}"
            },
            {
              "name": "Tweet_id",
              "value": "={{$node[\"get airtable list\"].json[\"fields\"][\"Tweet_id\"]}}"
            },
            {
              "name": "Tweet URL",
              "value": "={{$node[\"get airtable list\"].json[\"fields\"][\"Tweet URL\"]}}"
            },
            {
              "name": "Author",
              "value": "={{$node[\"get airtable list\"].json[\"fields\"][\"Author\"]}}"
            },
            {
              "name": "Time",
              "value": "={{$node[\"get airtable list\"].json[\"fields\"][\"Time\"]}}"
            }
          ]
        },
        "options": {
          "dotNotation": false
        },
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "name": "get airtable list",
      "type": "n8n-nodes-base.airtable",
      "position": [
        520,
        360
      ],
      "parameters": {
        "table": "tbl6rexxFBodzKVoC",
        "operation": "list",
        "application": "app36P08S3Jzki6qJ",
        "additionalOptions": {}
      },
      "credentials": {
        "airtableApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "set twitter data",
      "type": "n8n-nodes-base.set",
      "position": [
        780,
        160
      ],
      "parameters": {
        "values": {
          "number": [
            {
              "name": "Likes",
              "value": "={{$node[\"Twitter\"].json[\"favorite_count\"]}}"
            }
          ],
          "string": [
            {
              "name": "Tweet",
              "value": "={{$node[\"Twitter\"].json[\"text\"]}}"
            },
            {
              "name": "Tweet_id",
              "value": "={{$node[\"Twitter\"].json[\"id\"]}}"
            },
            {
              "name": "Tweet URL",
              "value": "=https://twitter.com/{{$node[\"Twitter\"].json[\"user\"][\"screen_name\"]}}/status/{{$node[\"Twitter\"].json[\"id_str\"]}}"
            },
            {
              "name": "Author",
              "value": "={{$node[\"Twitter\"].json[\"in_reply_to_screen_name\"]}}"
            },
            {
              "name": "Time",
              "value": "={{$node[\"Twitter\"].json[\"created_at\"]}}"
            }
          ]
        },
        "options": {
          "dotNotation": false
        },
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "name": "Leave only new tweets",
      "type": "n8n-nodes-base.merge",
      "position": [
        1060,
        260
      ],
      "parameters": {
        "mode": "removeKeyMatches",
        "propertyName1": "Tweet_id",
        "propertyName2": "Tweet_id"
      },
      "typeVersion": 1
    },
    {
      "name": "Append new tweets to airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1300,
        260
      ],
      "parameters": {
        "table": "tbl6rexxFBodzKVoC",
        "options": {},
        "operation": "append",
        "application": "app36P08S3Jzki6qJ",
        "addAllFields": "={{true}}"
      },
      "credentials": {
        "airtableApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {},
  "connections": {
    "Twitter": {
      "main": [
        [
          {
            "node": "set twitter data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set_AT_list": {
      "main": [
        [
          {
            "node": "Leave only new tweets",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "set twitter data": {
      "main": [
        [
          {
            "node": "Leave only new tweets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get airtable list": {
      "main": [
        [
          {
            "node": "Set_AT_list",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Leave only new tweets": {
      "main": [
        [
          {
            "node": "Append new tweets to airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On clicking 'execute'": {
      "main": [
        [
          {
            "node": "Twitter",
            "type": "main",
            "index": 0
          },
          {
            "node": "get airtable list",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

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

This workflow collects tweets (100 but adjustable) and add them to AirTable. Starting the 2nd execution, the workflow will add only the new tweets (based on Tweet ID), so there won't be any tweet duplications

Source: https://n8n.io/workflows/1403/ — original creator credit. Request a take-down →

More Social Media workflows → · Browse all categories →

Related workflows

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

Social Media

New tweets. Uses manualTrigger, twitter, airtable. Event-driven trigger; 7 nodes.

Twitter, Airtable
Social Media

New tweets. Uses twitter, airtable, stopAndError. Event-driven trigger; 8 nodes.

Twitter, Airtable, Stop And Error
Social Media

Credentials-Setup. Uses twitter, reddit, googleDocs, googleDrive. Event-driven trigger; 43 nodes.

Twitter, Reddit, Google Docs +22
Social Media

This n8n workflow automatically shares content from a Telegram Channel to multiple platforms like WordPress, Facebook, X/Twitter, and LinkedIn. It uses a Switch node to detect the type of content—text

Telegram Trigger, Telegram, WordPress +5
Social Media

This workflow listens to messages in a designated Telegram channel and automatically posts them to X (Twitter), Threads, and LinkedIn based on simple @mention tags. Write your content once, tag which

Twitter, LinkedIn, Telegram +2