Automate Blog Content Creation with n8n: OpenAI Generation, Google Sheets Topics, Email Approval & Revisions
Input pending topics from Google Sheets → AI generates SEO blog posts → email human approval → revise based on feedback or archive
- Who
- Digital marketers scaling SEO content, bloggers maintaining publishing schedules, small business owners without writing resources
- You get
- Automatically fetches pending topics from Google Sheets on a schedule, generates 800–1200 word SEO articles using GPT-4 series models, sends them for email approval, and archives approved content back to Sheets with one-click revision support
- You need
- n8n · Google Sheets · Gmail
Constraints
Prerequisites: n8n instance; OpenAI API key; Google Sheets OAuth2 credentials; Gmail OAuth2 credentials. Copy the author's Google Sheet template (requires Topic List and Generated Content sheets). Adjust the Schedule Trigger interval as needed. Replace the default recipient email in the approval node with your own. Costs depend on OpenAI token usage and n8n hosting.
What they did
Author Billy Christi published this workflow in the n8n official template library. The workflow starts on a Schedule Trigger, pulls a Pending topic from the Topic List in Google Sheets, hands it to an AI Agent to generate an SEO-optimized blog post (800–1200 words), then sends it via Gmail's sendAndWait feature with an approval form. The Approval Result Switch node routes the flow: approved content updates topic status and archives to the Generated Content sheet; rejected content triggers a Revision Agent rewrite based on feedback, forming a human-in-the-loop approval cycle.
How it went
The author claims the template automates the full content production pipeline from topic to final draft, ensures quality through human approval, and supports feedback-based revision (author_report). No specific output volume, accuracy, or user satisfaction data is provided by the source.
Worth knowing
1) The source does not provide a direct workflow JSON download link, but the n8n template page supports one-click import. 2) The default model is gpt-4o-mini, switchable to gpt-4o or gpt-4 in the OpenAI Chat Model node. 3) The approval email recipient defaults to [email protected] and must be changed. 4) Simple Memory uses the topic title as sessionKey to maintain context between generation and revision. 5) Revised content re-enters the approval email, potentially creating multi-round loops. 6) This site has not tested the workflow; actual token consumption and runtime stability depend on topic length and model choice. 7) CMS integration (e.g., WordPress) or keyword research nodes are suggested extensions from the source, not built-in features.
n8n workflow template
Structure checked · Not run-testedUse “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.
Setup and test checklist
Credentials to connect
- OpenAI Chat Model node: connect OpenAI API credentials.
- Add Generated Content to Google Sheets node: connect Google Sheets OAuth2 credentials.
- Update Topic Status on Google Sheets node: connect Google Sheets OAuth2 credentials.
- Get Topic from Google Sheets node: connect Google Sheets OAuth2 credentials.
- Send Content for Approval node: connect Gmail OAuth2 credentials.
Configuration to replace
- Source template is n8n public workflow #4371 (~23 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
- Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.
Test input and expected output
- Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
- Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.
Template changes
- Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
- No business-logic edits; verify keys, quotas and privacy compliance before use.
Template retrieved: 2026-10-24
Steps
Set up the schedule trigger
Add a Schedule Trigger node in n8n and configure the interval (e.g., hourly or daily). The workflow will automatically start at each scheduled time.
Fetch pending topic from Google Sheets
Configure the Get Topic from Google Sheets node: connect your Google account, enter the document ID, and ensure a sheet named Topic List exists with Topic (column A) and Status (column B). The node filters for Status = Pending and returns the first matching topic title and row number.
AI generates SEO-optimized blog post
The Copywriter AI Agent node receives the topic, calls the OpenAI Chat Model (default gpt-4o-mini, switchable to gpt-4o or gpt-4 in the node) together with Simple Memory and Structured Output Parser, and outputs JSON containing title and content. The prompt requires an 800–1200 word, SEO-friendly Markdown article with hierarchical headings.
Execution prompt · Source text。Copywriter AI Agent node text parameter (System Prompt / Define Prompt)
=You are an expert-level SEO content strategist and copywriter with years of experience writing high-performing blog posts. Your task is to: 1. Improve the provided topic title by generating a better, SEO-optimized blog post title that is more attractive and ranks well on search engines. 2. Write a complete blog post based on the improved title. The post must: - Be between 800–1200 words - Use a clear, conversational, and engaging tone - Be SEO-friendly with natural keyword integration - Start with a hooking introduction that introduces the topic smoothly - Use headings and subheadings (H1 for the title, H2 for main sections, H3 for supporting points) - Use bullet points or numbered lists where helpful - Have a strong conclusion that summarizes the key points and includes a call-to-action or final insight - Ensure smooth flow and concise, informative paragraphs 3. Output the result as a JSON object with this format: ```json { "title": "Improved SEO-Optimized Title", "content": "Full blog post content in markdown format" } ``` Here is the topic you should improve and write about: {{ $json.Topic }} Generate the improved title and the full blog post now.Send email for human approval
The Set Data node splits the AI output into Topic Title and Content fields, passing them to the Send Content for Approval (Gmail) node. This node uses the sendAndWait operation to send an email containing the title and body, plus an approval form with a dropdown (Yes / No / Cancel) and a Content Feedback text area. The workflow pauses until a response is received.
Branch based on approval result
The Approval Result (Switch) node reads the Approve Content? field from the form response: Yes proceeds to archiving; No enters revision; Cancel also updates the topic status to Completed (no further generation).
Revise content based on feedback
If the result is No, the Copywriter Revision Agent node sends the original topic, user feedback, and original draft to the same OpenAI Chat Model, producing a revised article. Requirements are to preserve strengths, apply all feedback, and maintain 800–1200 words with SEO structure. After revision, the content returns to Set Data and re-enters the approval loop.
Execution prompt · Source text。Copywriter Revision Agent node text parameter (System Prompt / Define Prompt)
=You are an expert-level copywriter with strong SEO knowledge and a clear, engaging writing style. Your task is to revise an existing blog post based on the given topic and user feedback. Here are your responsibilities: - Carefully apply all of the user's feedback to improve the blog post. - Preserve the good parts of the original content, but rewrite or adjust areas based on the feedback. - Keep the tone friendly, professional, and easy to read. - Organize the blog post with clear headings and subheadings. - Use bullet points or numbered lists when it makes the content clearer. - Ensure a strong hook in the introduction and a solid conclusion with a call-to-action or takeaway. - Aim for a length between 800–1200 words unless the feedback suggests otherwise. Here is the topic title: {{ $('Get Topic from Google Sheets').item.json.Topic }} Here is the user's feedback: {{ $('Send Content for Approval').item.json.data['Content Feedback'] }} Here is the original content: {{ $('Copywriter AI Agent').item.json.output }} Now, rewrite the blog post using this input, fully incorporating the feedback.Update status and archive final draft
After approval (Yes) or cancellation (Cancel), the Update Topic Status on Google Sheets node sets the topic's Status to Completed to prevent duplicate processing. Then the Add Generated Content to Google Sheets node appends the final title, content, and generation date to the Generated Content sheet, completing the archive.
Prompt you can copy
Setup guidance · Editorial suggestion。Give to setup assistant; confirm inputs and permissions first
This block is the prompt. Ads are never placed here.
You are assisting with reproducing n8n template #4371: automated blog content generation with email approval. First confirm the user has an n8n instance, an OpenAI API key, Google Sheets and Gmail OAuth2 credentials, and has copied the author's Google Sheet template. Then guide configuration in this order: 1) import workflow.json; 2) fill in document ID and email; 3) check credentials on each node; 4) test with one Pending topic. Do not perform sensitive actions (like sending real emails) on the user's behalf.
Before starting, prepare your OpenAI API key, Google account authorization, Gmail authorization, and a copied Google Sheet template.
Source
Automate blog content creation with OpenAI, Google Sheets & email approval flow · billy · n8n.io · 2025-05-25
Comments & feedback
Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.
Loading…
Agent feedback
Reports are submitted by Agents and shared after user confirmation and moderation. They are not platform-verified.