Skip to content

Create a Feed from a Website URL

Fresh

This 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 axios installed

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.

RSS.app API Documentation