If you are a content creator and YouTube is where you produce your content, then this automation can help you a lot.
Today, with a lot of buzz around & the attention span going down & down every day, you must get the eyeballs to your content from wherever you can.
If you have already built YouTube shorts, why not share them on other platforms as well?
This workflow takes the link of your YouTube short and, with the help of AI, converts it into a LinkedIn post without you lifting a finger.
Let’s start building this automation. In the very end, I will also give you the blueprint for this so that you can use it as is in your workflows.
Tools used to build this automation
- Scrapingdog YouTube Transcript API (To extract the transcript of any video or shorts)
- n8n (To build our workflow)
- Google Sheets ( To Maintain the database)
Let’s start building it from scratch!
Building our Google Sheets
So, this database will hold the record for all our LinkedIn posts. It will have the link to the YouTube short, the LinkedIn post link that will get posted, and the Date when it is posted.
This is how our Google Sheet looks like.

It has a link to the YouTube shorts, a column for automation to update the LinkedIn URL once it is posted. And one column for the date, to know which post went live.
Now let’s head back to our n8n canvas.
Connecting nodes in n8n

So our workflow starts with a ‘Scheduled Trigger’. And the next node is ‘Google Sheets’, wherein we will take the YouTube Shorts link.
Here is the configuration of this node.

Now let’s test this node and see what output we get.

And as you can see, we can get all the YouTube Shorts links to the output of the sheets.
Now we have a limit node, which would help us to take one URL at a time when this workflow runs, in case there is more than one URL in the spreadsheet.
Further, we have a code node that converts the YouTube URL to the video ID.
Let me first explain to you what a video ID is, in a typical url like this one — https://www.youtube.com/shorts/dI19zJiH5ok is ‘dI19zJiH5ok’. Because the Scrapingdog’s YouTube Transcript API takes video ID as one of the input parameters.
You can read more about that in the Scrapingdog documentation here — https://docs.scrapingdog.com/youtube-scraper-api/youtube-transcripts-api
Let’s get back to our Code node. Here is the configuration of this node:

Here is the code that is used in the node:-
// Get input data from previous node
const items = $input.all();
// Loop through items and extract video ID
return items.map(item => {
const url = item.json["Video URL"];
// Regex pattern to match common YouTube video URL formats
const match = url.match(/(?:youtu\.be\/|youtube\.com\/(?:shorts\/|watch\?v=|embed\/|v\/))([\w-]{11})/);
// Extract the video ID if matched
const videoId = match ? match[1] : null;
return {
json: {
...item.json,
video_id: videoId
}
};
});
And when you run this node, you will get the one data point video ID in the output.

And now we will use the Scrapingdog’s YouTube Transcript API using the HTTP node.

You can see the configuration; the necessary parameters are api_key and v. You will get the api_key in your Scrapingdog dashboard. You can copy and paste it here.
Let’s test this node & see how we get the output.

We have got the transcript in chunks in the output. Now, since this output is in the form of an array, we will split it out and then aggregate to make it a single paragraph.
Let’s see the output after the aggregator.

Now we will feed this data to our AI node, wherein we will have some system & user prompts.
The system prompt that I am using is: –
You are a sharp LinkedIn copywriter. Style: simple, confident, no fluff, short sentences, varied lengths, UK English. Avoid clichés and corporate buzzwords. HARD RULES: Plain text only. No Markdown or formatting symbols of any kind (no *, **, _, # headers, > quotes, `code`). No bolding. Use normal sentences or a simple numbered list. 1–2 emojis max (optional). ≤ 2,800 characters.
& the user prompt that I am using is
YouTube Short transcript (cleaned): {{ $json.text }}
Context:
- Source video URL: {{ $('Get row(s) in sheet').item.json["Video URL"] }}
- Goal: turn this into a high-signal LinkedIn post.
- If there is a single standout insight, highlight it early.
- If a stat or quote appears, include it (once) with quotes.
Output:
- Hook (1–2 lines)
- Body (3–6 short paragraphs or a 4–7 point list)
- Total length ≤ 2,800 chars
- End the post with a blank line, then:
- Watch: {{ $('Get row(s) in sheet').item.json["Video URL"] }}
In the user prompt, I am also giving it the aggregated text and the video link at the very last, mentioning that the link should come in the LinkedIn post.

Now let’s test this node and see what output we get.
We will post this on LinkedIn; you can also post this on any other platform. But for the sake of this tutorial, we will keep it to LinkedIn.
Now, we will post this text on LinkedIn & the live URL gets updated on our Google Sheets.

And now the final step would be to update our database (Google Sheets) with the URL of LinkedIn.
Here’s the configuration of our Google Sheets node.

Finally, here is the blueprint for this automation that you can use as is in your n8n canvas.
The only thing you would need is access to Scrapingdog’s API Key, as well as n8n.