Initializing
Back to Projects
Year2024
DomainFullstack
AccessOpen Source
Complexity0 / 10
n8nAutomationGoogle SheetsFacebook Graph APIInstagram APITelegram
FullstackArchived

Social Media Automation (n8n)

Automated dual-platform posting workflow that publishes content from Google Sheets to Facebook and Instagram with validation, retry logic, and Telegram notifications.

# Social Media Automation (n8n)

An automated workflow that manages dual-platform social media posting from a Google Sheets content database. Built on n8n, this workflow eliminates manual posting while ensuring content quality through pre-publish validation.

Workflow Architecture

Parsing system architecture diagram...

Workflow Nodes

NodePurpose
Get ReadySchedule trigger: Daily 5:00 PM IST
Get Content DatabaseRead from Google Sheet "Myth vs Truth v2"
Filter Unposted ContentIF: status = "pending"
Sort by Row IDEnsure FIFO processing order
🔢 Limit to 1 PostProcess one post per run
🔍 Validate Image URLHEAD request to verify image accessibility
✅ Image Valids?IF: statusCode=200 AND content-type=image/*
⚙️ Configure Post SettingsSet node, post_type, image_url, captions
📘 Facebook PostPOST to Facebook Graph API /photos
📷 Instagram ContainerCreate media container via Graph API
⏰ Initial Processing WaitWait for Instagram media processing
🔍 Check Instagram StatusQuery container status_code
✅ Is Instagram Ready?IF: status_code = "FINISHED"
⏰ Retry Wait LoopRetry loop for pending containers
📤 Publish InstagramPublish container via /media_publish
📊 Update Status & Post IDsUpdate sheet: status=posted, instagram_post_id, facebook_post_id
📢 Success NotificationTelegram alert with post IDs
⚠️ Validation Error AlertTelegram + sheet update on validation failure

Data Flow

Input: Google Sheet Structure

ColumnDescription
instagram_idInstagram account ID
facebook_idFacebook page ID
post_typeType of post (image, video, etc.)
image_urlDirect URL to image
captionDefault caption (fallback)
instagram_captionPlatform-specific caption for Instagram
facebook_captionPlatform-specific caption for Facebook
video_urlURL for video posts
cover_imageThumbnail for video posts
statuspending / posted / validation_failed
instagram_post_id(filled after posting)
facebook_post_id(filled after posting)

Processing Pipeline

Parsing system architecture diagram...

API Integration Details

Facebook Graph API

javascript
// Node: 📘 Facebook Post
{
  method: "POST",
  node: facebook_page_id,  // From sheet: facebook_id
  edge: "photos",
  query: {
    message: facebook_caption,
    url: image_url,
    published: "true"
  }
}

Instagram Graph API (Two-Step)

javascript
// Step 1: Create Media Container
// Node: 📷 Instagram Container
{
  method: "POST",
  node: instagram_id,  // From sheet: instagram_id
  edge: "media",
  query: {
    image_url: image_url,
    caption: instagram_caption
  }
}
// Returns: container_id

// Step 2: Publish Container (after status = FINISHED)
// Node: 📤 Publish Instagram
{
  method: "POST",
  node: instagram_id,
  edge: "media_publish",
  query: {
    creation_id: container_id
  }
}
// Returns: instagram_post_id

Image Validation

javascript
// Node: 🔍 Validate Image URL
{
  method: "HEAD",
  url: image_url,
  options: {
    timeout: 5000,
    redirect: { maxRedirects: 5 }
  }
}

// Validation: ✅ Image Valids?
{
  conditions: [
    statusCode == 200,
    content-type == "image/jpeg" OR "image/png"
  ]
}

Error Handling

Validation Failure Path

code
🔍 Validate Image URL 
(failed)
⚠️ Validation Error AlertTelegram notification

📝 Mark Validation FailedUpdate sheet: status='validation_failed'

Instagram Processing Retry

code
Initial Processing Wait (wait for media processing)

🔍 Check Instagram StatusGET /{container_id}?fields=status_code

Is Instagram Ready?
    ├── YES → 📤 Publish Instagram
    └── NO  → ⏰ Retry Wait LoopCheck again (loop)

Error Workflow

The workflow is configured with an error workflow for handling unexpected failures:

  • Error Workflow ID: j44unWD08cU7Buhc
  • Caller Policy: Workflows from same owner only

Telegram Notifications

Success Notification

text
✅ Post Successfully Published

📱 Instagram: Published with ID: {instagram_post_id}
📘 Facebook: Published with ID: {facebook_post_id}

📄 Caption: {caption.substring(0, 100)}...

🖼️ Image: {image_url}

✅ Status: {statusCode} : {statusMessage}

⏰ Time: {current_timestamp}

Validation Failure Alert

text
❌ Image Validation Failed

🚫 Issue: Image URL is not accessible or invalid

🖼️ URL: {image_url}

📄 Caption: {caption.substring(0, 100)}...

⚠️ Action Required: Please check and update the image URL in the spreadsheet.

🚫 Status: {statusCode} : {statusMessage}

⏰ Time: {current_timestamp}

Configuration

Credentials

CredentialPurpose
Google Sheets accountOAuth2 for reading/writing sheets
Facebook Aatmanova n8n newFacebook Graph API for posting
Aatmanova I N8NInstagram Graph API (via Meta)
Alert x AatmanovaTelegram Bot for notifications
Query Auth Aatmanova I N8NHTTP Query Auth for status checks

Schedule Settings

SettingValue
TriggerSchedule trigger
Time17:00 (5:00 PM) daily
TimezoneAsia/Kolkata (UTC+05:30)

Key Design Decisions

Why Single Post Per Run?

Processing one post per execution ensures:

  • Idempotency: Easy to retry on failure without complex state management
  • Rate Limiting: Respects Meta API limits
  • Error Isolation: One failure doesn't block subsequent posts
  • Auditability: Each post can be tracked individually

Why Two-Step Instagram Posting?

Instagram's API requires:

  1. Create container → Get container_id
  2. Wait for processing → Check status
  3. Publish container → Get post_id

This asynchronous design prevents the workflow from blocking while Meta processes media.

Why Image Validation?

Pre-validating image URLs prevents:

  • Failed posts that waste API quota
  • Broken images on social platforms
  • User confusion when posts silently fail

Why Telegram Notifications?

Immediate visibility into:

  • Successful posts (confirmation)
  • Failed validations (action required)
  • API errors (debugging)

Use Cases

This workflow powers content scheduling for social media campaigns:

  1. Content Calendar: Team populates Google Sheet with planned posts
  2. Approval Workflow: Mark posts as "pending" when ready to publish
  3. Automated Publishing: Workflow runs daily, picks up pending content
  4. Cross-Platform Sync: Single entry posts to both Facebook and Instagram
  5. Audit Trail: Post IDs tracked in sheet for performance monitoring

Scalability Considerations

AspectCurrentScaling Options
Post frequency1 post/dayIncrease schedule or add parallel branches
Multi-accountSingle accountClone workflow nodes for additional accounts
Content sourcesGoogle SheetsAdd WordPress, RSS, API sources
NotificationsTelegramAdd Email, Slack, Discord

Portfolio Context

This n8n workflow demonstrates:

  • Low-code automation for business processes
  • Multi-platform API integration (Facebook, Instagram, Google, Telegram)
  • Error handling with retry logic and notifications
  • Workflow design for production reliability

Architecture Feedback

Spotted a potential optimization or antipattern? Let me know.

Submit a Technical Suggestion