Google Sheets to WordPress, drafts ready to edit
Your content plan lives in a spreadsheet. Your blog lives in WordPress. And somehow, you’re still copying prompts, pasting drafts, uploading images, and updating statuses by hand. That gap is exactly where Sheets WordPress automation earns its keep.
Content managers feel this when the editorial calendar gets busy. A marketing lead chasing consistent publishing feels it too. Same for a small team owner doing everything themselves, honestly.
This workflow turns a single Google Sheets row into a WordPress draft with a featured image, then writes the post details back into your tracker. You’ll see what it automates, what results to expect, and what to watch out for before you switch it on.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to WordPress, drafts ready to edit
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:database", form: "rounded", label: "Get Ideas", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set your prompt", 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/wordpress.svg' width='40' height='40' /></div><br/>Create post on Wordpress"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Upload image"]
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/>Set Image"]
n6@{ icon: "mdi:database", form: "rounded", label: "Update Sheet", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Generate article with DeepSeek", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Generate title with DeepSeek", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "Generate Image with DALL-E", pos: "b", h: 48 }
n1 --> n2
n5 --> n6
n4 --> n5
n2 --> n7
n3 --> n9
n9 --> n4
n8 --> n3
n7 --> n8
n0 --> n1
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 n7,n8,n9 ai
class n1,n6 database
class n4,n5 api
classDef customIcon fill:none,stroke:none
class n3,n4,n5 customIcon
The Problem: Blog drafts get stuck between “planned” and “published”
Most teams don’t struggle to think of topics. They struggle to move an idea from the tracker into a clean, editable WordPress draft fast enough to keep momentum. You grab a prompt from Google Sheets, paste it into an AI tool, format the output, paste again into WordPress, then hunt for an image that doesn’t look like stock-photo sadness. After that, you still have to update the sheet so everyone knows what happened. Miss one tiny step and you get duplicated drafts, missing featured images, or a tracker nobody trusts.
The friction compounds. Here’s where it breaks down.
- Copying and formatting AI-written content into WordPress eats about 20 minutes per post, and it’s never as “ready” as you want.
- Featured images turn into a separate project, so drafts sit unfinished longer than they should.
- Your Google Sheets tracker drifts out of date because updating post IDs, dates, and titles is the last thing anyone wants to do.
- When the process is manual, quality control becomes inconsistent, which means more rework later.
The Solution: Google Sheets → AI draft → WordPress draft (with featured image)
This n8n workflow takes one row from your Google Sheets content tracker and turns it into a WordPress draft you can actually edit and publish. It starts by pulling the right idea from your sheet, then extracts the prompt text you already planned. From there, it uses DeepSeek (R1 or V3) to generate an SEO-friendly HTML article and a clean, concise title. Next, it creates a draft post in WordPress using that title and article body. Finally, it generates a photorealistic cover image, uploads it to your WordPress media library, assigns it as the featured image, and updates the original Google Sheets row with the new post details.
The flow begins when you run it in n8n (a manual “launch” trigger). Google Sheets provides the prompt, DeepSeek writes the draft and title, WordPress receives the content as a draft, and HTTP requests handle the media upload and featured image assignment. The sheet is then updated with the post ID, title, and creation date so your tracker stays true.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you publish 4 posts a week. Manually, it’s usually about 10 minutes to move text into WordPress, another 10 minutes to find or create a usable image, plus 5 minutes to update Google Sheets, so you’re spending about 25 minutes per post (nearly 2 hours a week). With this workflow, you click once to run it, wait for generation and upload, then you’re editing a ready draft with a featured image. Realistically, you’re down to about 5 minutes of setup per post, and the rest is review.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store prompts and post tracking fields
- WordPress to create drafts and upload media
- OpenAI / DeepSeek API key (get it from your provider’s API dashboard)
Skill level: Intermediate. You’ll connect accounts, map a few fields, and test a draft end-to-end.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Manual launch from n8n. You click “Test workflow” (or run it) when you’re ready to generate the next draft. It’s intentionally controlled so you can validate quality before scaling up.
Google Sheets selects the right row. The workflow reads your sheet and filters based on your identifier field (the “ID POST” logic), then pulls the PROMPT content you’ve prepared.
DeepSeek generates the draft and title. One AI step writes an SEO-friendly HTML article with an intro, a few sections, and a conclusion. Another step produces a concise title that fits WordPress nicely.
WordPress receives a draft plus featured image. n8n creates the post as a draft, generates a photorealistic image, uploads it via the WordPress REST API (HTTP Request nodes), then sets it as the featured image. After that, Google Sheets is updated with the post ID, title, and date so your tracker stays current.
You can easily modify the prompt format to match your brand voice based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Start the workflow with a manual trigger so you can run the content generation process on demand during setup.
- Add the Manual Launch Trigger node as the workflow trigger.
- Leave default settings as-is (this node has no required fields).
- Optionally keep Flowpast Branding as a sticky note for documentation (no configuration needed).
Step 2: Connect Google Sheets
Pull the next topic prompt from Google Sheets and later update the row with the generated post details.
- Open Retrieve Topic Ideas and set Document ID to
[YOUR_ID]. - Set Sheet Name to
=Sheet1. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Retrieve Topic Ideas.
- Open Modify Sheet Row and confirm Operation is set to
update. - In Modify Sheet Row, verify the column mappings: DATA to
{{ $now.format('dd/LL/yyyy') }}, TITOLO to{{ $('Craft SEO Title').item.json.message.content }}, ID POST to{{ $('Publish WP Draft').item.json.id }}, and row_number to{{ $('Retrieve Topic Ideas').item.json.row_number }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Modify Sheet Row.
Step 3: Set Up Processing and AI Nodes
Prepare the prompt, generate the article, craft an SEO title, and create a cover image using AI.
- In Compose Prompt Text, set the prompt field to
{{ $json.PROMPT }}. - In Draft Article via DeepSeek, set Model to
deepseek-reasonerand ensure the message content references{{ $json.prompt }}. - Credential Required: Connect your openAiApi credentials in Draft Article via DeepSeek.
- In Craft SEO Title, keep the message template that references
{{ $json.message.content }}. - Credential Required: Connect your openAiApi credentials in Craft SEO Title.
- In Create Cover Image, set Resource to
imageand keep the Prompt asGenerate a real photographic image used as a cover for a blog post: ... {{ $('Craft SEO Title').item.json.message.content }}. - Credential Required: Connect your openAiApi credentials in Create Cover Image.
Step 4: Configure WordPress Publishing and Media Actions
Create the WordPress draft, upload the generated image, and assign it as the featured image.
- In Publish WP Draft, set Title to
{{ $json.message.content }}and Content to{{ $('Draft Article via DeepSeek').item.json.message.content }}. - Set Status to
draftin Publish WP Draft. - Credential Required: Connect your wordpressApi credentials in Publish WP Draft.
- In Send Media to WP, set URL to
https://YOURSITE.com/wp-json/wp/v2/media, Method toPOST, and Content Type tobinaryData. - In Send Media to WP, set the Content-Disposition header to
attachment; filename="copertina-{{ $('Publish WP Draft').item.json.id }}.jpg". - Credential Required: Connect your wordpressApi credentials in Send Media to WP (the node also lists wooCommerceApi, but wordpressApi is used).
- In Assign Featured Image, set URL to
https://YOUR_SITE.com/wp-json/wp/v2/posts/{{ $('Publish WP Draft').item.json.id }}and add Query Parameter featured_media with value{{ $json.id }}. - Credential Required: Connect your wordpressApi credentials in Assign Featured Image.
Step 5: Test and Activate Your Workflow
Run a manual test to confirm the end-to-end flow from Google Sheets to WordPress.
- Click Execute Workflow on Manual Launch Trigger to start the run.
- Verify Retrieve Topic Ideas outputs a row with a PROMPT value.
- Confirm Publish WP Draft creates a draft post and outputs an id.
- Check WordPress Media to ensure Send Media to WP uploaded the generated image, and that Assign Featured Image updated the draft.
- Ensure Modify Sheet Row updates the sheet with the date, title, and post ID.
- Toggle the workflow to Active when you are ready for production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the Google connection inside n8n’s Credentials page 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 45 minutes if your accounts and API keys are ready.
No. You’ll mostly connect accounts and map fields between Google Sheets and WordPress.
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 AI API usage costs (often a few cents per article plus image generation).
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 keep the structure. Most teams tweak the Google Sheets “Retrieve Topic Ideas” filtering, adjust “Compose Prompt Text” to include tone and internal links, and update the “Publish WP Draft” step to set categories, tags, or an author. You can also swap the image style by changing the “Create Cover Image” prompt, then leave the HTTP upload and “Assign Featured Image” steps as-is.
Usually it’s incorrect WordPress REST API credentials or a user role that can’t create posts or upload media. If the draft gets created but the image fails, it’s often the HTTP Request upload step hitting permission rules, blocked file types, or a security plugin. Also check that your WordPress URL is correct (including https) and that application passwords are enabled if you’re using them.
Plenty for a normal publishing schedule. On n8n Cloud Starter, you can run a healthy number of executions each month, and higher plans handle more. If you self-host, there’s no execution cap, but your server and the AI provider’s rate limits become the practical ceiling.
Often, yes. This workflow mixes multi-step AI generation, WordPress drafting, and a media upload that’s handled cleanly with HTTP requests, which is exactly where simpler tools can get awkward or pricey. n8n also gives you branching, merges, and data shaping without paying extra per “path.” That said, if you only need “new row → create draft title,” Zapier or Make might feel quicker. Talk to an automation expert if you want help choosing.
Once this is running, your spreadsheet becomes a real publishing pipeline instead of a wish list. You’ll spend your time reviewing and improving drafts, not shuffling text and chasing missing images.
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.