AutomationFlowsSocial Media › Scheduled Automation for X and Google Sheets Services

Scheduled Automation for X and Google Sheets Services

Bymasaya kawabe @kawabe03 on n8n.io

Auto-like and repost latest tweets from accounts in Google Sheets Who’s it for

Cron / scheduled trigger★★★★☆ complexity13 nodesGoogle SheetsTwitter
Social Media Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #9758 — 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": "pPwYYgTXLQzH7fv4",
  "name": "Auto Like and Repost X Accounts from Google Sheet",
  "tags": [],
  "nodes": [
    {
      "id": "ef981efc-4d09-4e0d-9af4-a1db3cacc819",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "notes": "Role: Automatic start on a schedule (hourly/daily). Adjust to respect rate limits.",
      "position": [
        16,
        48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 19
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6939ccfc-2490-4489-abdb-349d4e5da564",
      "name": "Read accounts from Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Role: Read target accounts from Google Sheets (column: account_id).",
      "position": [
        240,
        48
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "19pJoBuba1o2PaJlx0inaGnGi45PpxbfB79MMhwLFH4s"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "cc19735b-c69f-42ef-9fa9-73c97813960f",
      "name": "Get latest tweets",
      "type": "n8n-nodes-base.twitter",
      "notes": "Role: Search and fetch each account\u2019s latest tweets. Recommend excluding replies/retweets.",
      "position": [
        464,
        48
      ],
      "parameters": {
        "limit": 10,
        "operation": "search",
        "searchText": "=from:{{ $json['account_id'] }}",
        "additionalFields": {
          "tweetFieldsObject": []
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d6e808b7-31de-409a-87ac-c6d3edbb1649",
      "name": "Like tweet",
      "type": "n8n-nodes-base.twitter",
      "notes": "Role: Like the target tweet ID(s). Support a dry-run toggle for safety.",
      "position": [
        912,
        48
      ],
      "parameters": {
        "tweetId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "operation": "like"
      },
      "typeVersion": 2
    },
    {
      "id": "9e46e0b5-4083-45b2-8cf1-20b172eac5f4",
      "name": "Repost tweet",
      "type": "n8n-nodes-base.twitter",
      "notes": "Role: Repost tweets you just liked. Consider adding a cooldown.",
      "position": [
        1136,
        48
      ],
      "parameters": {
        "tweetId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "operation": "retweet"
      },
      "typeVersion": 2
    },
    {
      "id": "a2f9de77-db50-4656-bd18-1025331adc97",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "notes": "Role: Limit downstream Like/Repost actions. Recommend 1\u20133 in production.",
      "position": [
        688,
        48
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "43b4d64b-5fe4-4fcb-9d40-1b417d03e55f",
      "name": "\ud83d\udfe8 Sticky: Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -64
      ],
      "parameters": {
        "color": "yellow",
        "width": 440,
        "height": 464,
        "content": "## Template Overview (Read Me First)\n**Purpose**: On a schedule, read a Google Sheet of accounts and automatically like and repost each account\u2019s latest tweets.\n\n### Requirements\n- X (Twitter) OAuth2 credentials\n- Google Sheets OAuth2 credentials\n\n### Flow\n1) Schedule \u2192 2) Read Google Sheet \u2192 3) Get latest tweets \u2192 4) Limit \u2192 5) Like \u2192 6) Repost\n\n### Tips / Security\n- Never hardcode tokens in nodes. Always use **Credentials**.\n- Respect API rate limits; avoid bursts. Use **Limit** and sensible schedules.\n- Test with a staging account first. Consider a **dry-run** mode.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "09cdabb3-e321-4059-b37b-d97cf09f7f0f",
      "name": "Sticky: Schedule Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -240
      ],
      "parameters": {
        "color": "white",
        "width": 376,
        "height": 280,
        "content": "## Schedule Trigger \u2014 How to use\n- Cadence: hourly/daily. Consider load and rate limits.\n- During testing, you can manually **Execute Workflow**.\n- Running at off-peak hours can help avoid API contention.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e11dfabc-240c-495b-ba51-69213644d793",
      "name": "Sticky: Google Sheets Read",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        208
      ],
      "parameters": {
        "color": "white",
        "width": 360,
        "height": 280,
        "content": "## Read from Google Sheets (account list)\n- Required column: `account_id` (screen name without `@`).\n- Replace `documentId`/`sheetName` with your own sheet values.\n- Optional: `blocked_words`, `last_processed_at` (for future branching).\n- Check node options to match your header row settings.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8597dec7-c6b8-4a3a-aff4-ea16042c59d2",
      "name": "Sticky: Get Latest Tweets",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        -240
      ],
      "parameters": {
        "color": "white",
        "width": 360,
        "height": 280,
        "content": "## Get latest tweets (Twitter)\n- Query example: `from:{{account_id}} -is:retweet -is:reply`\n- Results: 1\u20135 per run. Add `tweet.fields=created_at` to filter by freshness.\n- Mind rate limits; avoid processing many accounts in a short time.\n- Future: add NG word/time filters using IF/Code nodes.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "43745622-5ba2-47ae-b179-4d14f3341228",
      "name": "Sticky: Limit",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        192
      ],
      "parameters": {
        "color": "white",
        "width": 360,
        "height": 280,
        "content": "## Limit (cap actions)\n- Production recommendation: 1\u20133 actions. Start low-risk.\n- Helps avoid spam flags and account restrictions.\n- Use IF nodes to vary caps by time/day if needed.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "77b8e848-670f-4683-bc96-a86ab5b2cfef",
      "name": "Sticky: Like Tweet",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        -240
      ],
      "parameters": {
        "color": "white",
        "width": 360,
        "height": 280,
        "content": "## Like tweet (Twitter)\n- Like the tweet ID from the previous node.\n- For testing, add a **dry-run** flag with Set + IF to skip actions.\n- Safety: filter by blocked words/language/freshness first.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8ff534fd-3276-4360-9ba7-41809d0115c2",
      "name": "Sticky: Repost Tweet",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        192
      ],
      "parameters": {
        "color": "white",
        "width": 360,
        "height": 280,
        "content": "## Repost tweet (Twitter)\n- Repost the tweet you just liked.\n- Add a cooldown (seconds\u2013minutes) or time-of-day gates as needed.\n- For brand safety, keep repost filters as strict as Like.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ee86cc7d-e83a-4bdb-9a86-667192155fca",
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "Like tweet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Like tweet": {
      "main": [
        [
          {
            "node": "Repost tweet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Read accounts from Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get latest tweets": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read accounts from Google Sheets": {
      "main": [
        [
          {
            "node": "Get latest tweets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

Auto-like and repost latest tweets from accounts in Google Sheets Who’s it for

Source: https://n8n.io/workflows/9758/ — 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

Managing content for multiple social media platforms manually is time-consuming and error-prone. This workflow automates content creation, image generation, approval flows, and publishing for LinkedIn

LinkedIn, OpenAI, Google Sheets +3
Social Media

AI Posts Content Machine. Uses agent, stickyNote, outputParserStructured, lmChatAnthropic. Scheduled trigger; 28 nodes.

Agent, Output Parser Structured, Anthropic Chat +7
Social Media

This n8n workflow automates the process of promoting your latest YouTube videos on X (formerly Twitter). It ensures that posts are engaging, concise, and follow platform-specific requirements. Additio

Twitter, YouTube, Tool Calculator +6
Social Media

How it works

Agent, Output Parser Structured, Anthropic Chat +7
Social Media

Instead of manually writing, designing, and posting content, this workflow turns a single Google Sheet row into multi-platform posts plus a custom AI image that matches your message.

Google Sheets, Agent, Twitter +5