Output Blocks#
Output blocks determine where your processed intelligence is delivered. HubFeed supports passive endpoints (RSS, JSON) and active delivery to chat platforms (Slack, Discord, Telegram).
RSS Output#
Generates a custom RSS feed from your processed data.
Configuration#
| Field | Required | Description |
|---|---|---|
| Feed Name | Yes | Title for the generated feed |
| Feed Description | Yes | Description of the feed content |
| Max Items | No | Maximum items in the feed (default: 100) |
| Public | No | Whether the feed is publicly accessible |
| Execution Interval | No | How often the workflow executes (minutes) |
Usage#
Once configured, your RSS output is accessible at:
https://hubfeed.io/feeds/{workflow_id}/rss
Subscribe to this feed in any RSS reader to receive updates.
JSON Output#
Exports data in JSON format for programmatic access.
Configuration#
| Field | Required | Description |
|---|---|---|
| Feed Name | Yes | Title for the generated feed |
| Feed Description | Yes | Description of the feed content |
| Max Items | No | Maximum items in the feed (default: 100) |
API Access#
Access your JSON output via the API:
curl -H "Authorization: Bearer {token}" \
https://hubfeed.io/api/v1/workflows/{id}/outputNote: JSON output requires API authentication.
Slack Output#
Delivers intelligence directly to a Slack channel as rich Block Kit messages.
How It Works#
HubFeed posts to your Slack channel via an Incoming Webhook. In Digest mode, all items are batched into a single rich message with titles, links, source attribution, and optional thumbnails. In Individual mode, each item is posted as its own message.
Configuration#
| Field | Required | Description |
|---|---|---|
| Feed Name | Yes | Name shown in the message header |
| Feed Description | Yes | Purpose of this feed |
| Webhook URL | Yes | Slack Incoming Webhook URL |
| Delivery Mode | No | Digest (default) or Individual |
| Include Enrichments | No | Show enrichment data in messages |
| Max Items | No | Maximum items per delivery (default: 100) |
| Execution Interval | No | How often the workflow executes (minutes) |
Setting Up the Slack Webhook#
Follow these steps to create an Incoming Webhook for your Slack workspace:
1. Create a Slack App
- Go to api.slack.com/apps and click Create New App.
- Choose From scratch.
- Give your app a name (e.g. "HubFeed") and select the workspace you want to post to.
- Click Create App.
2. Enable Incoming Webhooks
- On the app settings page, click Incoming Webhooks in the left sidebar (under "Features").
- Toggle Activate Incoming Webhooks to On.
3. Create a Webhook for Your Channel
- Scroll down and click Add New Webhook to Workspace.
- Select the channel where you want HubFeed to post (e.g.
#threat-intel). - Click Allow.
4. Copy the Webhook URL
- You'll see a new Webhook URL that looks like:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX - Copy this URL and paste it into the Webhook URL field in HubFeed.
Tip: You can create multiple webhooks for different channels within the same Slack app. Each HubFeed output block can target a different channel.
Example Output#
A digest message in Slack will look like:
[Header] My OSINT Feed — 3 new items
────────────────────────────
Threat Actor Targets Financial Sector
Brief summary of the article content...
RSS — @researcher — Mar 26, 14:30
────────────────────────────
New Malware Variant Discovered
Another article summary here...
TELEGRAM — Mar 26, 13:15
────────────────────────────
Discord Output#
Delivers intelligence to a Discord channel as rich embed messages with color-coded source types.
How It Works#
HubFeed posts to your Discord channel via a Channel Webhook. In Digest mode, items are sent as a batch of embeds (up to 10 per message). In Individual mode, each item gets its own embed. Embeds are color-coded by source type (orange for RSS, blue for Telegram, etc.).
Configuration#
| Field | Required | Description |
|---|---|---|
| Feed Name | Yes | Name shown in the digest header |
| Feed Description | Yes | Purpose of this feed |
| Webhook URL | Yes | Discord channel Webhook URL |
| Bot Username | No | Custom display name for the bot |
| Bot Avatar URL | No | Custom avatar image URL for the bot |
| Delivery Mode | No | Digest (default) or Individual |
| Include Enrichments | No | Show enrichment data as embed fields |
| Max Items | No | Maximum items per delivery (default: 100) |
| Execution Interval | No | How often the workflow executes (minutes) |
Setting Up the Discord Webhook#
1. Open Channel Settings
- In Discord, navigate to the channel where you want to receive messages (e.g.
#threat-intel). - Click the gear icon (Edit Channel) next to the channel name.
2. Create a Webhook
- Go to the Integrations tab.
- Click Webhooks, then New Webhook.
- Give it a name (e.g. "HubFeed") and optionally upload an avatar image.
3. Copy the Webhook URL
- Click Copy Webhook URL. It will look like:
https://discord.com/api/webhooks/1234567890/abcdefghijklmnop... - Paste this URL into the Webhook URL field in HubFeed.
Tip: You can override the webhook's display name and avatar on a per-block basis using the Bot Username and Bot Avatar URL fields. This lets you use one webhook but show different identities for different feeds.
Source Type Colors#
Embeds are automatically color-coded by source type:
| Source | Color |
|---|---|
| RSS | Orange |
| Orange-Red | |
| Telegram | Blue |
| X / Twitter | Sky Blue |
| Dark Blue | |
| Other | Discord Blurple |
Example Output#
A digest message in Discord will display as a series of embeds:
[Bot] HubFeed
My OSINT Feed — 3 new items
┌──────────────────────────────┐
│ Threat Actor Targets Finance │ (orange sidebar = RSS)
│ Brief summary of the... │
│ RSS — @researcher — Mar 26 │
└──────────────────────────────┘
┌──────────────────────────────┐
│ New Malware Variant Found │ (blue sidebar = Telegram)
│ Another summary here... │
│ TELEGRAM — Mar 26, 13:15 │
└──────────────────────────────┘
Telegram Bot Output#
Delivers intelligence to a Telegram group, channel, or private chat via the Bot API.
How It Works#
HubFeed sends messages through a Telegram Bot that you create and add to your target chat. In Digest mode, all items are formatted as a single HTML message. In Individual mode, each item is sent as a separate message. Messages are automatically split if they exceed Telegram's 4,096-character limit.
Configuration#
| Field | Required | Description |
|---|---|---|
| Feed Name | Yes | Name shown in the digest header |
| Feed Description | Yes | Purpose of this feed |
| Bot Token | Yes | API token from @BotFather |
| Chat ID | Yes | Numeric ID of the target chat |
| Delivery Mode | No | Digest (default) or Individual |
| Disable Link Preview | No | Disable URL previews in messages |
| Include Enrichments | No | Show enrichment data in messages |
| Max Items | No | Maximum items per delivery (default: 100) |
| Execution Interval | No | How often the workflow executes (minutes) |
Step 1: Create a Telegram Bot#
- Open Telegram and search for @BotFather (the official bot for creating bots).
- Send the command
/newbot. - Choose a name for your bot (e.g. "HubFeed Alerts"). This is the display name.
- Choose a username for your bot (e.g.
hubfeed_alerts_bot). Must end inbot. - BotFather will reply with your API token:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz_1234567890 - Copy this token and paste it into the Bot Token field in HubFeed.
Warning: Keep your bot token secret. Anyone with the token can send messages as your bot. If compromised, use
/revokewith @BotFather to generate a new one.
Step 2: Add the Bot to Your Chat#
Depending on where you want to receive messages:
For a Group:
- Open your Telegram group.
- Tap the group name at the top to open settings.
- Tap Add Members and search for your bot's username.
- Add the bot to the group. If the group has admin-only posting, you'll need to promote the bot to admin.
For a Channel:
- Open your Telegram channel.
- Go to channel settings > Administrators.
- Add your bot as an administrator (it needs the "Post Messages" permission).
For a Private Chat:
- Search for your bot's username in Telegram.
- Tap Start to begin a conversation with the bot.
Step 3: Find Your Chat ID#
The Chat ID is a numeric identifier that tells the bot where to send messages.
Method 1 — Using @userinfobot:
- For groups: Add
@userinfobotto your group. It will immediately reply with the chat ID (a negative number like-1001234567890). You can remove the bot after. - For channels: Forward any message from your channel to
@userinfobot. It will reply with the channel's chat ID. - For private chats: Send any message to
@userinfobotdirectly. It replies with your personal chat ID.
Method 2 — Using @RawDataBot:
- Add
@RawDataBotto your group or send it a message. It replies with detailed JSON that includes thechat.idfield.
Copy the numeric ID (including the - sign for groups/channels) and paste it into the Chat ID field in HubFeed.
Example Output#
A digest message in Telegram will look like:
My OSINT Feed — 3 new items
Threat Actor Targets Financial Sector
Brief summary of the article content...
RSS — @researcher — Mar 26, 14:30
New Malware Variant Discovered
Another article summary here...
TELEGRAM — Mar 26, 13:15
CVE-2026-1234 Exploited in the Wild
Critical vulnerability details...
RSS — Mar 26, 12:00
Titles are bold and linked to the original source when a URL is available.
Delivery Modes#
All chat output blocks (Slack, Discord, Telegram) support two delivery modes:
- Digest (default, recommended): All items are combined into a single rich message. If the content exceeds the platform's size limit, HubFeed automatically splits it across multiple messages. Best for periodic workflows that produce batches of items.
- Individual: Each item is sent as its own message. Best for real-time alerting on low-volume, high-priority feeds.
In Individual mode, HubFeed enforces a delay between each message to stay within the platform's rate limits:
| Platform | Delay Between Messages | Message Size Limit |
|---|---|---|
| Slack | 1 second | 50 blocks per message (~24 items) |
| Discord | 2 seconds | 10 embeds / 6,000 characters per message |
| Telegram | 3 seconds | 4,096 characters per message |
Tip: For Individual mode, keep Max Items conservative (20-50) to avoid long delivery times. For example, 50 items on Telegram would take ~2.5 minutes to deliver.
Multiple Outputs#
You can send processed data to multiple outputs simultaneously:
For example, you might configure a workflow with:
- An RSS Output for subscribers who prefer feed readers
- A Slack Output for your SOC team's
#alertschannel - A Telegram Bot for analysts in the field
All three will receive the same processed intelligence each time the workflow executes.
Best Practices#
- Use Digest mode for periodic workflows (hourly or daily) — it keeps channels clean
- Use Individual mode for real-time alerting on low-volume, high-priority feeds
- Set Max Items conservatively for Individual mode to avoid rate limit issues (20-50 items)
- Use RSS/JSON for archival and chat outputs for real-time awareness
- Separate high-priority and low-priority feeds into different channels to reduce alert fatigue
- Enable enrichments only when your team needs IOC context inline — it adds visual noise
Next Steps#
- BYOD Agent — Run your own agent for private sources