RSS Feed to Workvivo Posts
Overview
Use the Workvivo Updates API to build a lightweight integration layer that automatically converts RSS feed items from external sources into Workvivo posts. Rather than relying on employees to manually share industry news, company press releases, or blog updates, organisations can subscribe to RSS feeds and have new items automatically published to relevant Workvivo spaces, keeping teams informed in real time without any manual effort.
This use case covers polling RSS feeds on a schedule, transforming feed entries into formatted posts, and publishing them to Workvivo with deduplication to avoid repeat content.
Value & Benefits
Keep employees informed automatically. Surface relevant external content (industry news, company blog posts, regulatory updates) directly in Workvivo without anyone needing to copy-paste links.
Reduce information silos. Ensure that news and updates from external sources reach the right teams and spaces, not just the handful of people who happen to follow those feeds.
Eliminate manual curation effort. Remove the recurring task of someone checking external sites and deciding what to share, the integration handles it continuously.
Enable real-time awareness. New content appears in Workvivo within minutes of being published to the source feed, rather than waiting for a weekly roundup or someone to notice it.
Scale across unlimited sources. Add as many RSS feeds as needed (competitor blogs, regulatory bodies, internal engineering blogs, press rooms) without increasing workload.
Applications
Industry news distribution. Subscribe to trade publication RSS feeds and auto-post new articles to a relevant space (e.g., "Industry Insights" or "Competitive Intelligence").
Company press and blog syndication. Automatically share new entries from the corporate blog or press room into an all-company space so employees see external communications in real time.
Regulatory and compliance alerts. Monitor government or regulatory body feeds and post new notices to compliance or legal team spaces.
Engineering and product blogs. Pipe internal or external engineering blog feeds into technical spaces to keep developers informed of new releases, patches, or best practices.
Partner and ecosystem updates. Track RSS feeds from key partners, vendors, or ecosystem platforms and surface relevant updates to partnership or procurement teams.
Event and conference announcements. Convert event listing feeds into Workvivo posts, ensuring teams are aware of upcoming conferences, webinars, or deadlines.
Technical Details
Before using these examples, complete Quick Start to create an app and API key and find your Base URL and Workvivo-Id.
Request Format Notes
text, user_id or user_external_id, and created_at are required when creating an update. created_at must be UTC in YYYY-MM-DDTHH:MM:SSZ format. A past created_at publishes immediately and backdates the post. A future created_at schedules the post to publish automatically at that time, provided the selected author has permission to create scheduled posts.
The text field is parsed as Workvivo post text. Do not send raw HTML expecting it to render as markup; HTML tags are escaped. Convert RSS summaries to plain text or supported Workvivo post formatting before publishing.
Create a Post from a Feed Item
This use case creates updates with POST /v1/updates and removes them with DELETE /v1/updates/{update_id} or DELETE /v1/updates/by-external-id/{external_id}.
curl -X POST https://api.workvivo.com/v1/updates \
-H "Authorization: Bearer $WORKVIVO_TOKEN" \
-H "Workvivo-Id: $WORKVIVO_ORG_ID" \
-H "Accept: application/json" \
--form-string 'text=**New from TechCrunch: AI Startups Raise Record Funding in Q2**
A new wave of AI-focused startups has raised over $12B in Q2 2026...
Read full article: https://techcrunch.com/2026/06/15/ai-funding-q2' \
--form-string 'link=https://techcrunch.com/2026/06/15/ai-funding-q2' \
-F "user_id=3" \
-F "external_id=rss-techcrunch-ai-funding-q2" \
-F "created_at=2026-06-15T09:00:00Z" \
-F "audience[type]=spaces" \
-F "audience[spaces][0]=1"
{
"data": {
"id": 24,
"legacy_system_id": "rss-techcrunch-ai-funding-q2",
"text": "**New from TechCrunch: AI Startups Raise Record Funding in Q2**\n\nA new wave of AI-focused startups has raised over $12B in Q2 2026...\n\nRead full article: https://techcrunch.com/2026/06/15/ai-funding-q2",
"created_at": "2026-06-15T09:00:00.000000Z",
"audience": {
"type": "Space"
},
"permalink": "https://yourcompany.workvivo.com/update/24"
},
"status": "success",
"meta": {}
}
Delete a Post
Useful for removing a post if a feed item is retracted or published in error.
curl -X DELETE https://api.workvivo.com/v1/updates/{update_id} \
-H "Authorization: Bearer $WORKVIVO_TOKEN" \
-H "Workvivo-Id: $WORKVIVO_ORG_ID" \
-H "Accept: application/json"
{
"data": {
"id": 24,
"external_id": "rss-techcrunch-ai-funding-q2"
},
"status": "success",
"meta": {}
}
JavaScript Integration Example
Read an RSS feed and publish each item as a Workvivo update. The RSS item's stable identifier is also sent as external_id, allowing repeated runs to identify duplicates.
import Parser from 'rss-parser';
const parser = new Parser();
const apiUrl = 'https://api.workvivo.com/v1';
const headers = {
Authorization: `Bearer ${process.env.WORKVIVO_TOKEN}`,
'Workvivo-Id': process.env.WORKVIVO_ORG_ID,
'Content-Type': 'application/x-www-form-urlencoded',
Accept: 'application/json',
};
export async function syncFeed(feedUrl, spaceId) {
const feed = await parser.parseURL(feedUrl);
for (const item of feed.items) {
const text = [
item.title,
item.contentSnippet,
`Read the full article: ${item.link}`,
]
.filter(Boolean)
.join('\n\n');
await publishUpdate({
text,
externalId: item.guid ?? item.link,
publishedAt: item.isoDate ?? new Date().toISOString(),
spaceId,
});
}
}
async function publishUpdate(update) {
const body = new URLSearchParams({
text: update.text,
external_id: update.externalId,
user_id: process.env.WORKVIVO_AUTHOR_USER_ID,
created_at: new Date(update.publishedAt)
.toISOString()
.replace(/\.\d+Z$/, 'Z'),
'audience[type]': 'spaces',
'audience[spaces][0]': update.spaceId,
});
const response = await fetch(`${apiUrl}/updates`, {
method: 'POST',
headers,
body,
});
if (!response.ok) {
throw new Error(`Update creation failed: ${response.status}`);
}
}
syncFeed('https://your-company.example/news.rss', 42);