Appearance
Create a Feed from a Website URL
FreshThis SOP walks through creating an RSS feed by pointing the API at any website URL. RSS.app analyzes the page and generates an RSS feed automatically — even for sites that don't publish a native RSS feed.
When to Use This Method
Use URL-based feed creation when:
- You want to track updates on a website that does not publish its own RSS feed
- You want RSS.app to handle the discovery and normalization of content from the target site
- You have a website URL but are unsure whether a native RSS feed exists
If the target site already publishes an RSS or Atom feed and you want to track that directly, see Create a Feed from Keyword or the native RSS URL method in the Create Feed API reference.
Prerequisites
- RSS.app account with API access enabled
- API Key and Secret (see Authentication)
- Node.js with
axiosinstalled
Step 1: Prepare Your Request
The create feed endpoint accepts a JSON body with a single required field: url. This is the URL of the website you want to track.
js
const axios = require('axios');
const apiClient = axios.create({
baseURL: 'https://api.rss.app/v1',
headers: {
Authorization: `Bearer YOUR_API_KEY:YOUR_API_SECRET`,
'Content-Type': 'application/json',
},
});Step 2: Send the Create Request
js
async function createFeedFromUrl(websiteUrl) {
const response = await apiClient.post('/feeds', {
url: websiteUrl,
});
return response.data;
}
// Example usage
createFeedFromUrl('https://techcrunch.com')
.then((feed) => {
console.log('Feed created:', feed.id);
console.log('RSS URL:', feed.rss_feed_url);
console.log('Title:', feed.title);
})
.catch((err) => {
console.error('Error:', err.response?.data || err.message);
});Step 3: Handle the Response
On success, the API returns HTTP 200 with the full feed object:
json
{
"id": "feed_abc123",
"title": "TechCrunch",
"source_url": "https://techcrunch.com",
"rss_feed_url": "https://rss.app/feeds/your-feed-id.xml",
"description": "Latest technology news and analysis",
"icon": "https://techcrunch.com/favicon.ico",
"is_active": true,
"items": [
{
"url": "https://techcrunch.com/article-slug",
"title": "Article Title",
"description_text": "Plain text description...",
"description_html": "<p>HTML description...</p>",
"thumbnail": "https://example.com/image.jpg",
"authors": [{ "name": "Author Name" }],
"date_published": "2024-01-15T10:30:00Z"
}
]
}The rss_feed_url is the distributable RSS feed URL. Share this with any RSS reader or use it in your own systems.
Step 4: Store the Feed ID
You will need the id field for all subsequent operations on this feed — retrieving, updating, deleting, or adding it to a bundle. Store it in your database alongside other feed metadata.
js
async function createAndStoreFeed(websiteUrl, db) {
const feed = await createFeedFromUrl(websiteUrl);
await db.feeds.insert({
externalId: feed.id,
title: feed.title,
sourceUrl: feed.source_url,
rssFeedUrl: feed.rss_feed_url,
createdAt: new Date(),
});
return feed;
}Step 5: Verify the Feed is Active
Check the is_active field in the response. An active feed ("is_active": true) is being monitored for updates. If the field is false, RSS.app was unable to process the URL — verify the URL is publicly accessible and returns valid HTML.
Error Handling
js
async function createFeedSafely(websiteUrl) {
try {
const feed = await createFeedFromUrl(websiteUrl);
return { success: true, feed };
} catch (err) {
const status = err.response?.status;
const message = err.response?.data?.message;
if (status === 400) {
return { success: false, reason: `Invalid URL or request: ${message}` };
}
if (status === 401) {
return { success: false, reason: 'Authentication failed — check your API credentials' };
}
if (status === 402) {
return { success: false, reason: 'Plan limit reached — upgrade to create more feeds' };
}
if (status === 409) {
return { success: false, reason: 'A feed for this URL already exists in your account' };
}
if (status === 429) {
return { success: false, reason: 'Rate limit hit — wait before retrying' };
}
return { success: false, reason: `Unexpected error: ${message || err.message}` };
}
}Common Issues
409 Conflict: You already have a feed tracking this URL. Use the List Feeds endpoint to find it, or check your stored feed IDs before calling create.
Feed shows no items: The website may use JavaScript rendering, behind a paywall, or have content that requires scrolling to load. RSS.app processes the initial HTML load. For JavaScript-heavy sites, results may vary.
is_active is false: The URL was unreachable or returned an error during processing. Verify the site is publicly accessible by opening it in a browser without being logged in.