{
  "id": "ddQrW7UAltdowiEB",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Auto-Generate Platform-Specific Posts from YouTube Videos with Dumpling AI",
  "tags": [],
  "nodes": [
    {
      "id": "42d0234f-be8d-4df3-9f02-ff5ee574bea3",
      "name": "Trigger Search Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -784,
        32
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4e72498d-e44d-4611-904b-83538f2cb352",
      "name": "Get Unsearched Topic from Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -560,
        32
      ],
      "parameters": {
        "options": {
          "returnFirstMatch": true
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "Searched?"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit#gid=0",
          "cachedResultName": "YouTube Topics"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit?usp=drivesdk",
          "cachedResultName": "Youtube Video/Creators"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "447c249d-92f9-4b3f-90eb-122e0be919ad",
      "name": "Search YouTube via Dumpling AI",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -336,
        32
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/youtube/search",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"query\": \"{{ $json['Youtube Topics'] }}\",\n  \"filter\": \"video\"\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3e16a160-5e3f-403d-acbb-40c1c698423b",
      "name": "Filter + Sort YouTube Videos",
      "type": "n8n-nodes-base.code",
      "position": [
        -112,
        32
      ],
      "parameters": {
        "jsCode": "// n8n Code Node to get the 3 latest videos from YouTube data\n// This assumes the input is coming from a previous node with the JSON data\n\n// Get the input data from n8n\nconst items = $input.all();\n\n// Try different ways to access the data based on n8n's structure\nlet data;\nlet videos = [];\n\n// Check if the data is directly in the first item\nif (items && items.length > 0) {\n  const firstItem = items[0].json;\n  \n  // If the data is a string, parse it\n  if (typeof firstItem === 'string') {\n    data = JSON.parse(firstItem);\n  } \n  // If it's already an object\n  else if (typeof firstItem === 'object') {\n    data = firstItem;\n  }\n  \n  // Try to find videos in different possible locations\n  if (data) {\n    if (Array.isArray(data) && data[0] && data[0].videos) {\n      videos = data[0].videos;\n    } else if (data.videos) {\n      videos = data.videos;\n    } else if (data.data && Array.isArray(data.data) && data.data[0] && data.data[0].videos) {\n      videos = data.data[0].videos;\n    }\n  }\n}\n\n// Check if we found videos\nif (!videos || videos.length === 0) {\n  throw new Error('No videos found in input data. Please check the data structure.');\n}\n\n// Filter and sort videos by publishedTime (most recent first)\nconst sortedVideos = videos\n  .filter(video => video.type === 'video' && video.publishedTime)\n  .sort((a, b) => {\n    const dateA = new Date(a.publishedTime);\n    const dateB = new Date(b.publishedTime);\n    return dateB - dateA; // Sort in descending order (newest first)\n  });\n\n// Get the top 3 most recent videos\nconst latestThreeVideos = sortedVideos.slice(0, 3).map(video => ({\n  id: video.id,\n  url: video.url,\n  title: video.title,\n  publishedTime: video.publishedTime,\n  publishedTimeText: video.publishedTimeText\n}));\n\n// Return the result for n8n to process\nreturn latestThreeVideos;\n\n// Alternative: If you want to return each video as a separate item for n8n workflow\n// return latestThreeVideos.map(video => ({ json: video }));"
      },
      "typeVersion": 2
    },
    {
      "id": "dd78f640-822e-49ca-ba2d-8f3442bd7d70",
      "name": "Prepare Video List for AI",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        112,
        32
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "8896a2cd-2732-4e08-ae09-b44c074f0de2",
      "name": "Select Best Video with GPT-4o",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        336,
        32
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are given a search input, search output and a present date. Use the search input to find the most relevant YouTube videos from the search output . For each video, return the following in JSON format:\n\n[\n  {\n    \"data\": [\n      {\n        \"id\": \"<videoId>\",\n        \"url\": \"https://www.youtube.com/watch?v=<videoId>\",\n        \"title\": \"<videoTitle>\",\n        \"publishedTime\": \"<ISO timestamp>\",\n        \"publishedTimeText\": \"<human readable time ago>\"\n      }\n    ]\n  }\n]\n\nRules:\n1. Only include videos that best match the search input.\n2. From the results, pick the video whose publishedTime is closest to the present date provided.\n3. Always return the output strictly in the JSON structure shown above, no explanations.\n4. Ensure publishedTime is in ISO 8601 format.\n\n"
            },
            {
              "content": "=search input: {{ $('Get Unsearched Topic from Google Sheet').item.json['Youtube Topics'] }}\npresent date:{{ $now }}\nsearch output:{{ JSON.stringify($json.data) }}\n"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "a0b322e2-485b-4669-8603-e5988a6dcd6d",
      "name": "Get Transcript (Dumpling AI)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        688,
        32
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/get-youtube-transcript",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"videoUrl\": \"{{ $json.message.content.data[0].url }}\"\n\n}\n   ",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "170d005a-c7e3-46e3-83da-9f607271b9e7",
      "name": "Generate Posts with GPT-4o",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        912,
        32
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=You are a skilled social media content creator. Your task is to take the YouTube transcript provided and write three platform-specific posts: Instagram, Facebook, and LinkedIn.  \n\nRules for each:  \n- Instagram: Short, punchy, engaging, include at most 2 emojis, 3\u20135 relevant hashtags, under 200 words.  \n- Facebook: Conversational, warm, a bit longer, include one clear takeaway, encourage interaction with a question, under 250 words.  \n- LinkedIn: Professional but human, insightful, thought-provoking, with a call to action for comments, under 300 words.  \n\nGeneral:  \n- Do not copy the transcript word-for-word, rewrite into smooth audience-ready posts.  \n- Each platform\u2019s post should feel unique and native to that platform.  \n- Alongside the post, generate a short **image prompt** describing a visual that matches the content of the post.  \n- Always return the output in strict JSON format with the array named `output`. No explanations or extra text.  \n\n\nReturn your response exactly in this format:\n{\n  \"output\": [\n    {\n      \"platform\": \"instagram\",\n      \"post\": \"Instagram post text here\",\n      \"image_prompt\": \"Image description that matches the Instagram post\"\n    },\n    {\n      \"platform\": \"facebook\",\n      \"post\": \"Facebook post text here\",\n      \"image_prompt\": \"Image description that matches the Facebook post\"\n    },\n    {\n      \"platform\": \"linkedin\",\n      \"post\": \"LinkedIn post text here\",\n      \"image_prompt\": \"Image description that matches the LinkedIn post\"\n    }\n  ]\n}\n"
            },
            {
              "content": "=Here is the transcript:  \n{{ $json.transcript }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "ca110a4c-65fa-47f8-8fa3-6e63962d8554",
      "name": "Generate Instagram Image (Dumpling AI)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1296,
        -224
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/generate-ai-image",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"FLUX.1-pro\",\n  \"input\": {\n    \"prompt\": \"{{ $json.message.content.output[0].image_prompt }}\",\n    \"output_format\": \"png\"\n  }\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e92dadcb-fb66-4315-b83e-8256e8b74cb1",
      "name": "Generate Facebook Image (Dumpling AI)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1312,
        32
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/generate-ai-image",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"FLUX.1-pro\",\n  \"input\": {\n    \"prompt\": \"{{ $json.message.content.output[1].image_prompt }}\",\n    \"output_format\": \"png\"\n  }\n}\n\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "151f494f-1afe-4c4c-98a1-6fc1ea362599",
      "name": "Generate LinkedIn Image (Dumpling AI)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1280,
        288
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/generate-ai-image",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"FLUX.1-pro\",\n  \"input\": {\n    \"prompt\": \"{{ $json.message.content.output[2].image_prompt }}\",\n    \"output_format\": \"png\"\n  }\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ffd66d63-4cb0-49e0-9e09-a7ad750d4add",
      "name": "Format Instagram Post",
      "type": "n8n-nodes-base.set",
      "position": [
        1504,
        -224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b58d7016-b4e0-4887-8616-06f4780dc70b",
              "name": "platform",
              "type": "string",
              "value": "={{ $('Generate Posts with GPT-4o').item.json.message.content.output[0].platform }}"
            },
            {
              "id": "3bcc242c-210f-4848-8a28-d01d9159dfe1",
              "name": "Content",
              "type": "string",
              "value": "={{ $('Generate Posts with GPT-4o').item.json.message.content.output[0].post }}"
            },
            {
              "id": "58b4ef74-6a64-4273-84be-46b9d4e4daa2",
              "name": "Image",
              "type": "string",
              "value": "={{ $json.images[0].url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "839370cd-a1f0-4114-aeb3-c2f5abd51d0b",
      "name": "Format Facebook Post",
      "type": "n8n-nodes-base.set",
      "position": [
        1520,
        32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b58d7016-b4e0-4887-8616-06f4780dc70b",
              "name": "platform",
              "type": "string",
              "value": "={{ $('Generate Posts with GPT-4o').item.json.message.content.output[1].platform }}"
            },
            {
              "id": "3bcc242c-210f-4848-8a28-d01d9159dfe1",
              "name": "Content",
              "type": "string",
              "value": "={{ $('Generate Posts with GPT-4o').item.json.message.content.output[1].post }}"
            },
            {
              "id": "58b4ef74-6a64-4273-84be-46b9d4e4daa2",
              "name": "Image",
              "type": "string",
              "value": "={{ $json.images[0].url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "06411636-bbcb-4348-8ff4-e2e80ffe61bf",
      "name": "Format LinkedIn Post",
      "type": "n8n-nodes-base.set",
      "position": [
        1504,
        288
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b58d7016-b4e0-4887-8616-06f4780dc70b",
              "name": "platform",
              "type": "string",
              "value": "={{ $('Generate Posts with GPT-4o').item.json.message.content.output[2].platform }}"
            },
            {
              "id": "3bcc242c-210f-4848-8a28-d01d9159dfe1",
              "name": "Content",
              "type": "string",
              "value": "={{ $('Generate Posts with GPT-4o').item.json.message.content.output[2].post }}"
            },
            {
              "id": "58b4ef74-6a64-4273-84be-46b9d4e4daa2",
              "name": "Image",
              "type": "string",
              "value": "={{ $json.images[0].url }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9371626a-014d-435b-9fba-d6e70f649465",
      "name": "Save Instagram Post to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1712,
        -224
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "platform",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Image",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1459475959,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit#gid=1459475959",
          "cachedResultName": "Social media post"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit?usp=drivesdk",
          "cachedResultName": "Youtube Video/Creators"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "876f0644-4c8c-4f9e-a2c0-c90db4813ef5",
      "name": "Save Facebook Post to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1728,
        32
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "platform",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Image",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1459475959,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit#gid=1459475959",
          "cachedResultName": "Social media post"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit?usp=drivesdk",
          "cachedResultName": "Youtube Video/Creators"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "21220afc-832c-4020-a268-bef07161b2ff",
      "name": "Save LinkedIn Post to Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1744,
        288
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "platform",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Image",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1459475959,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit#gid=1459475959",
          "cachedResultName": "Social media post"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit?usp=drivesdk",
          "cachedResultName": "Youtube Video/Creators"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "70bf8926-5b7c-4fd3-8cc6-50a18b424c9b",
      "name": "Merge Post Results",
      "type": "n8n-nodes-base.merge",
      "position": [
        2000,
        16
      ],
      "parameters": {
        "numberInputs": 3
      },
      "executeOnce": true,
      "typeVersion": 3.2
    },
    {
      "id": "a632becc-7fd6-4305-b605-e3207b9c55f0",
      "name": "Update Topic Status in Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2240,
        32
      ],
      "parameters": {
        "columns": {
          "value": {
            "Searched?": "Yes",
            "Youtube Topics": "={{ $('Get Unsearched Topic from Google Sheet').item.json['Youtube Topics'] }}"
          },
          "schema": [
            {
              "id": "Youtube Topics",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Youtube Topics",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Searched?",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Searched?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Youtube Topics"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit#gid=0",
          "cachedResultName": "YouTube Topics"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Jq2UpzUq8lBMNJxezZLErnlqH4z7tKI2h2jONNA3lEc/edit?usp=drivesdk",
          "cachedResultName": "Youtube Video/Creators"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.7
    },
    {
      "id": "bea5de1e-973b-4da3-97dd-12d79152d3a4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        -464
      ],
      "parameters": {
        "width": 1088,
        "height": 704,
        "content": "## \ud83e\udde0 Auto-Generate Social Media Posts from YouTube Videos\n\nThis workflow takes a topic from Google Sheets, finds a matching YouTube video via Dumpling AI, and generates tailored posts for **Instagram**, **Facebook**, and **LinkedIn** using GPT-4o.\n\nEach post comes with a matching **AI-generated image**, and the results are saved to a \u201cSocial Media Post\u201d sheet.\n\n### Flow:\n1. Trigger on schedule\n2. Fetch a topic from Google Sheets\n3. Search YouTube via Dumpling AI\n4. Pick the best match using GPT-4o\n5. Get transcript + generate platform-specific posts\n6. Generate images for each post\n7. Save results to Google Sheets\n8. Mark topic as processed\n\n\u2705 Use your Dumpling + OpenAI credentials (no hardcoded API keys)  \n\u2705 Required Sheets:\n- **YouTube Topics** (with `Youtube Topics`, `Searched?`)\n- **Social Media Post** (with `platform`, `Content`, `Image`)\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "fd3a39da-191a-4e81-9469-bc912ae68490",
  "connections": {
    "Merge Post Results": {
      "main": [
        [
          {
            "node": "Update Topic Status in Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Facebook Post": {
      "main": [
        [
          {
            "node": "Save Facebook Post to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format LinkedIn Post": {
      "main": [
        [
          {
            "node": "Save LinkedIn Post to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Instagram Post": {
      "main": [
        [
          {
            "node": "Save Instagram Post to Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger Search Schedule": {
      "main": [
        [
          {
            "node": "Get Unsearched Topic from Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Video List for AI": {
      "main": [
        [
          {
            "node": "Select Best Video with GPT-4o",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Posts with GPT-4o": {
      "main": [
        [
          {
            "node": "Generate Instagram Image (Dumpling AI)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate Facebook Image (Dumpling AI)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate LinkedIn Image (Dumpling AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Facebook Post to Sheet": {
      "main": [
        [
          {
            "node": "Merge Post Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Save LinkedIn Post to Sheet": {
      "main": [
        [
          {
            "node": "Merge Post Results",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Filter + Sort YouTube Videos": {
      "main": [
        [
          {
            "node": "Prepare Video List for AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Transcript (Dumpling AI)": {
      "main": [
        [
          {
            "node": "Generate Posts with GPT-4o",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Instagram Post to Sheet": {
      "main": [
        [
          {
            "node": "Merge Post Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Select Best Video with GPT-4o": {
      "main": [
        [
          {
            "node": "Get Transcript (Dumpling AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search YouTube via Dumpling AI": {
      "main": [
        [
          {
            "node": "Filter + Sort YouTube Videos",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Facebook Image (Dumpling AI)": {
      "main": [
        [
          {
            "node": "Format Facebook Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate LinkedIn Image (Dumpling AI)": {
      "main": [
        [
          {
            "node": "Format LinkedIn Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Instagram Image (Dumpling AI)": {
      "main": [
        [
          {
            "node": "Format Instagram Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Unsearched Topic from Google Sheet": {
      "main": [
        [
          {
            "node": "Search YouTube via Dumpling AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}