WordPress + Google Sheets: posts published and logged
Publishing “fresh” content sounds easy until you’re the one hunting headlines, writing drafts, finding images, uploading to WordPress, and then trying to remember what you already posted last week.
Marketing managers feel it when the content calendar slips. A small business owner feels it when the blog goes quiet. And agencies running multiple sites? That’s where WordPress Sheets automation stops being “nice to have” and starts being survival.
This workflow turns live news into published WordPress posts with AI images, then logs every published URL to Google Sheets so you stay consistent, avoid duplicates, and keep your content pipeline organized.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: WordPress + Google Sheets: posts published and logged
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Research Topic – GPT"]
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/>Create WordPress Post"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload Image to Wordpress"]
n4@{ icon: "mdi:cog", form: "rounded", label: "Wait", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Leonardo Image Status"]
n6["<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 Leonardo Image"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Add ALT to Image"]
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/>Leonardo: Create Post Image"]
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/code.svg' width='40' height='40' /></div><br/>Get Title, Content, and Imag.."]
n10@{ icon: "mdi:cog", form: "rounded", label: "Google News RSS", pos: "b", h: 48 }
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/>GDELT Docs API"]
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/merge.svg' width='40' height='40' /></div><br/>Merge News"]
n13["<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/>Tone & Format Revision – GPT"]
n14["<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/>Within dedupe"]
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/>Top Headlines"]
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/>Build GPT body"]
n17["<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/>Classify Headlines"]
n18["<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/>Build Tone Request"]
n19["<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/>Word Count Guard"]
n20@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If1", pos: "b", h: 48 }
n21@{ icon: "mdi:robot", form: "rounded", label: "Expand Draft", pos: "b", h: 48 }
n22["<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/>Code"]
n23["<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/>Writing Style"]
n24@{ icon: "mdi:robot", form: "rounded", label: "Leonardo Prompt Creator", pos: "b", h: 48 }
n20 --> n21
n20 --> n9
n22 --> n4
n4 --> n5
n12 --> n14
n21 --> n9
n15 --> n17
n14 --> n15
n23 --> n16
n16 --> n1
n11 --> n12
n10 --> n12
n7 --> n2
n0 --> n10
n0 --> n11
n19 --> n20
n18 --> n13
n17 --> n23
n6 --> n3
n1 --> n18
n24 --> n8
n5 --> n6
n3 --> n7
n8 --> n22
n13 --> n19
n9 --> n24
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 n21,n24 ai
class n20 decision
class n1,n2,n3,n5,n6,n7,n8,n11,n13 api
class n9,n14,n15,n16,n17,n18,n19,n22,n23 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n5,n6,n7,n8,n9,n11,n12,n13,n14,n15,n16,n17,n18,n19,n22,n23 customIcon
The Challenge: Publishing consistently without burning hours
The slow part of content marketing is not “writing.” It’s everything wrapped around writing. You bounce between Google News, a spreadsheet, your CMS, an image tool, and a half-finished draft in a doc that never quite matches your site’s voice. Then you publish, forget to track it, and two weeks later someone suggests the same headline again because there’s no system of record. Honestly, it’s exhausting. And the mental load makes you avoid publishing at all, which is the real cost.
It adds up fast. Here’s where it breaks down in real teams.
- Finding usable headlines across sources turns into a daily scavenger hunt.
- Drafts vary wildly in tone, so you spend your time rewriting instead of shipping.
- Images become a bottleneck because you still need something relevant with decent alt-text.
- No clean log of what was published, which means duplicate topics and messy reporting.
The Fix: Auto-generate news posts, publish to WordPress, then log them
This workflow runs a complete content loop for you. It pulls top headlines from Google News and GDELT, merges the two feeds, and removes duplicates so you’re not writing the same story twice. Next, it selects the best headlines, checks relevance, and applies style rules before generating a first draft with GPT in a natural, human tone. After that, it refines and expands the post so it reads like your brand (not a generic template). Then it generates a featured image through Leonardo AI, waits for rendering, retrieves the final asset, and publishes the finished post to WordPress with the image and proper alt-text. Finally, it logs the published URL and details into Google Sheets, giving you a simple tracking system you’ll actually use.
The workflow starts by fetching and de-duping headlines. AI then writes and edits the post to match your style. Leonardo AI creates the image, and WordPress publishes it, while Google Sheets records the result for reporting and duplicate prevention.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you publish 5 news-driven posts a week. Manually, you might spend about 15 minutes finding headlines, 45 minutes drafting, 15 minutes creating or sourcing an image, and 10 minutes publishing and logging, which is roughly 1.5 hours per post (so about 7 hours a week). With this workflow, your “work” is mostly review: maybe 10 minutes to skim the draft and hit publish (or let it auto-publish), while the image rendering runs in the background. That’s several hours back every week, without sacrificing freshness.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- WordPress to publish posts on your site
- Google Sheets to log URLs and prevent duplicates
- OpenAI API key (get it from your OpenAI dashboard)
- Leonardo AI API key (get it from Leonardo AI settings)
Skill level: Intermediate. You’ll connect accounts, paste API keys, and adjust a few WordPress settings like categories and post status.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Headline intake from multiple sources. The workflow starts by fetching top stories from Google News and GDELT using HTTP requests, so you’re not relying on one feed.
De-duplication and selection. It merges the headline lists, removes duplicates, and uses rules to choose what’s worth turning into a post. If checks are part of your process (topic relevance, keywords you avoid, or basic quality gates), this is where they live.
Writing, then rewriting. GPT generates a draft article, then a second pass refines tone and expands sections for clarity and length. This is the difference between “AI content” and content that reads like someone on your team wrote it.
Image generation and publishing. Leonardo AI creates the featured image, a Wait step gives it time to render, and the workflow retrieves the file, uploads it to WordPress, assigns alt-text, and publishes the post.
Logging for control. Google Sheets receives the published URL and key details so you can track output, audit what went live, and reduce accidental repeat posts.
You can easily modify the headline sources and the publishing rules (draft vs. publish, category, tags) based on your needs. See the full implementation guide below for customization options.
Watch Out For
- WordPress credentials can expire or lack permissions. If publishing fails, check the WordPress user role and the site URL inside the WordPress node 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
Usually about an hour once your accounts and API keys are ready.
Yes. You won’t write code, but you will connect credentials and choose WordPress defaults like category, tags, and publish status.
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 and Leonardo AI API usage, which varies with how long your posts are and how many images you generate.
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. Most customizations happen in the headline selection/check steps (the If logic) and in the GPT prompt sections where tone and structure are defined. Common tweaks include switching sources (Google News only, or adding another feed via HTTP Request), setting WordPress to “draft” instead of “publish,” and changing how the Google Sheets log is structured (extra columns for campaign, author, or client name).
It’s usually an authentication issue or a permission problem. Regenerate your WordPress application password (or reconnect OAuth if you use it) and update the credential in n8n. Also confirm the WordPress site URL is correct in the node and that your user can upload media and publish posts. If it fails only on busy days, you may be hitting rate limits on your host or security plugins blocking API requests.
On n8n Cloud, capacity depends on your plan’s monthly executions. If you self-host, there’s no fixed execution limit; it mostly depends on your server and how long AI + image rendering takes per post. Practically, many sites run this a few times a day or once an hour, then cap output with simple rules (for example, “publish up to 3 posts daily”).
Often, yes. This workflow uses branching logic, merging, waiting for image rendering, and multi-step AI processing, which can get expensive or awkward in Zapier/Make once you go beyond simple two-step zaps. n8n is also easier to self-host, which matters if you plan to run this frequently. That said, if you only want “RSS in, draft out” with minimal logic, Zapier or Make can be faster to set up. If you’re torn, Talk to an automation expert and we’ll map the simplest option for your exact publishing process.
Once this is in place, your site stays active without you living inside WordPress. The workflow handles the repeatable work, and you keep control of what “good” looks like.
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.