End-to-end Ai blog research and writer with Gemini AI, Supabase and Nano-Banana

Go to Workflow
1,161 views
Built by Muhammad Asadullah Muhammad Asadullah
Created on June 05, 2026

Description

Blog Research and Writer n8n Workflow - Ai Blog Writer

Fully automated blog creation system using n8n + AI Agents + Image Generation

Example Blog

Overview

This workflow automates the entire blog creation pipeline—from topic research to final publication. Three specialized AI agents collaborate to produce publication-ready blog posts with custom images, all saved directly to your Supabase database.

How It Works

1. Research Agent (Topic Discovery)
Triggers**: Runs on schedule (default: daily at 4 AM)
Process**:
Fetches existing blog titles from Supabase to avoid duplicates
Uses Google Search + RSS feeds to identify trending topics in your niche
Scrapes competitor content to find content gaps
Generates detailed topic briefs with SEO keywords, search intent, and differentiation angles
Output**: Comprehensive research document with SERP analysis and content strategy

2. Writer Agent (Content Creation)
Triggers**: Receives research from Agent 1
Process**:
Writes full blog article based on research brief
Follows strict SEO and readability guidelines (no AI fluff, natural tone, actionable content)
Structures content with proper HTML markup
Includes key sections: hook, takeaways, frameworks, FAQs, CTAs
Places image placeholders with mock URLs (https://db.com/image_1, etc.)
Output**: Complete JSON object with title, slug, excerpt, tags, category, and full HTML content

3. Image Prompt Writer (Visual Generation)
Triggers**: Receives blog content from Agent 2
Process**:
Analyzes blog content to determine number and type of images needed
Generates detailed 150-word prompts for each image (feature image + content images)
Creates prompts optimized for Nano-Banana image model
Names each image descriptively for SEO
Output**: Structured prompts for 3-6 images per blog post

4. Image Generation Pipeline
Process**:
Loops through each image prompt
Generates images via Nano-Banana API (Wavespeed.ai)
Downloads and converts images to PNG
Uploads to Supabase storage bucket
Generates permanent signed URLs
Replaces mock URLs in HTML with real image URLs
Output**: Blog HTML with all images embedded

5. Publication
Final blog post saved to Supabase blogs table as draft
Ready for immediate publishing or review

Key Features

✅ Duplicate Prevention: Checks existing blogs before researching new topics
✅ SEO Optimized: Natural language, proper heading structure, keyword integration
✅ Human-Like Writing: No robotic phrases, varied sentence structure, actionable advice
✅ Custom Images: Generated specifically for each blog's content
✅ Fully Structured: JSON output with all metadata (tags, category, excerpt, etc.)
✅ Error Handling: Automatic retries with wait periods between agent calls
✅ Tool Integration: Google Search, URL scraping, RSS feeds for research

Setup Requirements

1. API Keys Needed
Google Gemini API**: For Gemini 2.5 Pro/Flash models (content generation/writing)
Groq API (optional)**: For Kimi-K2-Instruct model (research/writing)
Serper.dev API**: For Google Search (2,500 free searches/month)
Wavespeed.ai API**: For Nano-Banana image generation
Supabase Account**: For database and image storage

2. Supabase Setup
Create blogs table with fields:
title, slug, excerpt, category, tags, featured_image, status, featured, content
Create storage bucket for blog images
Configure bucket as public or use signed URLs

3. Workflow Configuration

Update these placeholders:

RSS Feed URLs**: Replace [your website's rss.xml] with your site's RSS feed
Storage URLs**: Update Supabase storage paths in "Upload object" and "Generate presigned URL" nodes
API Keys**: Add your credentials to all HTTP Request nodes
Niche/Brand**: Customize Research Agent system prompt with your industry keywords
Writing Style**: Adjust Writer Agent prompt for your brand voice

Customization Options

Change Image Provider
Replace the "nano banana" node with:
Gemini Imagen 3/4
DALL-E 3
Midjourney API
Any Wavespeed.ai model

Adjust Schedule
Modify "Schedule Trigger" to run:
Multiple times daily
Specific days of week
On-demand via webhook

Alternative Research Tools
Replace Serper.dev with:
Perplexity API (included as alternative node)
Custom web scraping
Different search providers

Output Format

{
"title": "Your SEO-Optimized Title",
"slug": "your-seo-optimized-title",
"excerpt": "Compelling 2-3 sentence summary with key benefits.",
"category": "Your Category",
"tags": ["tag1", "tag2", "tag3", "tag4"],
"author_name": "Your Team Name",
"featured": false,
"status": "draft",
"content": "...complete HTML with embedded images..."
}

Performance Notes

Average runtime**: 15-25 minutes per blog post
Cost per post**: ~$0.10-0.30 (depending on API usage)
Image generation**: 10-15 seconds per image with Nano-Banana
Retry logic**: Automatically handles API timeouts with 5-15 minute wait periods

Best Practices

Review Before Publishing: Workflow saves as "draft" status for human review
Monitor API Limits: Track Serper.dev searches and image generation quotas
Test Custom Prompts: Adjust Research/Writer prompts to match your brand
Image Quality: Review generated images; regenerate if needed
SEO Validation: Check slugs and meta descriptions before going live

Workflow Architecture

3 Main Phases:
Research → Writer → Image Prompts (Sequential AI Agent chain)
Image Generation → Upload → URL Replacement (Loop-based processing)
Final Assembly → Database Insert (Single save operation)

Error Handling:
Wait nodes between agents prevent rate limiting
Retry logic on agent failures (max 2 retries)
Conditional checks ensure content quality before proceeding

Result: Hands-free blog publishing that maintains quality while saving 3-5 hours per post.

Nodes Used (10)

AI Agent
@n8n/n8n-nodes-langchain.agent
Code
n8n-nodes-base.code
Edit Image
n8n-nodes-base.editImage
Google Gemini
@n8n/n8n-nodes-langchain.googleGemini
Google Gemini Chat Model
@n8n/n8n-nodes-langchain.lmChatGoogleGemini
Groq Chat Model
@n8n/n8n-nodes-langchain.lmChatGroq
HTTP Request
n8n-nodes-base.httpRequest
Information Extractor
@n8n/n8n-nodes-langchain.informationExtractor
Structured Output Parser
@n8n/n8n-nodes-langchain.outputParserStructured
Supabase
n8n-nodes-base.supabase