Automate RSS content to blog posts with GPT-4o, WordPress & LinkedIn publishing
DISCOUNT 20%
Automated Blog Post Review and Multi-Platform Publishing Workflow with RSS Feeds
Description
This workflow automates the process of generating, reviewing, and publishing blog posts across multiple platforms, now enhanced with support for RSS Feeds as a content source. It streamlines the management of blog posts by fetching content from RSS Feeds, formatting, storing, reviewing, templating, and publishing to platforms like LinkedIn and WordPress. The workflow is split into three key flows:
- Initial Flow: Fetches content from RSS Feeds, prepares and stores blog post data, sends a review email with approval/rejection links.
- Approval Flow: Handles review actions via a webhook to update the status in Google Sheets.
- Status Update Flow: Monitors status changes and publishes approved posts.
Target Audience
- Content creators, bloggers, and digital marketers.
- Teams managing multi-platform content publishing.
- Users familiar with n8n, Google Sheets, LinkedIn, and RSS Feeds.
Problem Solved
Manually managing blog posts, especially when sourcing content from RSS Feeds, can be time-consuming and error-prone This workflow addresses:
- Content Sourcing: Fetches blog posts from RSS Feeds for automated processing
- Content Formatting: Automatically formats and stores blog posts.
- Review Process: Simplifies approval with email notifications and webhook triggers.
- Multi-Platform Publishing: Publishes to LinkedIn, WordPress and optionally Medium) with delays to avoid rate limits
- Status Tracking: Tracks approval and publishing status in Google Sheets.
Setup Instructions
Prerequisites
- n8n Instance: Ensure you have an active n8n instance
- RSS Feed URL: Identify an RSS Feed URL (e.g., a blog’s feed like
https://example.com/feed) - Google Sheets: Create a spreadsheet with columns:
Title,Blogpost,Publication Date,Keywords,Status,Published,Featured Image,articleUrl,Rendered Blog.- Sheet Name:
Posts Initial - Add a dropdown for
Status:Pending, Approved, Rejected.
- Sheet Name:
- Gmail Account: For sending review and notification emails.
- LinkedIn Account: For publishing posts (OAuth credentials needed).
- Optional: WordPress.com or Medium account for additional publishing.
Customization Guidance
Below is a detailed breakdown of each flow and node, including setup instructions.
🔹 Initial Flow: Fetch from RSS Feeds, Prepare, and Send for Review.
Purpose: Fetches blog posts from an RSS Feed, formats them, extracts images, stores data, and sends a review email.
Fetch from RSS Feed
- Type: RSS Feed
- Purpose: Retrieves blog posts from an RSS Feed
- Configuration:
- URL:
https://example.com/feed(replace with your RSS Feed URL) - Limit: 1 (or adjust based on your needs)
- URL:
- Setup: Ensure the RSS Feed URL is valid and accessible; test the node to verify it fetches posts
Set Fields
- Type: Set
- Purpose: Maps RSS Feed data to blog post fields
- Setup: Adjust field mappings based on your RSS Feed’s structure
Format Blog Post for Storage
- Type: Code
- Purpose: Cleans up the blog post content.
Extract Featured Image
- Type: Code
- Purpose: Extracts or generates a featured image URL.
- Setup: Ensure
originalHtmlcontains image data; otherwise, it uses a placeholder.
Store Blog Posts Initial
- Type: Google Sheets
- Purpose: Stores initial blog post data
- Setup: Ensure Google Sheets credentials are set up and the spreadsheet has the required columns.
Set Fields for Email
- Type: Set
- Purpose: Prepares fields for the review email.
- Setup: Replace
https://your-n8n-instancewith your n8n instance URL.
Prepare Email HTML
- Type: Code
- Purpose: Generates HTML email content with conditional image display
- Setup: No additional configuration needed
Notify for Review (Gmail)
- Type: Gmail
- Purpose: Sends a review email with approval/rejection links
🔹 Approval Flow: Handle Review Actions
Purpose: Updates the blog post status based on approval/rejection
Webhook Trigger
- Type: Webhook
- Purpose: Triggers on approval/rejection link clicks
- Configuration:
- HTTP Method: GET
- Path:
approve-post - Response Code: 200
- Response Data:
{"message": "Status updated"}
- Setup: Ensure the webhook URL matches the one in Set Fields for Email
Find Row to Update
- Type: Google Sheets
- Purpose: Retrieves all rows to find the matching blog post
Filter Row by Title
Type: Code
Purpose: Filters the row matching the blog post title
Setup: No additional configuration needed
Update Status on Approval
- Type: Google Sheets
- Purpose: Updates the status to
ApprovedorRejected
🔹 Status Update Flow: Publish Approved Posts
Purpose: Monitors status changes and publishes approved posts
Google Sheets Trigger (Fetch Row)
- Type: Google Sheets Trigger
- Purpose: Triggers when a row’s status is updated
- Configuration:
- Event: Update
- Sheet Name:
Posts Initial - Output Fields:
title,status,published,featuredImage,articleUrl
- Setup: Ensure Google Sheets credentials are set up
Router (Check Status)
- Type: Router
- Purpose: Routes based on status and published state
- Configuration:
- Route 1: Approved and Not Published
- Condition:
statusequalsApprovedANDpublishedequalsNO
- Condition:
- Route 2: Rejected
- Condition:
statusequalsRejected
- Condition:
- Route 3: Pending
- Condition:
statusequalsPending
- Condition:
- Route 1: Approved and Not Published
- Setup: No additional configuration needed
Apply Blog Template
Store Blog Posts Final
- Type: Google Sheets
- Purpose: Stores the final HTML content
- Configuration:
- Operation: Update Row
- Setup: Ensure the
Rendered Blogcolumn exists
Loop Over Blog Posts
- Type: Split in Batches
- Purpose: Processes each blog post individually
- Configuration: Default settings
- Setup: No additional configuration needed
Delay Between Posts
- Type: Wait
- Purpose: Adds a delay to avoid rate limits
- Configuration:
- Wait Type: Delay
- Amount: 1 second
- Setup: Adjust delay as needed for LinkedIn rate limits
Publish to LinkedIn
- Type: LinkedIn
- Purpose: Publishes the blog post to LinkedIn
- Configuration:
- Operation: Share Post
- Author:
urn:li:person:YOUR_PERSONAL_URN
- Setup: Set up LinkedIn OAuth credentials and replace
YOUR_PERSONAL_URNwith your LinkedIn URN
Update Published State
Type: Google Sheets
Purpose: Updates the published status
Configuration:
- Operation: Update Row
Setup: Ensure the
Publishedcolumn exists
Notify Team
Type: Gmail
Purpose: Notifies the team of successful publishing
Configuration:
The blog post "{{ $json.title }}" has been successfully published
Setup: Set up Gmail credentials; replace
[Link]with the LinkedIn URL if captured
Notify Rejection (Gmail) (Route 2)
Type: Gmail
Purpose: Notifies on rejection
The blog post "{{ $json.title }}" has been rejected Suggestions: Rewrite with more engaging content, adjust keywords, or verify facts Please update the status in Google Sheets if you wish to revise and resubmit
Setup: Set up Gmail credentials
Wait for Status Update (Route 3)
- Type: Wait
- Purpose: Delays for status recheck
- Configuration:
- Wait Type: Delay
- Duration:
24h
- Setup: Adjust delay as needed
Conclusion
- This workflow streamlines blog post management with RSS Feeds, making it ideal for busy content creators and teams.
- Customize it by adding more platforms adjusting delays, or enhancing notifications.
- Share your feedback in the n8n community to help others benefit from this automation.