Ghost to Google Sheets, LinkedIn drafts ready fast
Publishing the article is the easy part. Promoting it on LinkedIn is where the wheels come off: you’re copying paragraphs, rewriting hooks, hunting for the link, then trying to remember if you already posted something similar last week.
This Ghost LinkedIn automation hits solo creators first, honestly. But marketing leads and small agency teams feel it too, because “we’ll share it later” turns into a messy spreadsheet and inconsistent posting.
This workflow pulls your latest Ghost posts, cleans the content, generates LinkedIn-ready drafts with GPT‑4o, then logs everything into Google Sheets so you always know what to post next.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Ghost to Google Sheets, LinkedIn drafts ready fast
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
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/>Clean HTML"]
n4["<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/ghost.svg' width='40' height='40' /></div><br/>Extract Blog Posts"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract Post Content", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Record the posts", pos: "b", h: 48 }
n7["<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/merge.svg' width='40' height='40' /></div><br/>Merge Linkedin"]
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/merge.svg' width='40' height='40' /></div><br/>Add Clean HTML"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Posts", pos: "b", h: 48 }
n1 --> n7
n3 --> n8
n8 --> n1
n8 --> n7
n7 --> n6
n9 --> n3
n9 --> n8
n6 --> n9
n2 -.-> n1
n4 --> n5
n5 --> n9
n0 --> n4
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 trigger
class n1 ai
class n2 aiModel
class n6 database
class n3 code
classDef customIcon fill:none,stroke:none
class n3,n4,n7,n8 customIcon
The Problem: LinkedIn Promotion Becomes a Second Job
Most teams don’t struggle to write the long-form post. They struggle to consistently turn that post into a sharp LinkedIn draft that sounds like a human, includes the right CTA, and doesn’t repeat the same angle every time. You open Ghost, copy the article, paste it into a doc, strip out formatting, then rewrite it into something “LinkedIn-ish.” And after all that, you still have no clean record of what you promoted, when you did it, and what copy you used.
The friction compounds. Here’s where it breaks down.
- Each article promotion turns into about 30–45 minutes of rewriting and cleanup.
- Without a log, you accidentally reuse the same hook, so your posts start sounding identical.
- HTML from Ghost gets pasted into prompts, which leads to noisy AI output and extra editing.
- Teams lose momentum because “drafts” live in random places, not in one source of truth.
The Solution: Ghost → AI Drafts → Google Sheets Logging
This workflow is designed to make promotion feel automatic, not aspirational. You trigger it in n8n, and it pulls recent articles from your Ghost site. Then it maps the fields you actually care about (title, URL, publish date, HTML content), and runs those posts through a batching loop so you can process one or many without babysitting it. The HTML gets stripped and cleaned into plain text that an AI model can work with. Finally, a GPT‑4o powered AI Agent generates a polished LinkedIn draft with a hook, summary, call-to-action, and a signature, then the workflow appends both the source content and the finished LinkedIn copy into Google Sheets.
The workflow starts with a manual trigger and retrieves your Ghost posts via the Ghost API. From there, it cleans and merges the article text into a single prompt-friendly input, generates LinkedIn copy, and logs everything in a sheet so you can review, schedule, or hand it off.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 3 Ghost articles a week and you like to create 2 LinkedIn drafts per article (a “technical” angle and a “story” angle). Manually, that’s usually about 30 minutes per draft between copying, cleaning, prompting, and rewriting, so you’re spending roughly 3 hours a week. With this workflow, you trigger the run once, let it process the batch, then skim the Google Sheet and do light edits, maybe 10 minutes per draft. That’s about 2 hours back most weeks.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Ghost CMS with API access to your posts
- Google Sheets to store drafts and source fields
- OpenAI API key (get it from the OpenAI API dashboard)
Skill level: Beginner. You’ll connect accounts, paste a few credentials, and tweak the AI prompt for your voice.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You trigger the run in n8n. The workflow starts with a manual trigger (you can add a schedule later), then immediately calls Ghost to retrieve recent posts you want to promote.
Article fields get organized for processing. A mapping step reshapes the Ghost response into clean fields like title, URL, and HTML content, which makes downstream steps predictable.
Content is cleaned and merged into prompt-ready text. The workflow loops through articles in batches, strips markup, then combines clean content so the AI model gets readable input instead of a mess of tags.
GPT‑4o generates the LinkedIn draft, then everything gets logged. The AI Agent creates a professional post with your requested structure, and a merge step pairs that output with the original article details before appending a new row in Google Sheets.
You can easily modify the AI prompt to change tone, add your signature, or generate two drafts per article based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Set up the manual trigger so you can run the workflow on demand while testing your blog promotion automation.
- Add the Manual Start Trigger node as the workflow entry point.
- Leave Manual Start Trigger parameters empty (no configuration required).
- Connect Manual Start Trigger to Retrieve Blog Articles.
Step 2: Connect Ghost and Retrieve Articles
Pull recent blog posts from Ghost to build the promotion dataset.
- Open Retrieve Blog Articles and set Operation to
getAll. - Set Limit to
3. - Credential Required: Connect your Ghost credentials.
- Connect Retrieve Blog Articles to Map Post Fields.
Step 3: Map Fields and Batch Processing
Normalize article fields and loop through each post for clean content processing.
- In Map Post Fields, add assignments for each field:
- id →
{{ $json.id }} - title →
{{ $json.title }} - featured_image →
{{ $json.feature_image }} - excerpt →
{{ $json.excerpt }} - content →
{{ $json.html }} - link →
{{ $json.url }}
- id →
- Connect Map Post Fields to Iterate Article Batches.
- In Iterate Article Batches, leave Options empty to use the default batch size.
Step 4: Clean HTML and Merge Content Streams
Strip HTML from the post content and combine clean data before AI drafting.
- In Strip Markup Text, keep the Code as provided to convert HTML into
clean_content. - Connect Iterate Article Batches to both Strip Markup Text and Combine Clean Content as shown in the workflow.
- In Combine Clean Content, set Mode to
combineBySql. - Combine Clean Content outputs to both Generate LinkedIn Copy and Merge Social Drafts in parallel.
content, the AI output may be blank. Ensure Map Post Fields maps {{ $json.html }} correctly.Step 5: Set Up AI Drafting with OpenAI
Generate LinkedIn promotional copy from the cleaned article content using an OpenAI chat model.
- Open Generate LinkedIn Copy and set Text to
=Article Title: {{ $json.title }} Article Link: {{ $json.link }} Article Content: {{ $json.clean_content }}. - Keep Prompt Type set to
define, and preserve the system instructions in Options → System Message. - Ensure OpenAI Chat Engine is connected as the language model for Generate LinkedIn Copy (AI language model connection).
- Credential Required: Connect your OpenAI credentials in OpenAI Chat Engine (not in Generate LinkedIn Copy).
- In OpenAI Chat Engine, set Model to
gpt-4o-mini.
Step 6: Merge Drafts and Append to Google Sheets
Merge AI output with article fields and log everything to a Google Sheet.
- In Merge Social Drafts, set Mode to
combineBySql. - Connect Merge Social Drafts to Append to Sheet.
- In Append to Sheet, set Operation to
append. - Map the columns in Append to Sheet using expressions:
- id →
{{ $json.id }} - title →
{{ $json.title }} - content →
{{ $json.content }} - excerpt →
{{ $json.excerpt }} - clean_content →
{{ $json.clean_content }} - linkedin_post →
{{ $json.output }} - featured_image →
{{ $json.featured_image }}
- id →
- Select your Document and Sheet Name in Append to Sheet.
- Credential Required: Connect your Google Sheets credentials.
Step 7: Test and Activate Your Workflow
Run a manual test to confirm article retrieval, AI generation, and sheet logging work end-to-end.
- Click Execute Workflow and run from Manual Start Trigger.
- Confirm Retrieve Blog Articles returns up to
3posts. - Verify Generate LinkedIn Copy outputs a professional LinkedIn draft in
output. - Check Append to Sheet for a new row with all mapped fields and the generated post.
- When satisfied, toggle the workflow to Active for production use.
Common Gotchas
- Ghost credentials can expire or need specific permissions. If things break, check your Ghost Admin API key and the integration settings in Ghost 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.
Frequently Asked Questions
About 30 minutes if your Ghost and Google accounts are ready.
No. You’ll mainly connect Ghost, Google Sheets, and OpenAI, then paste in a prompt you like.
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 OpenAI API costs, which are usually a few cents per generated draft.
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.
Yes, but you’ll want to adjust the prompt inside the “Generate LinkedIn Copy” AI Agent to output two variants (for example, “technical” and “story”). You can also duplicate that generation step and merge both results in the “Merge Social Drafts” node so both versions get appended to Google Sheets. Common tweaks include changing the author signature, adding a stronger CTA, and limiting the summary length.
Usually it’s an expired or mis-copied Ghost Admin API key, or the integration doesn’t have permission for the content you’re trying to fetch. Double-check the Ghost URL and key in the “Retrieve Blog Articles” node. If it works for one post but not many, you might be pulling drafts or members-only content that your token can’t access.
A lot. On n8n Cloud Starter you’re limited by monthly executions, and self-hosting has no execution cap (it mainly depends on your server). Practically, most teams run this in small batches of 10–50 posts, and it stays stable as long as your Ghost API and OpenAI rate limits aren’t being hammered.
For batching Ghost posts, cleaning HTML, and building a reliable “log + draft” pipeline, n8n is usually the more flexible choice. You can loop over items, merge data cleanly, and branch logic without paying per tiny feature. Zapier and Make can absolutely do parts of this, but the moment you add batching and richer text processing, things get fiddly (and often pricier). If you only need a simple one-post-in, one-draft-out flow, those tools can feel faster at the start. Talk to an automation expert if you want help picking the cleanest setup.
This is the kind of system you set up once and then quietly rely on every week. The workflow handles the repetitive parts, and you get to focus on publishing and having real conversations on LinkedIn.
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.