Guides/n8n

Social media automation with n8n and Aether

Connect n8n to the Aether API and build no-code social media workflows: RSS feed to posts, cron-scheduled publishing, webhook-triggered Slack alerts, auto-reply to DMs, and analytics logging to Google Sheets.

~30 minn8n Cloud or self-hostedNo code required
Prerequisites
  • • n8n — n8n Cloud or self-hosted (Docker recommended)
  • • An Aether account with at least one connected social profile
  • • Your Aether API key from the dashboard

Workflows covered in this guide

1
RSS → Social post
Monitor an RSS feed. Every new item triggers a formatted post to all connected platforms.
RSS Feed TriggerFunction (format text)HTTP Request (POST /v1/posts)
2
Cron → Scheduled post
Fire at a fixed time each day (or week) and publish a post to all platforms.
Schedule Trigger (cron)Set (build content)HTTP Request (POST /v1/posts)
3
Aether webhook → Slack alert
Receive publish confirmations and failures in Slack in real time.
Webhook TriggerSwitch (event type)Slack (send message)
4
New DM → Auto-reply
Detect incoming messages and send an automated first response.
Webhook Trigger (message.created)IF (filter conditions)HTTP Request (POST /v1/inbox/{id}/reply)
5
Analytics → Google Sheets
Pull weekly account metrics and log them to a Google Sheet.
Schedule TriggerHTTP Request (GET /v1/analytics/account)Google Sheets (append row)

Step 1 — Add Aether credentials to n8n

In n8n, go to Credentials → New → HTTP Header Auth. Set the header name to Authorization and the value to Bearer YOUR_AETHER_API_KEY. Save as "Aether API".

{
  "name": "Aether API",
  "type": "httpHeaderAuth",
  "data": {
    "name": "Authorization",
    "value": "Bearer YOUR_AETHER_API_KEY"
  }
}

Select this credential in every HTTP Request node that calls Aether — you won't need to re-enter the key.

Workflow 1 — RSS feed to social posts

This workflow polls an RSS feed, formats each item as a social caption, and posts it to all connected platforms.

Nodes: RSS Feed Trigger → Function → HTTP Request (POST /v1/posts)

In the Function node, transform the RSS item into post text. This example truncates to Instagram's 2,200-character limit:

// Function node — "Format RSS item as social post"
// Input: RSS item from n8n RSS Feed Trigger
const item = $input.first().json;

const title   = item.title ?? "";
const link    = item.link  ?? "";
const summary = item.contentSnippet ?? item.description ?? "";

// Truncate to fit Instagram's 2,200 char limit
const maxLen  = 2200 - link.length - 4; // 4 = " — " + newline
const excerpt = summary.length > maxLen
  ? summary.slice(0, maxLen - 3) + "..."
  : summary;

return [{
  json: {
    postText: `${title}\n\n${excerpt}\n\n${link}`,
    sourceTitle: title,
    sourceLink: link,
  }
}];

In the HTTP Request node, POST to https://api.aetherhq.dev/v1/posts using the output from the Function node:

// HTTP Request node — "Post to Social Media"
// Method: POST
// URL: https://api.aetherhq.dev/v1/posts
// Authentication: Aether API (Header Auth)
// Body (JSON):
{
  "text": "{{ $json.postText }}",
  "profileIds": ["ig_abc123", "li_comp789", "th_user456"],
  "scheduledFor": "{{ $json.scheduledFor }}"
}

Workflow 2 — Cron-scheduled posts

Fire at a fixed schedule with a cron trigger and publish static or dynamically assembled post content:

// Schedule Trigger — "Daily 9am UTC"
// Trigger rule: Cron — 0 9 * * *  (every day at 09:00 UTC)

// Set node — "Build post content"
// postText: "Good morning — here's today's update from the team."
// profileIds: ["ig_abc123", "li_comp789"]

// HTTP Request node — POST https://api.aetherhq.dev/v1/posts
// Body:
{
  "text": "{{ $json.postText }}",
  "profileIds": {{ $json.profileIds }}
}

Workflow 3 — Aether webhooks in n8n

Add a Webhook Trigger node to n8n. n8n gives you a public URL (e.g. https://your-n8n.app/webhook/abc123). Register that URL with Aether once, then route incoming events with a Switch node:

// Webhook Trigger node — n8n provides a URL like:
// https://your-n8n.app/webhook/abc123

// Register it with Aether once (run manually or via API):
// POST https://api.aetherhq.dev/v1/webhooks
// { "url": "https://your-n8n.app/webhook/abc123",
//   "events": ["post.published", "post.failed", "message.created"] }

// Switch node — route by event type
// Route 1: event === "post.published"  → Slack message "Post live on {{ $json.data.platform }}"
// Route 2: event === "post.failed"     → Slack message "⚠ Post failed: {{ $json.data.error.message }}"
// Route 3: event === "message.created" → HTTP Request to reply (see below)
Tip:n8n's Webhook node doesn't verify HMAC signatures natively. For production, add a Function node immediately after the trigger to verify the x-aether-signature header before processing the event. See the webhook guide for HMAC verification code.

Workflow 4 — Auto-reply to DMs

Extend the webhook workflow: when a message.created event fires, add an IF node to filter conditions and an HTTP Request node to reply:

// Auto-reply to incoming DMs — HTTP Request node
// Method: POST
// URL: https://api.aetherhq.dev/v1/inbox/{{ $json.data.messageId }}/reply
// Body:
{
  "text": "Thanks for reaching out! Our team will get back to you within 24 hours."
}

// Add an IF node before this to only reply when:
// $json.data.platform === "instagram"
// AND $json.data.direction === "inbound"
// AND $json.data.text does not contain "unsubscribe"

Workflow 5 — Weekly analytics to Google Sheets

Schedule a weekly run that pulls account metrics and appends them to a Google Sheet for stakeholder reporting:

// Pull weekly analytics — HTTP Request node
// Method: GET
// URL: https://api.aetherhq.dev/v1/analytics/account
// Query params:
//   from: {{ $now.minus({ days: 7 }).toISO() }}
//   to:   {{ $now.toISO() }}
//   granularity: day

// Downstream: Google Sheets node to log the data
// Or: Slack message summarising the week's top metrics

Per-platform overrides in n8n

Use n8n expressions ({{ $json.fieldName }}) to pull different copy per platform from upstream Set or Function nodes:

// HTTP Request node — post with per-platform overrides
// Method: POST
// URL: https://api.aetherhq.dev/v1/posts
// Body (JSON):
{
  "text": "Default caption for any platform not overridden.",
  "profileIds": ["ig_abc123", "li_comp789", "tt_xyz789"],
  "overrides": {
    "ig_abc123": {
      "text": "{{ $json.instagramText }}"
    },
    "li_comp789": {
      "text": "{{ $json.linkedinText }}"
    },
    "tt_xyz789": {
      "text": "{{ $json.tiktokText }}"
    }
  }
}
n8n + Aether tips
  • Use the 'Continue on Fail' option on HTTP Request nodes so one failed post doesn't stop the whole workflow.
  • Add a 'Wait' node between multiple post requests to respect platform rate limits when posting in bulk.
  • Store the webhook.secret in n8n's environment variables — don't hardcode it in workflow nodes.
  • Use n8n's Error Trigger to catch workflow failures and send a Slack alert.
  • The Aether API returns structured errors — check $json.error.code in a downstream IF node to handle specific failure cases.

Get your API key and start automating

Free tier: 3 connected accounts, all API endpoints, webhooks — no credit card.