Gemini + LinkedIn: carousels published consistently
Posting LinkedIn carousels sounds simple until you try doing it consistently. You find a story, rewrite it, format slides, export a PDF, upload it, then craft a caption. Next day, repeat. It’s not hard work. It’s the never-ending kind.
This hits marketing managers first, because the content calendar never stops. But agency owners trying to keep multiple clients visible feel it too, and solo founders get stuck in the same loop. This Gemini LinkedIn carousels automation turns a TechRadar story into a ready-to-post carousel PDF and publishes it for you, so you can keep a steady cadence without living in Canva.
Below you’ll see how the workflow runs at 6:00 AM, how it chooses a story that fits your profile, and how PostNitro plus LinkedIn upload APIs handle the boring parts.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Gemini + LinkedIn: carousels published consistently
flowchart LR
subgraph sg0["6:00 AM Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "6:00 AM Trigger", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>On form submission"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>TechRadar News"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse HTML"]
n4@{ icon: "mdi:brain", form: "rounded", label: "Gemini Flash 2.5", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse LLM Response"]
n6@{ icon: "mdi:cog", form: "rounded", label: "ImportSlides embedPost", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Decide which News to Choose", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Linkedin User URN"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Upload URL"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload PDF"]
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Download PDF"]
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Post to LinkedIn"]
n13@{ icon: "mdi:robot", form: "rounded", label: "Gemini Generate", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Gemini Generate1", pos: "b", h: 48 }
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse LLM Response1"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Get Title and Description"]
n3 --> n7
n10 --> n14
n11 --> n10
n9 --> n11
n2 --> n3
n0 --> n2
n13 --> n15
n4 -.-> n7
n14 --> n12
n8 --> n9
n1 --> n16
n5 --> n16
n15 --> n6
n6 --> n8
n16 --> n13
n7 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n1 trigger
class n7,n13,n14 ai
class n4 aiModel
class n2,n8,n9,n10,n11,n12 api
class n3,n5,n15,n16 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n5,n8,n9,n10,n11,n12,n15,n16 customIcon
The Challenge: Posting carousels without losing your mornings
Carousels are great for reach, saves, and “I needed this” comments. The downside is the production line behind each post. You’re copying headlines from a feed, deciding what’s relevant, rewriting it into a narrative, then converting that narrative into slide-friendly chunks. After that you still have the export-and-upload dance, plus a caption that doesn’t sound like it was stitched together at the last minute. Miss two days and your “we post consistently” plan quietly dies.
It adds up fast. And the friction compounds in the same spots every time:
- Picking a daily story becomes a mini research project, especially when you’re trying to match a niche and not just repost whatever is trending.
- Carousel formatting is tedious, because slide structure needs clarity, not long paragraphs, and you end up rewriting the same idea three times.
- Uploading PDFs to LinkedIn is annoyingly manual, and doing it on a phone makes it worse.
- When someone on the team “just handles posting,” quality slips or approvals get skipped, which means the brand voice drifts over time.
The Fix: TechRadar → Gemini → PostNitro → LinkedIn, fully automated
This workflow runs every morning at 6:00 AM (or whenever you choose) and pulls the latest TechRadar news feed. It parses the RSS items into clean JSON, then Gemini evaluates which story best fits your profile and audience. Once a headline is selected, the workflow generates carousel-ready copy that’s already structured for slides, not blog paragraphs. PostNitro turns that structured content into a designed carousel and returns a PDF file. Finally, the workflow uploads the PDF to LinkedIn, generates post text with Gemini, and publishes the post using LinkedIn’s upload flow and post API calls. You can also trigger the whole thing with a form submission when you want to override the daily pick with your own title and description.
The workflow starts from a schedule trigger or a form trigger. Gemini handles both selection and writing, while PostNitro handles the visual build and PDF output. LinkedIn upload steps grab the file ID and attach it to the final post so publishing happens in one pass.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you publish 5 carousels a week. Manually, a typical run looks like 20 minutes to pick and summarize a story, about 45 minutes rewriting it into slides, another 20 minutes creating/exporting a PDF, plus 10 minutes uploading and writing a caption. That’s roughly 1.5 hours per post, or about 7 hours a week. With this automation, you spend maybe 10 minutes reviewing the generated carousel copy (or submitting a form with your own angle), then it builds the PDF and publishes while you’re doing other work.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Gemini to select stories and write carousels.
- PostNitro to render carousel slides into a PDF.
- LinkedIn API access (get it from your LinkedIn developer app settings)
Skill level: Intermediate. You’ll be connecting APIs and pasting credentials, but you won’t be writing an application.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A scheduled or manual trigger starts the run. At 6:00 AM the schedule fires automatically, or you can submit a form when you want to feed a specific title and description into the pipeline.
The workflow fetches TechRadar and cleans the feed. An HTTP request pulls the latest items, then a small code step converts the RSS output into readable JSON so the AI can evaluate it reliably.
Gemini selects the best story and writes slide-ready content. One Gemini step ranks which news item “fits” your profile, then another Gemini step generates the carousel copy as structured data that can be split into slides. A parsing step checks the response so PostNitro receives clean fields.
PostNitro renders the carousel, then LinkedIn publishes it. PostNitro returns a PDF file, the workflow initializes an upload session, uploads the PDF, gets the document ID, generates the post text, and publishes the final LinkedIn post through HTTP requests.
You can easily modify the source feed (TechRadar) to another RSS source based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Trigger Type
Set up the scheduled and manual triggers that start the workflow, so it can run daily or on-demand via form submission.
- Open Scheduled Morning Trigger and set the schedule rule to run at
6(triggerAtHour) for your daily automation. - Open Form Submission Trigger and confirm the Path is
create-carousaland Button Label isCreate Carousal. - In Form Submission Trigger, keep Form Title as
Linkedin Carousaland Response Mode aslastNode. - Ensure the form fields include Title and Description with the provided placeholders so manual submissions can route into content generation.
Step 2: Connect the News Source and Parse RSS
Fetch the RSS feed and parse items into structured JSON for AI selection.
- Configure Fetch Tech News Feed with URL set to
https://www.techradar.com/feeds.xml. - In Extract RSS Items, keep the provided JavaScript that parses the RSS XML and returns a
resultarray. - Verify the connection flow: Scheduled Morning Trigger → Fetch Tech News Feed → Extract RSS Items.
Step 3: Set Up AI Headline Selection and Summary Assembly
Use Gemini to choose the best headline, then merge the title and description into a unified summary for downstream AI steps.
- Open Gemini Flash Selector and select your Gemini model connection. Credential Required: Connect your
googlePalmApicredentials. - In Select Relevant Headline, set Text to the full prompt expression beginning with
=You are an AI assistant...and ensure it references the RSS list using{{ JSON.stringify($json.result.map((item, index) => ({ number: index+1, title: item.title })), null, 2) }}. - Confirm Gemini Flash Selector is connected as the language model for Select Relevant Headline (credentials are added on Gemini Flash Selector, not the chain node).
- In Read LLM Choice, keep the code that parses the selected number and reads from Extract RSS Items:
const item = $('Extract RSS Items').first().json.result[number]. - In Assemble Title Summary, keep Mode as
runOnceForEachItemand the code that returnscombinedTitleandcombinedDescription.
Tip: The workflow accepts both automated RSS input and manual form input, because Form Submission Trigger and Read LLM Choice both output to Assemble Title Summary.
Step 4: Generate Carousel Slides and Build the PDF
Create the carousel content with Gemini, parse the JSON into slides, and import into PostNitro to produce a PDF.
- In Generate Carousel Copy, choose model
models/gemini-2.5-flashand keep the long prompt that outputs valid JSON only. Credential Required: Connect yourgooglePalmApicredentials. - Ensure the prompt includes the expressions for input:
{{ $json.combinedTitle }}and{{ $json.combinedDescription }}. - In Parse Carousel JSON, keep the code that removes code fences and parses JSON from
$input.first().json.content.parts[0].text. - Configure PostNitro Slide Import with Operation set to
importSlides, Slides JSON set to={{ JSON.stringify( $json.slides ) }}, and replace[YOUR_ID]for both brandId and templateId. Credential Required: Connect yourpostNitroApicredentials.
⚠️ Common Pitfall: If Generate Carousel Copy returns anything other than valid JSON, Parse Carousel JSON will fail. Keep the prompt’s “Return only raw JSON” requirement intact.
Step 5: Configure LinkedIn Upload and Publishing
Upload the PostNitro PDF to LinkedIn, generate the post commentary, and publish the carousel post.
- In Retrieve LinkedIn User, set URL to
https://api.linkedin.com/v2/userinfoand use Authentication as predefined credential type. Credential Required: Connect yourlinkedInOAuth2Apicredentials. - Configure Initialize Upload Link with URL
https://api.linkedin.com/rest/documents?action=initializeUpload, MethodPOST, and JSON Body as={"initializeUploadRequest":{"owner":"urn:li:person:{{ $json.sub }}"}}. Keep headerLinkedIn-Version: 202307. Credential Required: Connect yourlinkedInOAuth2Apicredentials. - Set Fetch PDF File URL to
={{ $('PostNitro Slide Import').item.json.data.result.data }}and output the file as=my.pdfin the response settings. - In Send PDF Upload, set URL to
={{ $json.value.uploadUrl }}, Method toPUT, Content Type tobinaryData, and Input Data Field Name to=my.pdf. Include headerContent-Type: application/pdf. Credential Required: Connect yourlinkedInOAuth2Apicredentials. - In Generate Post Text, choose model
models/gemini-2.5-flashand keep the prompt that outputs raw text using{{ $('Assemble Title Summary').item.json.combinedTitle }}and{{ $('Assemble Title Summary').item.json.combinedDescription }}. Credential Required: Connect yourgooglePalmApicredentials. - In Publish LinkedIn Post, set URL to
https://api.linkedin.com/rest/posts, MethodPOST, and keep the JSON body with expressions:{{ $('Retrieve LinkedIn User').item.json.sub }},{{ JSON.stringify($json.content.parts[0].text) }},{{ $('Parse Carousel JSON').item.json.slides[0].heading }}, and{{ $('Initialize Upload Link').item.json.value.document }}. Keep headerLinkedIn-Version: 202408. Credential Required: Connect yourlinkedInOAuth2Apicredentials.
Step 6: Test and Activate Your Workflow
Run a test execution to verify the full chain from content generation to LinkedIn publishing.
- Click Execute Workflow and use either Form Submission Trigger with sample Title/Description or wait for Scheduled Morning Trigger to run.
- Confirm the flow executes in order: Fetch Tech News Feed → Extract RSS Items → Select Relevant Headline → Read LLM Choice → Assemble Title Summary → Generate Carousel Copy → Parse Carousel JSON → PostNitro Slide Import → Retrieve LinkedIn User → Initialize Upload Link → Fetch PDF File → Send PDF Upload → Generate Post Text → Publish LinkedIn Post.
- Successful execution should end with a LinkedIn post created and a valid document ID returned in Publish LinkedIn Post.
- Toggle the workflow to Active to enable daily publishing at 6 AM and on-demand submissions.
Watch Out For
- LinkedIn API credentials can expire or require extra permissions. If things break, check your LinkedIn developer app settings and token validity first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About an hour if you already have the API keys ready.
Yes, but someone needs to be comfortable with API keys and testing a few runs. No “real coding,” just careful setup and a bit of troubleshooting.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Gemini API usage and your PostNitro plan.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
You can swap the TechRadar fetch step for another RSS feed by changing the “Fetch Tech News Feed” HTTP request. If you want stricter selection, tune the prompt in the “Gemini Flash Selector” so it only picks stories in your niche. Common customizations include changing the number of slides in the generated JSON, adjusting PostNitro template and brand IDs, and routing drafts to Google Sheets before publishing.
Usually it’s expired tokens or missing LinkedIn permissions for uploads and posting. Regenerate your access token, confirm the app has the correct scopes, then update credentials in n8n and re-run one test item. If the PDF upload succeeds but publishing fails, check the “Initialize Upload Link” and “Publish LinkedIn Post” HTTP responses for a useful error message. Rate limiting can also show up if you’re running many tests in a short burst.
On n8n Cloud Starter, you can run a few thousand executions per month, which is plenty for daily posting. If you self-host, there’s no execution cap, but it depends on your server and how long PostNitro rendering takes. Practically, most teams run this once per day per brand, plus a few manual form-trigger runs for special posts.
Often, yes. This flow has multiple stages (RSS parsing, AI selection, structured JSON generation, PDF handling, multi-call LinkedIn upload), and n8n handles that kind of branching and data shaping without turning into a fragile pile of zaps. The self-hosted option matters too, because community nodes (like PostNitro’s) are common in workflows like this. Zapier or Make can still work if you simplify the process, like generating text only and uploading manually. If you want the exact “PDF carousel to LinkedIn” path and you’re unsure which route is fastest, Talk to an automation expert.
Once this is live, your LinkedIn carousel pipeline runs in the background and your mornings stay yours. Review when you want, publish consistently, and move on to the work that actually grows the business.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.