← Back to Help

Automations

Automations let you schedule emails, webhooks, and notifications to fire at specific times or intervals. You can send ANY message on ANY schedule — the payload template is free-form text, so you're not limited to feed data.

---

What Can You Automate?

Automations are a general-purpose notification scheduler. Some actions pull data from your feeds (using {variables}), but many actions are just custom messages you write yourself.

| Category | Example | Trigger | Channel |

|----------|---------|---------|---------|

| Reminders | "Doctor appointment tomorrow at 3pm" | One-shot | Telegram |

| Monitoring | "Ping healthcheck URL every 5 minutes" | Interval 5min | Webhook |

| Briefings | "Email me new items at 7am daily" | Daily 7am | Email |

| Reports | "Post weekly roundup to Discord" | Day-of-week Mon | Discord |

| Data pushes | "Send latest article JSON to CRM every hour" | Interval 60min | Webhook |

| Team alerts | "Notify Slack channel on keyword match" | Interval | Webhook |

| Deadlines | "Remind me 2 days before project due" | One-shot | Email |

| Heartbeats | "Prove scraper is alive every hour" | Interval 60min | Webhook |

The template can be literally anything. Use {variables} to pull in feed data, or just write plain text. Both work.

---

Creating an Action

1. Go to Automations in the sidebar

2. Click New Action

3. Give it a name (e.g., "Morning Briefing" or "Doctor Reminder")

4. Choose a trigger:

- Interval — Fire every N minutes (min 5)

- Daily — Fire every day at a specific time

- Day of week — Fire on specific weekdays

- One-shot — Fire once at a specific date and time

5. Choose a channel:

- Webhook — POST to any URL (JSON payload)

- Email — Send to an email address (requires SMTP configured)

- Discord — Send to a Discord webhook URL

- Telegram — Send to a Telegram chat ID

6. Write a payload template (see examples below)

7. Click Create

---

Templates: With or Without Variables

Without Variables (standalone — no feed needed)

You can use Automations purely as a notification scheduler. Write whatever message you want:

`

Don't forget: Doctor appointment tomorrow at 3pm.

555-1234 for the office. Bring insurance card.

`

`

Healthcheck OK — RSSFlux scraper running.

No action needed.

`

`

Quarterly compliance review due next week.

Review access logs and update security policies.

`

With Variables (pulled from your feeds)

Use {variables} to insert live feed data:

`

New item from {feed_title}:

{latest_item_title}

{items[0].link}

`

JSON Payload for Webhooks

`

{

"feed": "{feed_title}",

"title": "{latest_item_title}",

"url": "{items[0].link}",

"timestamp": "{now}"

}

`

---

Template Variable Reference

| Variable | Replaced With |

|----------|---------------|

| {feed_title} | Title of the first feed |

| {feed_title[N]} | Title of the Nth feed (0 = first) |

| {feed_url} | URL of the first feed |

| {feed_url[N]} | URL of the Nth feed |

| {feed_list} | All feed names, comma-separated |

| {feed_item[N]} | Bullet list of Nth feed's items |

| {feed_item[N][M].title} | Mth item title from Nth feed |

| {feed_item[N][M].link} | Mth item link from Nth feed |

| {feed_item[N][M].description} | Mth item description from Nth feed |

| {item_count} | Number of new items |

| {items} | Bullet list of item titles (flat across all feeds) |

| {items[N].title} | Nth item title (flat) |

| {items[N].link} | Nth item link (flat) |

| {items[N].description} | Nth item description (flat) |

| {latest_item_title} | Same as items[0].title |

| {now} | Current date and time |

| {event_type} | Feed event type: new_item, scrape_failed, scrape_success |

| {scrape_status} | Same as event_type |

| {scrape_error} | Error message if scrape failed (empty on success) |

Variables are optional. If no feeds match your filter, they'll be empty strings.

---

Real-World Use Cases

| Use Case | Trigger | Channel | Template (what gets sent) |

|----------|---------|---------|--------------------------|

| Doctor appointment | One-shot Oct 9 at 3pm | Telegram | "Don't forget: Doctor at 3pm tomorrow. 555-1234." |

| Healthcheck ping | Every 5 minutes | Webhook | POST {"status": "ok", "timestamp": "..."} |

| Morning email briefing | Daily at 7am | Email | "Today's {item_count} items from {feed_title}: {items}" |

| Weekly Discord report | Every Monday 9am | Discord | "TechCrunch — 12 items this week. Top story: {latest_item_title}" |

| Hourly data push to CRM | Every 60 minutes | Webhook | JSON: {feed_title}, {latest_item_title}, {items[0].link} |

| Project deadline | One-shot June 15 at 9am | Email | "Project X due tomorrow. Final review needed." |

| Uptime heartbeat | Every hour | Webhook | POST to BetterUptime or Pingdom |

| Keyword alert | Interval 30min | Telegram | Polls feeds for keyword, sends matches |

| Compliance reminder | One-shot quarterly | Email | "Quarterly security review due. ~30 min task." |

| Evening digest | Daily at 6pm | Discord webhook | "Today's roundup: {item_count} new articles across all feeds" |

| Per-feed second items | Daily 7am | Email | "{feed_title[0]} 2nd: {feed_item[0][1].title}\n{feed_title[1]} 2nd: {feed_item[1][1].title}" |

| Multi-feed comparison | Interval 60min | Discord | "{feed_title[0]} vs {feed_title[1]}\nLatest: {feed_item[0][0].title} → {feed_item[1][0].title}" |

| Per-feed monitoring | Daily 8am | Slack | "{feed_title[0]}: {feed_item[0][0].title}\n{feed_title[1]}: {feed_item[1][0].link}" |

| Push to phone | Instant via button | Slack/Discord/Telegram/Signal | Click the Send button on any feed item — no template needed, uses default formatting |

| Push to contact | Instant via button | Slack/Discord/Telegram/Signal | Save contacts in Settings, pick from dropdown when sending an article |

---

Testing

Click the Play button next to any action to fire it immediately. The test sends the message through the full pipeline — template rendering, channel dispatch, and logging.

To check if a past action fired successfully, check the backend logs:

`bash

docker compose logs api 2>&1 | grep "dispatch_action_now"

`

---

Limits

| Tier | Max Actions |

|------|------------|

| Free | 2 |

| Hobby | 5 |

| Hobby+API | 10 |

| Developer | 25 |

| Business | 100 |

---

Troubleshooting

| Issue | Cause | Fix |

|-------|-------|-----|

| Action didn't fire | next_fire_at not reached | Wait, or use the Test button |

| "Action limit reached" | At max for your tier | Delete unused actions or upgrade |

| Webhook returned error | URL invalid or unreachable | Check URL accepts POST |

| Email not sent | SMTP not configured | Configure Admin → Settings → Email |

| Template shows raw {variable} | Misspelled name | Check spelling against reference |

| Telegram not sent | Wrong chat ID or bot token | Verify chat ID and bot token in Admin settings |