{
  "id": "Sb5BEfXSswnW2zEL",
  "name": "Generate and schedule social media posts with OpenAI, Google Sheets, and Buffer",
  "tags": [],
  "nodes": [
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000001",
      "name": "Daily 6AM Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        256,
        304
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 6 * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000002",
      "name": "Get Pending Content",
      "type": "n8n-nodes-base.googleSheets",
      "maxTries": 3,
      "position": [
        512,
        304
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "pending",
              "lookupColumn": "status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $vars.GOOGLE_SHEET_URL ?? '' }}"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.5,
      "waitBetweenTries": 2000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000003",
      "name": "Validate Required Fields",
      "type": "n8n-nodes-base.if",
      "position": [
        752,
        304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "val-content-id",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.content_id }}",
              "rightValue": ""
            },
            {
              "id": "val-topic",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.topic }}",
              "rightValue": ""
            },
            {
              "id": "val-key-points",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.key_points }}",
              "rightValue": ""
            },
            {
              "id": "val-schedule-date",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.schedule_date }}",
              "rightValue": ""
            },
            {
              "id": "val-schedule-time",
              "operator": {
                "type": "string",
                "operation": "notEmpty"
              },
              "leftValue": "={{ $json.schedule_time }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000004",
      "name": "No Pending Content",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1008,
        560
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000005",
      "name": "Process Each Item",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1008,
        304
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000006",
      "name": "Generate LinkedIn Post",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        1264,
        304
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {
          "maxTokens": 500,
          "temperature": 0.7
        },
        "messages": {
          "values": [
            {
              "content": "=You are an expert LinkedIn content creator. Create engaging, professional posts that drive engagement.\n\nRules:\n- Start with a hook (question, bold statement, or statistic)\n- Use short paragraphs (2-3 sentences max)\n- Include 3-5 relevant hashtags at the end\n- Add a clear call-to-action\n- Keep total length under 1300 characters\n- Use emojis sparingly (1-3 max)\n- Write in {{ $('Process Each Item').item.json.tone ?? 'professional' }} tone\n\nOutput ONLY the post content, nothing else."
            },
            {
              "content": "=Create a LinkedIn post about: {{ $('Process Each Item').item.json.topic ?? 'general topic' }}\n\nKey points to cover:\n{{ $('Process Each Item').item.json.key_points ?? 'No key points provided' }}\n\nTarget audience: {{ $('Process Each Item').item.json.target_audience ?? 'professionals' }}"
            }
          ]
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.8,
      "waitBetweenTries": 3000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000007",
      "name": "Generate Twitter Post",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        1504,
        304
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {
          "maxTokens": 100,
          "temperature": 0.8
        },
        "messages": {
          "values": [
            {
              "content": "=You are an expert Twitter/X content creator. Create viral, engaging tweets that maximize engagement.\n\nRules:\n- Maximum 280 characters (STRICT LIMIT)\n- Start with a hook\n- Use 1-3 relevant hashtags\n- Be concise and punchy\n- Write in {{ $('Process Each Item').item.json.tone ?? 'professional' }} tone\n- Include a call-to-action when possible\n\nOutput ONLY the tweet, nothing else. MUST be under 280 characters."
            },
            {
              "content": "=Create a Twitter post about: {{ $('Process Each Item').item.json.topic ?? 'general topic' }}\n\nKey points (pick the most impactful):\n{{ $('Process Each Item').item.json.key_points ?? 'No key points provided' }}\n\nTarget audience: {{ $('Process Each Item').item.json.target_audience ?? 'general audience' }}"
            }
          ]
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.8,
      "waitBetweenTries": 3000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000008",
      "name": "Generate Facebook Post",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        1760,
        304
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {
          "maxTokens": 300,
          "temperature": 0.7
        },
        "messages": {
          "values": [
            {
              "content": "=You are an expert Facebook content creator. Create engaging posts that encourage comments and shares.\n\nRules:\n- Conversational and friendly tone\n- Ask a question to encourage engagement\n- Use 1-2 emojis naturally\n- Keep under 500 characters for optimal engagement\n- Write in {{ $('Process Each Item').item.json.tone ?? 'casual' }} tone\n- Include a soft call-to-action\n\nOutput ONLY the post content, nothing else."
            },
            {
              "content": "=Create a Facebook post about: {{ $('Process Each Item').item.json.topic ?? 'general topic' }}\n\nKey points to cover:\n{{ $('Process Each Item').item.json.key_points ?? 'No key points provided' }}\n\nTarget audience: {{ $('Process Each Item').item.json.target_audience ?? 'general audience' }}"
            }
          ]
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.8,
      "waitBetweenTries": 3000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000009",
      "name": "Collect All Platform Posts",
      "type": "n8n-nodes-base.set",
      "position": [
        2000,
        304
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "col-linkedin",
              "name": "linkedin_post",
              "type": "string",
              "value": "={{ $('Generate LinkedIn Post').first().json.text ?? 'GENERATION_FAILED' }}"
            },
            {
              "id": "col-twitter",
              "name": "twitter_post",
              "type": "string",
              "value": "={{ $('Generate Twitter Post').first().json.text ?? 'GENERATION_FAILED' }}"
            },
            {
              "id": "col-facebook",
              "name": "facebook_post",
              "type": "string",
              "value": "={{ $('Generate Facebook Post').first().json.text ?? 'GENERATION_FAILED' }}"
            },
            {
              "id": "col-content-id",
              "name": "content_id",
              "type": "string",
              "value": "={{ $('Process Each Item').item.json.content_id }}"
            },
            {
              "id": "col-topic",
              "name": "topic",
              "type": "string",
              "value": "={{ $('Process Each Item').item.json.topic ?? '' }}"
            },
            {
              "id": "col-platforms",
              "name": "platforms",
              "type": "string",
              "value": "={{ $('Process Each Item').item.json.platforms ?? 'linkedin,twitter,facebook' }}"
            },
            {
              "id": "col-schedule-date",
              "name": "schedule_date",
              "type": "string",
              "value": "={{ $('Process Each Item').item.json.schedule_date ?? '' }}"
            },
            {
              "id": "col-schedule-time",
              "name": "schedule_time",
              "type": "string",
              "value": "={{ $('Process Each Item').item.json.schedule_time ?? '09:00' }}"
            },
            {
              "id": "col-row",
              "name": "row_number",
              "type": "number",
              "value": "={{ $('Process Each Item').item.json.row_number }}"
            },
            {
              "id": "col-status",
              "name": "status",
              "type": "string",
              "value": "generated"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000010",
      "name": "Update Sheet - Content Generated",
      "type": "n8n-nodes-base.googleSheets",
      "maxTries": 3,
      "position": [
        2256,
        304
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "generated",
            "content_id": "={{ $json.content_id }}",
            "twitter_post": "={{ $json.twitter_post }}",
            "facebook_post": "={{ $json.facebook_post }}",
            "linkedin_post": "={{ $json.linkedin_post }}"
          },
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "content_id"
          ]
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $vars.GOOGLE_SHEET_URL ?? '' }}"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.5,
      "waitBetweenTries": 2000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000011",
      "name": "Schedule LinkedIn to Buffer",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        2512,
        304
      ],
      "parameters": {
        "url": "https://api.bufferapp.com/1/updates/create.json",
        "method": "POST",
        "options": {
          "timeout": 30000
        },
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ $json.linkedin_post }}"
            },
            {
              "name": "profile_ids[]",
              "value": "={{ $vars.BUFFER_LINKEDIN_PROFILE_ID ?? '' }}"
            },
            {
              "name": "scheduled_at",
              "value": "={{ $json.schedule_date }}T{{ $json.schedule_time }}:00Z"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000012",
      "name": "Schedule Twitter to Buffer",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        2752,
        304
      ],
      "parameters": {
        "url": "https://api.bufferapp.com/1/updates/create.json",
        "method": "POST",
        "options": {
          "timeout": 30000
        },
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ $('Collect All Platform Posts').first().json.twitter_post }}"
            },
            {
              "name": "profile_ids[]",
              "value": "={{ $vars.BUFFER_TWITTER_PROFILE_ID ?? '' }}"
            },
            {
              "name": "scheduled_at",
              "value": "={{ $('Collect All Platform Posts').first().json.schedule_date }}T{{ $('Collect All Platform Posts').first().json.schedule_time }}:00Z"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000013",
      "name": "Schedule Facebook to Buffer",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        3008,
        304
      ],
      "parameters": {
        "url": "https://api.bufferapp.com/1/updates/create.json",
        "method": "POST",
        "options": {
          "timeout": 30000
        },
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ $('Collect All Platform Posts').first().json.facebook_post }}"
            },
            {
              "name": "profile_ids[]",
              "value": "={{ $vars.BUFFER_FACEBOOK_PROFILE_ID ?? '' }}"
            },
            {
              "name": "scheduled_at",
              "value": "={{ $('Collect All Platform Posts').first().json.schedule_date }}T{{ $('Collect All Platform Posts').first().json.schedule_time }}:00Z"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000014",
      "name": "Update Sheet - Scheduled",
      "type": "n8n-nodes-base.googleSheets",
      "maxTries": 3,
      "position": [
        3264,
        304
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "scheduled",
            "content_id": "={{ $('Collect All Platform Posts').first().json.content_id }}"
          },
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "content_id"
          ]
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $vars.GOOGLE_SHEET_URL ?? '' }}"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.5,
      "waitBetweenTries": 2000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000015",
      "name": "Send Success Summary",
      "type": "n8n-nodes-base.slack",
      "maxTries": 2,
      "position": [
        1264,
        560
      ],
      "parameters": {
        "text": "=:white_check_mark: *Social Media Batch Complete*\n\n:chart_with_upwards_trend: *Execution Summary*\n:id: Execution: {{ $execution.id }}\n:clock1: Completed: {{ $now.toFormat('yyyy-MM-dd HH:mm') }}\n\nAll pending content has been generated and scheduled to Buffer.\nCheck your Google Sheet for details.",
        "otherOptions": {}
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "waitBetweenTries": 3000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000016",
      "name": "On Workflow Error",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        256,
        800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000017",
      "name": "Prepare Error Data",
      "type": "n8n-nodes-base.set",
      "position": [
        512,
        800
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "err-msg",
              "name": "error_message",
              "type": "string",
              "value": "={{ $json.execution?.error?.message ?? $json.error?.message ?? 'Workflow execution failed - check n8n logs' }}"
            },
            {
              "id": "err-content-id",
              "name": "content_id",
              "type": "string",
              "value": "={{ $json.execution?.lastNodeExecuted ?? 'unknown' }}"
            },
            {
              "id": "err-execution-id",
              "name": "execution_id",
              "type": "string",
              "value": "={{ $json.execution?.id ?? $execution.id }}"
            },
            {
              "id": "err-node",
              "name": "failed_node",
              "type": "string",
              "value": "={{ $json.execution?.lastNodeExecuted ?? 'unknown' }}"
            },
            {
              "id": "err-timestamp",
              "name": "failed_at",
              "type": "string",
              "value": "={{ $now.toFormat('yyyy-MM-dd HH:mm:ss') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000018",
      "name": "Update Sheet - Failed",
      "type": "n8n-nodes-base.googleSheets",
      "maxTries": 2,
      "position": [
        752,
        800
      ],
      "parameters": {
        "columns": {
          "value": {
            "status": "failed",
            "error_log": "=[{{ $json.failed_at }}] Node: {{ $json.failed_node }} | Error: {{ $json.error_message }}",
            "content_id": "={{ $json.content_id }}"
          },
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "content_id"
          ]
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $vars.GOOGLE_SHEET_URL ?? '' }}"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.5,
      "waitBetweenTries": 2000
    },
    {
      "id": "a1b2c3d4-0001-4000-8000-000000000019",
      "name": "Send Error Alert",
      "type": "n8n-nodes-base.slack",
      "maxTries": 2,
      "position": [
        1008,
        800
      ],
      "parameters": {
        "text": "=:rotating_light: *Social Media Automation FAILED*\n\n:x: *Error Details:*\n:label: Execution ID: {{ $json.execution_id }}\n:electric_plug: Failed Node: {{ $json.failed_node }}\n:warning: Error: {{ $json.error_message }}\n:clock1: Failed At: {{ $json.failed_at }}\n\nPlease check the workflow execution in n8n for full details.",
        "otherOptions": {}
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "waitBetweenTries": 3000
    },
    {
      "id": "b0000000-0000-4000-8000-000000000001",
      "name": "Note - Main",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        -496
      ],
      "parameters": {
        "width": 550,
        "height": 580,
        "content": "## How it works\nThis workflow runs daily at 6 AM UTC. It reads all rows with status \"pending\" from your Google Sheet, validates that required fields are present (content ID, topic, key points, schedule date, and time), then processes each row one at a time.\n\nFor each row, OpenAI generates three platform-specific posts: a professional LinkedIn post (under 1,300 characters with hashtags), a concise Twitter/X post (under 280 characters), and a conversational Facebook post (under 500 characters). The generated content is written back to the sheet, then scheduled to each platform via the Buffer API.\n\nAfter all items are processed, a Slack summary is sent. If any step fails, the error is logged to the sheet and a Slack alert is triggered.\n\n## Setup steps\n1. Create four n8n variables in Settings > Variables: `GOOGLE_SHEET_URL`, `BUFFER_LINKEDIN_PROFILE_ID`, `BUFFER_TWITTER_PROFILE_ID`, `BUFFER_FACEBOOK_PROFILE_ID`.\n2. Connect your **Google Sheets OAuth2** credential to the sheet nodes.\n3. Add your **OpenAI API** credential to all three generation nodes.\n4. Create an **HTTP Header Auth** credential for Buffer with your access token.\n5. Connect your **Slack OAuth2** credential and set the notification channel.\n6. Ensure your Google Sheet has these columns: `content_id`, `topic`, `key_points`, `tone`, `target_audience`, `platforms`, `schedule_date`, `schedule_time`, `status`, `linkedin_post`, `twitter_post`, `facebook_post`, `error_log`."
      },
      "typeVersion": 1
    },
    {
      "id": "b0000000-0000-4000-8000-000000000002",
      "name": "Note - Trigger section",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        208
      ],
      "parameters": {
        "color": 2,
        "width": 460,
        "height": 80,
        "content": "**Trigger & fetch**\nDaily schedule + Google Sheets read"
      },
      "typeVersion": 1
    },
    {
      "id": "b0000000-0000-4000-8000-000000000003",
      "name": "Note - Validation section",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        208
      ],
      "parameters": {
        "color": 2,
        "width": 270,
        "height": 80,
        "content": "**Validation**\nCheck required fields before processing"
      },
      "typeVersion": 1
    },
    {
      "id": "b0000000-0000-4000-8000-000000000004",
      "name": "Note - AI generation section",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1008,
        208
      ],
      "parameters": {
        "color": 2,
        "width": 780,
        "height": 80,
        "content": "**AI content generation**\nSequential: LinkedIn > Twitter > Facebook"
      },
      "typeVersion": 1
    },
    {
      "id": "b0000000-0000-4000-8000-000000000005",
      "name": "Note - Buffer scheduling section",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2224,
        208
      ],
      "parameters": {
        "color": 2,
        "width": 780,
        "height": 80,
        "content": "**Scheduling & status**\nBuffer API calls + Google Sheets updates"
      },
      "typeVersion": 1
    },
    {
      "id": "b0000000-0000-4000-8000-000000000006",
      "name": "Note - Error handling section",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        704
      ],
      "parameters": {
        "color": 7,
        "width": 780,
        "height": 80,
        "content": "**Error handling**\nLog failures to sheet + Slack alert"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "",
    "executionOrder": "v1",
    "saveManualExecutions": true
  },
  "versionId": "a84919bf-fe0d-4cbc-959f-8be04f2a7109",
  "connections": {
    "Daily 6AM Trigger": {
      "main": [
        [
          {
            "node": "Get Pending Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On Workflow Error": {
      "main": [
        [
          {
            "node": "Prepare Error Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Each Item": {
      "main": [
        [
          {
            "node": "Generate LinkedIn Post",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Success Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Error Data": {
      "main": [
        [
          {
            "node": "Update Sheet - Failed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Pending Content": {
      "main": [
        [
          {
            "node": "Validate Required Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Twitter Post": {
      "main": [
        [
          {
            "node": "Generate Facebook Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Sheet - Failed": {
      "main": [
        [
          {
            "node": "Send Error Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Facebook Post": {
      "main": [
        [
          {
            "node": "Collect All Platform Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate LinkedIn Post": {
      "main": [
        [
          {
            "node": "Generate Twitter Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Sheet - Scheduled": {
      "main": [
        [
          {
            "node": "Process Each Item",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Required Fields": {
      "main": [
        [
          {
            "node": "Process Each Item",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Pending Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Collect All Platform Posts": {
      "main": [
        [
          {
            "node": "Update Sheet - Content Generated",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Twitter to Buffer": {
      "main": [
        [
          {
            "node": "Schedule Facebook to Buffer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Facebook to Buffer": {
      "main": [
        [
          {
            "node": "Update Sheet - Scheduled",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule LinkedIn to Buffer": {
      "main": [
        [
          {
            "node": "Schedule Twitter to Buffer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Sheet - Content Generated": {
      "main": [
        [
          {
            "node": "Schedule LinkedIn to Buffer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}