{
  "id": "X52ISocdrOj6Xe7O",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Auto Post to TT, YTshort , IG and have an AirTable CMS",
  "tags": [
    {
      "id": "brop5wFRxo4JYzg2",
      "name": "Social Media",
      "createdAt": "2025-12-04T18:57:35.485Z",
      "updatedAt": "2025-12-04T18:57:35.485Z"
    }
  ],
  "nodes": [
    {
      "id": "71b6eaac-9c7d-4260-8f10-052a2af0d6a5",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1904,
        -96
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b3442862-fddc-4c27-9cc2-6e8f17620bdc",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "disabled": true,
      "position": [
        -1184,
        -224
      ],
      "parameters": {
        "unit": "minutes",
        "amount": "={{ $json.minutes }}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "37f21ded-3ddb-46e6-be55-27e8a0b3bebb",
      "name": "Search records",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -848,
        -224
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appSMmrt9jFq87S5g",
          "cachedResultUrl": "https://airtable.com/appSMmrt9jFq87S5g",
          "cachedResultName": "My Social Media CMS"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQdeD8hrSvGUnzS",
          "cachedResultUrl": "https://airtable.com/appSMmrt9jFq87S5g/tblQdeD8hrSvGUnzS",
          "cachedResultName": "Content Worfklow"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "AND({Publish}, {Status} = \"In Publish Queue\")"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "352f1546-cadd-4403-ba8d-37ec7817a5d9",
      "name": "Update record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -320,
        624
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appSMmrt9jFq87S5g",
          "cachedResultUrl": "https://airtable.com/appSMmrt9jFq87S5g",
          "cachedResultName": "My Social Media CMS"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQdeD8hrSvGUnzS",
          "cachedResultUrl": "https://airtable.com/appSMmrt9jFq87S5g/tblQdeD8hrSvGUnzS",
          "cachedResultName": "Content Worfklow"
        },
        "columns": {
          "value": {
            "id": "={{ $('Search records').item.json.id }}",
            "Title": "={{ $('title 2').item.json.message.content }}",
            "Status": "Published",
            "Publish": false,
            "File URL": "={{ $('build ready linl').item.json.Link }}",
            "Tags for YT": "={{ $('YouTube tags').item.json.message.content }}",
            "Full Caption IG": "={{ $('title 2').item.json.message.content }}\n\n\n{{ $json.message.content }}\n{{ $('IG hashtags').item.json.message.content }}",
            "Full Caption TT": "={{ $('title 2').item.json.message.content }}\n\n\n{{ $json.message.content }}\n{{ $('hashtags YT , TT').item.json.message.content }}",
            "Hashtags for IG": "={{ $('IG hashtags').item.json.message.content }}",
            "Full Caption YouTube": "={{ $('title 2').item.json.message.content }}\n\n{{ $('Creare Description YT').item.json.message.content }}\n",
            "Hashtags for TT and YT": "={{ $('hashtags YT , TT').item.json.message.content }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "recordId",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "recordId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "File",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Custom Caption",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Custom Caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Hashtag Presets",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Hashtag Presets",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Caption TT",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Full Caption TT",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "File URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "File URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Accounts",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Accounts",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Platform",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish",
              "type": "boolean",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Publish",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "New",
                  "value": "New"
                },
                {
                  "name": "In Progress",
                  "value": "In Progress"
                },
                {
                  "name": "In Publish Queue",
                  "value": "In Publish Queue"
                },
                {
                  "name": "Published",
                  "value": "Published"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Hashtags for IG",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Hashtags for IG",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Hashtags for TT and YT",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Hashtags for TT and YT",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tags for YT",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Tags for YT",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Caption IG",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Full Caption IG",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Caption YouTube",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Full Caption YouTube",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Hashtags",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Hashtags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e2c395a4-e517-4eb7-82bd-21c624d0e58d",
      "name": "Create Container",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        736,
        432
      ],
      "parameters": {
        "edge": "media",
        "node": "17841475802271003",
        "options": {
          "queryParameters": {
            "parameter": [
              {
                "name": "video_url",
                "value": "={{ $json.fields.File[0].url }}"
              },
              {
                "name": "media_type",
                "value": "REELS"
              },
              {
                "name": "caption",
                "value": "={{ $json.fields['Full Caption IG'] }}"
              }
            ]
          }
        },
        "graphApiVersion": "v23.0",
        "httpRequestMethod": "POST"
      },
      "credentials": {
        "facebookGraphApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "df518912-7d3f-4476-bae3-78388f9c1a05",
      "name": "Post to IG",
      "type": "n8n-nodes-base.facebookGraphApi",
      "position": [
        1408,
        432
      ],
      "parameters": {
        "edge": "media_publish",
        "node": "17841475802271003",
        "options": {
          "queryParameters": {
            "parameter": [
              {
                "name": "creation_id",
                "value": "={{ $json.id }}"
              }
            ]
          }
        },
        "graphApiVersion": "v23.0",
        "httpRequestMethod": "POST"
      },
      "credentials": {
        "facebookGraphApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c8d059a4-f9a1-439d-8ac3-5876ac7c28d3",
      "name": "Wait1",
      "type": "n8n-nodes-base.wait",
      "position": [
        1024,
        432
      ],
      "parameters": {
        "amount": 80
      },
      "typeVersion": 1.1
    },
    {
      "id": "c202293a-8136-4aa1-9501-455c3e5d82ff",
      "name": "Transcribe a recording",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        512,
        -224
      ],
      "parameters": {
        "options": {},
        "resource": "audio",
        "operation": "transcribe"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "cd9593f4-c33e-4e0d-b210-aa85843d0c1f",
      "name": "Creare Description YT",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3152,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "CHATGPT-4O-LATEST"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a YouTube SEO expert copywriter, and your task is to come up with YouTube video description, for a video that is going to be posted to my channel named Iliyan Ivanov. Upon receiving a video's transcript and main keyword, write me a description for the video.\nFollow the below instructions and guidelines to come up with the best possible YouTube description for the provided video.\n\n\n\n\n\nOptimal Description Length and Structure\n\n1.Character Limits and Guidelines\nYouTube allows up to 5,000 characters for video descriptions, but the most effective descriptions follow a strategic structure rather than simply maximizing length\nAim for 200-250 words minimum to give YouTube sufficient context about your video\n\nThe first 100-150 characters appear above the \"show more\" fold on mobile and desktop\n\nFocus your effort on the first 2-3 sentences since this is what viewers see in search results\n\n2.The Two-Part Structure\nThink of your description as having two distinct sections\nAbove the fold (first 2-3 sentences): Critical for both SEO and click-through rates\nBelow the fold: Additional context, links, and supplementary information\n - Place the primary keyword within the first 25 words of your description.\n - Include your main keyword 2-3 times throughout the description \n  -Use related keywords and synonyms to provide context while avoiding keyword stuffing at any cost\n\n\nThe Perfect Description Template\nHere's a proven structure that maximizes both SEO and engagement\n\nEssential Components in Order\n\nOpening Hook (1-3 sentences)\n-Clear explanation of what the video covers\n-Include primary keyword naturally\n-Focus on the benefit viewers will receive\n - Mention the creator in third eye speaking: example : Iliyan Ivanov explains ....\n\nMain Call-to-Action\n-Your primary link or conversion goal\n-Place this as the second element while attention is high\n\n\nMore Detailed Description of the video:\n - right after the main call-to action part.\n - describe the video in a little more detail\n - include a little context and storytelling\n\n\n\nEngagement Invitation\n-Ask viewers to comment, like, or subscribe\n-Pose a specific question to encourage discussion\n\nSecondary Links and Resources\n-Social media profiles\n-Related videos or playlists\n-Resources mentioned in the video\n\n\nAbout This Channel Section:\n-Brief summary using keyword variations\n-Provides additional context for the algorithm\n\n\n-Hashtags (3-5 maximum)\n-Include relevant hashtags at the end\n-Don't exceed 5 hashtags total \n\n\nKey Takeaways\nEffective YouTube descriptions in 2025 require a balance between algorithm optimization and human appeal. Focus on:\n-Writing 200+ words with your primary keyword in the first 25 words\n-Creating unique descriptions for every video rather than using templates\n-Structuring content strategically with the most important information first\n-Using natural language that includes keywords without stuffing\n-Including clear CTAs.\n - Always include proper spacings, double line breaks between the different parts of the structure and the main points and paragraphs.\n\n\nExample input: You receive this main keyword and this video transcript:\n\n\n\n\nPerfect output:\n\nDiscover the educational platform that offers 10 different millionaire-making skills for less than your monthly streaming subscription. After 5 years of university and testing countless online courses, I reveal why this beats traditional education.\n\n\ud83c\udfaf Join The Real World: [affiliate link here]\n\n\nAfter years of university and countless online courses, I've found the one organization that delivers unparalleled value. For just $50 a month, The Real World provides access to over 10 different campuses where you can master high-income skills like e-commerce, copywriting, crypto, and more.\n\nIn this video, I break down the three core reasons this platform is superior to any traditional or online alternative:\n\nExtreme Variety: Learn skills that can actually make you a millionaire.\nExpert Support: Get your questions answered live by professors who have already achieved massive success in their field.\nUnmatched Community: Network with a global community of ambitious individuals, captains of industry, and even have the chance to connect with figures like Andrew Tate.\nThis isn't just another online course\u2014it's a gold mine of connections and a direct path to building wealth and freedom.\n\n\n\ud83d\udca1 Challenge: Think there's a better educational platform? Drop it in the comments - I'll personally test it and if you're right, I'll send you $50 to try The Real World.\n\n\ud83d\udcf1 Connect With Me:\n\nMy Business Portfolio: www.elian-evanov.com\nInstagram: @[your handle]\nTwitter/X: @[your handle]\n\ud83d\udd17 Resources Mentioned:\n\nThe Real World: [Your affiliate link]\nMy Business Website: www.iliyan-ivanov.com\n\n\nAbout This Channel: I share real entrepreneurship insights from running two successful companies. No theory, just practical strategies that work. Subscribe for weekly videos on business, high-income skills, and escaping the traditional career path.\n\n#TheRealWorld #OnlineEducation #HighIncomeSkills #Entrepreneurship #BusinessMentorship\n\n"
            },
            {
              "content": "=Transcript: {{ $('Transcribe a recording').item.json.text }}\n\nMain Keyword:{{ $('pick out main keyword').item.json.message.content }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "4b109baa-2071-4ab0-b6f1-4db269957275",
      "name": "pick out main keyword",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        864,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5",
          "cachedResultName": "GPT-5"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are provided with a video transcript. You are a professional transcript analyzer who needs to connect the transcript received with the most relevant keyword that it resembles with. The keyword will be used as the main keyword for the video and it will be used as a hashtag in social media. Analyze the transcript carefully and return only as plain text the best possible main keyword.\n\nTranscript:\n {{ $json.text }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "d48d77ce-5bb0-4cae-997b-e78bbc16ae43",
      "name": "come up with tittle",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        1312,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-pro-preview-03-25",
          "cachedResultName": "models/gemini-2.5-pro-preview-03-25"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Main keyword:{{ $json.message.content }}\nTranscript:{{ $('Transcribe a recording').item.json.text }}"
            },
            {
              "role": "model",
              "content": "You are a professional YouTube marketing and SEO expert, specialized in writing YouTube video titles that are engaging and drive high CTR.\nYou will be provided with a video transcript and a main keyword , and upon receiving the transcript you will need to come up with 1 video title only.\n\nFollow all the below lessons,  guidelines and instructions to create the best possible video titles.\n\n\n1.Promise a Clear Benefit or Outcome:\u00a0Your title should answer the viewer's unspoken question: \"What's in it for me?\". Frame your title around the solution or transformation your video provides.\n\n\n2.. Inject Emotion and Curiosity:\u00a0Use \"power words\" that evoke strong emotions like excitement, fear, or urgency. Phrases that create a \"curiosity gap\" make viewers feel they need to click to get the answer (e.g., \"The ONE Mistake Every Beginner Makes\")\n\nCreate Emotional Triggers\n\nThe best titles make viewers\u00a0feel something. Target these emotions:\n\n- Curiosity: \"What No One Tells You About YouTube Growth\"\n- Urgency: \"Watch This Before Your Next Upload\"\n- FOMO: \"The YouTube Strategy Everyone's Using in 2025\"\n- Authority: \"Expert research of 10 countries, showed this happiest people group\"\n\nPower words examples:\nEmotion Type: Curiosity- secret, hidden, shocking , unbelievable(and many more)\tEffective Power Words\nEmotion type: Authority - Expert, Best, Proven, Ultimate, (and many more)\nEmotion type: Urgency - Now, Fast, Instantly, 2025, (and many more)\n\n\n3.Use Numbers and Lists (if possible):\u00a0Titles with numbers promise a structured, easy-to-digest format. \nExamples:\u00a0\"7 Ways to...\" is often more clickable than \"How to...\", because it sets clear expectations.\n\nExamples of \"Lists\"- Top 5, 3 Steps, 10 Mistakes\n\n4.The most effective YouTube titles follow this structure:\n\n**Primary Keyword + Hook/Value Proposition + Power Words**\n\nExamples of this formula in action:\n\n- \"YouTube SEO(primary keyword): Best Titles to Rank #1 FAST!\"\n- \"Stop Doing This! YouTube Title Mistakes(primary keyword) Killing Your Views\"\n- \"How to Rank #1 on YouTube (Secret SEO Tricks!)\"\n\n Key Takeaways\n\n- **Keep titles between 40-60 characters**\u00a0for optimal visibility\n- **Front-load your primary keyword**\u00a0at the beginning\n- **Use the formula**: Keyword + Hook + Power Words\n- **Include numbers**\u00a0when relevant for higher CTR\n- **Prioritize mobile display**\u00a0- ensure key info appears in first 40 characters\n\n\nExamples of good vs bad titles:\n\nExample 1:\nBoring / Old SEO Title - How to Make Sourdough Bread\nOptimized 2025 Title - My 5 Secrets\u00a0to PERFECT Sourdough (No-Knead Method)\nWhy It Works: Uses a number, promises a secret, specifies a benefit (no-knead), and uses an emotional word (PERFECT).\n\nExample 2:\nBoring / Old SEO Title - iPhone 15 Review\nOptimized 2025 Title - iPhone 15 Review:\u00a0The Brutal Truth\u00a0After 30 Days\nWhy It Works:Creates curiosity and implies an honest, in-depth review that goes beyond a standard unboxing.\n\nExample 3:\nBoring / Old SEO Title - Starting a YouTube Channel\nOptimized 2025 Title - YouTube is on Easy Mode in 2025\u00a0(If You Do This)\nWhy It Works:Uses a trending power phrase (\"Easy Mode\"), creates urgency with the year, and builds immense curiosity.\n\nExample 4: \nexamples:\n- **Bad:**\u00a0\"Fix Your Slice in 5 Minutes\"\n- **Better:**\u00a0\"This 5-Minute Drill Will Fix Your Golf Slice Forever\"\n\nRETURN ONLY THE BEST POSSIBLE TITLE AS PLAIN TEXT\n"
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1a7629ef-a82e-4ccd-aa06-52c1c859370f",
      "name": "title 2",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1680,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "CHATGPT-4O-LATEST"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Main keyword:{{ $('pick out main keyword').item.json.message.content }}\nTranscript:{{ $('Transcribe a recording').item.json.text }}"
            },
            {
              "role": "system",
              "content": "You are a professional YouTube marketing and SEO expert, specialized in writing YouTube video titles that are engaging and drive high CTR.\nYou will be provided with a video transcript and a main keyword , and upon receiving the transcript you will need to come up with 1 video title only.\n\nFollow all the below lessons,  guidelines and instructions to create the best possible video titles.\n\n\n1.Promise a Clear Benefit or Outcome:\u00a0Your title should answer the viewer's unspoken question: \"What's in it for me?\". Frame your title around the solution or transformation your video provides.\n\n\n2.. Inject Emotion and Curiosity:\u00a0Use \"power words\" that evoke strong emotions like excitement, fear, or urgency. Phrases that create a \"curiosity gap\" make viewers feel they need to click to get the answer (e.g., \"The ONE Mistake Every Beginner Makes\")\n\nCreate Emotional Triggers\n\nThe best titles make viewers\u00a0feel something. Target these emotions:\n\n- Curiosity: \"What No One Tells You About YouTube Growth\"\n- Urgency: \"Watch This Before Your Next Upload\"\n- FOMO: \"The YouTube Strategy Everyone's Using in 2025\"\n- Authority: \"Expert research of 10 countries, showed this happiest people group\"\n\nPower words examples:\nEmotion Type: Curiosity- secret, hidden, shocking , unbelievable(and many more)\tEffective Power Words\nEmotion type: Authority - Expert, Best, Proven, Ultimate, (and many more)\nEmotion type: Urgency - Now, Fast, Instantly, 2025, (and many more)\n\n\n3.Use Numbers and Lists (if possible):\u00a0Titles with numbers promise a structured, easy-to-digest format. \nExamples:\u00a0\"7 Ways to...\" is often more clickable than \"How to...\", because it sets clear expectations.\n\nExamples of \"Lists\"- Top 5, 3 Steps, 10 Mistakes\n\n4.The most effective YouTube titles follow this structure:\n\n**Primary Keyword + Hook/Value Proposition + Power Words**\n\nExamples of this formula in action:\n\n- \"YouTube SEO(primary keyword): Best Titles to Rank #1 FAST!\"\n- \"Stop Doing This! YouTube Title Mistakes(primary keyword) Killing Your Views\"\n- \"How to Rank #1 on YouTube (Secret SEO Tricks!)\"\n\n Key Takeaways\n\n- **Keep titles between 40-60 characters**\u00a0for optimal visibility\n- **Front-load your primary keyword**\u00a0at the beginning\n- **Use the formula**: Keyword + Hook + Power Words\n- **Include numbers**\u00a0when relevant for higher CTR\n- **Prioritize mobile display**\u00a0- ensure key info appears in first 40 characters\n\n\nExamples of good vs bad titles:\n\nExample 1:\nBoring / Old SEO Title - How to Make Sourdough Bread\nOptimized 2025 Title - My 5 Secrets\u00a0to PERFECT Sourdough (No-Knead Method)\nWhy It Works: Uses a number, promises a secret, specifies a benefit (no-knead), and uses an emotional word (PERFECT).\n\nExample 2:\nBoring / Old SEO Title - iPhone 15 Review\nOptimized 2025 Title - iPhone 15 Review:\u00a0The Brutal Truth\u00a0After 30 Days\nWhy It Works:Creates curiosity and implies an honest, in-depth review that goes beyond a standard unboxing.\n\nExample 3:\nBoring / Old SEO Title - Starting a YouTube Channel\nOptimized 2025 Title - YouTube is on Easy Mode in 2025\u00a0(If You Do This)\nWhy It Works:Uses a trending power phrase (\"Easy Mode\"), creates urgency with the year, and builds immense curiosity.\n\nExample 4: \nexamples:\n- **Bad:**\u00a0\"Fix Your Slice in 5 Minutes\"\n- **Better:**\u00a0\"This 5-Minute Drill Will Fix Your Golf Slice Forever\"\n\nRETURN ONLY THE BEST POSSIBLE TITLE AS PLAIN TEXT\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "18229476-c43f-4238-bea8-2ca0a8c732fd",
      "name": "IG hashtags",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2784,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4",
          "cachedResultName": "GPT-4"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Take the below  5 hashtags that will be used in the description of my YouTube video and give me 4 more closely related hashtags to add to the list. Return only the 9 hashtags(the 5 that I am providing you + the 4 that you come up with) as plain text , one after the other.\n\n{{ $json.message.content }}\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "c00c5f9e-949c-4f05-9a83-c18ae2b8d371",
      "name": "hashtags YT , TT",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2432,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "CHATGPT-4O-LATEST"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You are a YouTube SEO expert, and your task is to come up with YouTube video hashtags, for a video that is going to be posted to my channel. Name of channel: Iliyan Ivanov\nUpon receiving the video's transcript and main keyword, you need to return a maximum of 5 hashtags.\n\n\n- **Mix hashtag types**:\n     - One hashtag that is going to be exactly the main keyword of the video.(#socialmediaautomation)\n    - One branded hashtag for community building (the name of the channel - #IliyanIvanov\n    - One content category hashtags (#aiautomation)\n    - Two specific topic hashtags (#n8nsocialmediaautomation)\n\nReturn , only the hashtags , one after the other!"
            },
            {
              "content": "=Transcript: {{ $('Transcribe a recording').item.json.text }}\n\nKeyword:{{ $('pick out main keyword').item.json.message.content }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "a380a54d-1e29-4fe0-904c-29dc4b000f46",
      "name": "Instagram Description and TikTok ",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3536,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4",
          "cachedResultName": "GPT-4"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=I am providing you with a youtube Video Description. In this description you will see many things like , links , engagement pushes pushing the audience to comment , about the channel info, but most importantly information about the content of the video.From the provided video description , please take out just the parts describing the content of the video. Return to me as a plain text , the parts describing the content of the video connected.\n\nVideo Description:{{ $json.message.content }}"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "4592000f-ae67-4982-bca0-d132a7b7b729",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1904,
        -432
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "9b26cf2f-2c77-4773-9d3e-676c119e3a56",
      "name": "random minutes",
      "type": "n8n-nodes-base.code",
      "position": [
        -1472,
        -224
      ],
      "parameters": {
        "jsCode": "const randomMinutes = Math. floor (Math. random() * 600) + 1;\nconst delayMs = randomMinutes * 60 * 1000;\n\nreturn [\n{\njson: {\ndelay: delayMs,\nminutes: randomMinutes\n}\n}\n  ];"
      },
      "typeVersion": 2
    },
    {
      "id": "13b6dbc9-e148-4fef-8e4f-8636af7f1bae",
      "name": "limit 1",
      "type": "n8n-nodes-base.limit",
      "position": [
        -544,
        -224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "4e1bb226-5ca3-4b4e-8a82-f774dd8afba1",
      "name": "get the file",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -304,
        -224
      ],
      "parameters": {
        "url": "={{ $json.File[0].url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "58f80636-9061-46f3-8c37-b5ae366d8ee4",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1504,
        464
      ],
      "parameters": {
        "width": 1376,
        "height": 448,
        "content": "## Get A New Video URL and Update Airtable records \n"
      },
      "typeVersion": 1
    },
    {
      "id": "2d2fc21e-f37c-47b8-815d-8b57f1596ed8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2768,
        -592
      ],
      "parameters": {
        "width": 672,
        "height": 1136,
        "content": "## Auto-post to the 3 main social media platforms  - Youtube , Instagram and TikTok for **FREE**. Have custom content managing system which will enable you to track all your posts.\n\n### **This is the ONLY FREE WAY to do it . The other options to achieve the same thing are paid - they include services like Blotato , Postiz and more I can't name now.**\n\nThe benefit of being FREE however, ads a few additional steps that need to be done that take some set-up, but they are of extreme value for your future projects as well - for all the steps you will find dedicated tutorial videos.\n\n\n\n## How it works :\n\n### 1. Set random muinutes (to avoid social media automation detectors) \n take a video from your video CMS - content management system - Airtable in that case: \n**Video on how to set-up Airtable you can find here** \n\n###  **2.Use AI to write captions , hashtags and SEO for each platform**\n\n###  **3. update Airtable with  video details**\n\n###  **4.Upload to social medias**\n\n\n## Requirements:\n\n**Youtube API set-up**\n**Meta bussines suite set-up**\n**OpenAI API Key**\n**Google Sheets API**\n**Buffer Account**\n**Zapier Account**\n\n**All of these mini-tutorials you can find inside of my channel.**\n\n\n## Need help ?\n# Watch the YouTube video tutorial on how to set-up the workflow:\n"
      },
      "typeVersion": 1
    },
    {
      "id": "286b5da0-589d-4a9f-aea1-54f076c008a6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1520,
        -400
      ],
      "parameters": {
        "color": 3,
        "width": 1376,
        "height": 480,
        "content": "## In random minutes get  ONE file from Airtable CMS"
      },
      "typeVersion": 1
    },
    {
      "id": "eb02c643-c505-4829-9cf0-c48d63bc8557",
      "name": "convert to mp3",
      "type": "@cloudconvert/n8n-nodes-cloudconvert.cloudConvert",
      "position": [
        112,
        -224
      ],
      "parameters": {
        "outputFormat": "mp3"
      },
      "credentials": {
        "cloudConvertOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c46e7841-768e-4dcb-8005-2dc9891c30c0",
      "name": "YouTube tags",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2048,
        -224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "CHATGPT-4O-LATEST"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Transcript:  {{ $('Transcribe a recording').item.json.text }}\n\nmain keyword:{{ $('pick out main keyword').item.json.message.content }}"
            },
            {
              "content": "You are a YouTube SEO expert, and your task is to come up with YouTube video tags, for a video that is going to be posted to my channel -Iliyan Ivanov. Upon receiving the video's transcript and main keyword, you need to return a maximum of 350 character long lags list.\nFollow the below instructions and guidelines to come up with the best possible YouTube tags for the provided video.\n\nTags are minor. Use them mainly for misspellings, acronyms, and close variants -done\n\nGuideline\n1.add the primary keyword of the video as the first tag\n2.Include 1-2 broader category tags\n3. Add the channel's name as a tag - name of channel: Iliyan Ivanov\n4. Fill remaining space with specific long-tail variations\n5. Include 2-3 variations or related terms\n\nReturn only the generated tags as plain text.\n"
            }
          ]
        }
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "8b92cd30-3fd0-4909-bbc1-4f48ae7f9aa9",
      "name": "Upload to Temp Files",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1184,
        624
      ],
      "parameters": {
        "url": "https://tmpfiles.org/api/v1/upload",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "fb705ec1-e892-4cdd-944e-cc87248a4e88",
      "name": "get video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1440,
        624
      ],
      "parameters": {
        "url": "={{ $('limit 1').item.json.File[0].url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "c251cc2c-7e61-460f-830e-6dfed1d174a0",
      "name": "build ready linl",
      "type": "n8n-nodes-base.set",
      "position": [
        -656,
        624
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d049f42b-dabf-449a-8605-1c23b06661a2",
              "name": "=Link",
              "type": "string",
              "value": "=http://tmpfiles.org/dl/{{ $json.fileNumber }}/{{ $json.fileName }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "83fb4083-6afd-4924-9f14-b2fc35f4f02b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -400
      ],
      "parameters": {
        "color": 4,
        "width": 3360,
        "height": 480,
        "content": "##  Use AI to generate captions , hastags, tags, , descriptions for each platform - ALL SEO OPTIMIZED"
      },
      "typeVersion": 1
    },
    {
      "id": "a7006c65-3b82-49ee-af3e-6395980e1fea",
      "name": "Post to TT",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        736,
        656
      ],
      "parameters": {
        "columns": {
          "value": {
            "Record ID": "={{ $json.id }}"
          },
          "schema": [
            {
              "id": "Record ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Record ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Record ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jl-WBqloEmIC36dV6xLqjhid6RGCFlqjOjhPdWAroJU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1jl-WBqloEmIC36dV6xLqjhid6RGCFlqjOjhPdWAroJU",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1jl-WBqloEmIC36dV6xLqjhid6RGCFlqjOjhPdWAroJU/edit?usp=drivesdk",
          "cachedResultName": "Record ID pulling Zapier"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "236ab7be-cdbc-4187-80f5-1ed22f8d55e0",
      "name": "build link part 1",
      "type": "n8n-nodes-base.code",
      "position": [
        -944,
        624
      ],
      "parameters": {
        "jsCode": "const url = $input.first().json.data.url\n\nconst match = url.match(/tmpfiles\\.org\\/(\\d+)\\/([^\\/?#]+)/);\n\nif (match && match[1] && match[2]) {\nreturn [\n  {\njson: {\nfileNumber: match[1],\nfileName: match[2]\n}\n}\n];\n} else {\nthrow new Error(\"Could not extract file number or file name from URL\");\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "382aabff-5431-4323-8fca-8f409adf6861",
      "name": "Post to YT",
      "type": "n8n-nodes-base.youTube",
      "position": [
        720,
        912
      ],
      "parameters": {
        "title": "={{ $('title 2').item.json.message.content }}",
        "options": {
          "tags": "=shorts, {{ $('YouTube tags').item.json.message.content }}",
          "description": "={{ $('Creare Description YT').item.json.message.content }}{{ $json.fields['Hashtags for TT and YT'] }}",
          "privacyStatus": "public",
          "notifySubscribers": true,
          "publicStatsViewable": true
        },
        "resource": "video",
        "operation": "upload",
        "categoryId": "27",
        "regionCode": "US"
      },
      "credentials": {
        "youTubeOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a21381f9-8afa-4be0-9799-180dfdec0e69",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        272
      ],
      "parameters": {
        "color": 2,
        "width": 1296,
        "height": 912,
        "content": "## POST TO ALL SOCIAL MEDIAS\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "cdedd59a-120f-4d9d-b109-ccbfa82e15ae",
  "nodeGroups": [],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Search records",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Post to IG",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "limit 1": {
      "main": [
        [
          {
            "node": "get the file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "title 2": {
      "main": [
        [
          {
            "node": "YouTube tags",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get video": {
      "main": [
        [
          {
            "node": "Upload to Temp Files",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IG hashtags": {
      "main": [
        [
          {
            "node": "Creare Description YT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "YouTube tags": {
      "main": [
        [
          {
            "node": "hashtags YT , TT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "get the file": {
      "main": [
        [
          {
            "node": "convert to mp3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update record": {
      "main": [
        [
          {
            "node": "Post to YT",
            "type": "main",
            "index": 0
          },
          {
            "node": "Create Container",
            "type": "main",
            "index": 0
          },
          {
            "node": "Post to TT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search records": {
      "main": [
        [
          {
            "node": "limit 1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "convert to mp3": {
      "main": [
        [
          {
            "node": "Transcribe a recording",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "random minutes": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Container": {
      "main": [
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "random minutes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "build ready linl": {
      "main": [
        [
          {
            "node": "Update record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "hashtags YT , TT": {
      "main": [
        [
          {
            "node": "IG hashtags",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "build link part 1": {
      "main": [
        [
          {
            "node": "build ready linl",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "come up with tittle": {
      "main": [
        [
          {
            "node": "title 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to Temp Files": {
      "main": [
        [
          {
            "node": "build link part 1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Creare Description YT": {
      "main": [
        [
          {
            "node": "Instagram Description and TikTok ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "pick out main keyword": {
      "main": [
        [
          {
            "node": "come up with tittle",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording": {
      "main": [
        [
          {
            "node": "pick out main keyword",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Instagram Description and TikTok ": {
      "main": [
        [
          {
            "node": "get video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "random minutes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}