RSS Lookup is a free, open-source tool designed to find the RSS feed associated with any URL. Simply paste the website's address, and RSS Lookup will intelligently scan the site's HTML for feed links and check common feed path conventions.
Check out the live tool: www.rsslookup.com
- Simple Interface: Clean, easy-to-use single-page application.
- HTML Meta Tag Detection: Finds feeds specified using standard
<link rel="alternate" type="application/rss+xml">(and Atom) tags. - Common Path Fallback: Checks conventional paths like
/feed,/rss.xml,/atom.xmlif no tags are found. - Popular Site Integration: Rules to natively supports popular sites like YouTube, StackExchange, and Reddit.
- Abuse Prevention: Rate limiting via Upstash Redis to prevent abuse (per-IP and per-domain limits).
- User-Friendly Results: Displays found feed URLs clearly and easily copiable.
- Modern Tech: Built with TanStack Start, Vite, and Cloudflare Workers for a seamless full-stack experience at the edge.
This repository contains a full-stack application built with TanStack Start:
src/routes/: File-based routing (frontend & API)src/components/: React componentssrc/lib/: Shared utilities and server functionssrc/styles/: CSS and Tailwind stylespublic/: Static assetsworker/: Cloudflare Worker entry point
Follow these instructions to set up and run the project locally or deploy your own instance.
- Node.js (LTS version recommended, e.g., >= 18)
- npm (usually included with Node.js)
- An Upstash Redis database (for rate limiting - free tier available)
-
Clone the repository:
git clone https://github.com/mratmeyer/rsslookup.git cd rsslookup -
Environment Variables:
Create a file named
.envin the root directory. Add the following variables:# .env # Upstash Redis (for rate limiting) UPSTASH_REDIS_REST_URL=https://your-redis.upstash.io UPSTASH_REDIS_REST_TOKEN=your-token
Note: Rate limiting is optional for local development. If these variables are not set, rate limiting will be disabled.
-
Install Dependencies:
npm ci
Run the Development Server:
npm run devThe application will be available at http://localhost:3000 (or another port if 3000 is busy).
Preview with Wrangler (Cloudflare Worker environment):
npm run dev:wranglerBuild the Application:
npm run buildDeployment:
This application is configured for Cloudflare Workers.
To deploy to Cloudflare:
npm run deployMake sure to set the UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN environment variables in your Cloudflare dashboard/settings.
Some websites have RSS feeds but don't advertise them via standard HTML <link> tags. Site-specific rules allow RSS Lookup to discover these "hidden" feeds by recognizing URL patterns and constructing feed URLs programmatically.
For example, YouTube doesn't expose channel feeds in page metadata, but every channel has a feed at youtube.com/feeds/videos.xml?channel_id=.... The YouTube rule extracts the channel ID from the URL and builds the feed URL.
Current built-in rules: Reddit, YouTube, GitHub, Stack Exchange
Rules live in src/lib/rules/. Each rule implements the SiteRule interface:
interface SiteRule {
name: string;
matchesHostname(hostname: string): boolean;
extractFeeds(context: RuleContext, feedsMap: FeedsMap): void;
}When adding feeds to the feedsMap, use the FeedMetadata structure:
feedsMap.set(feedUrl, { title: "Feed Title", isFromRule: true });The isFromRule: true flag indicates the feed was discovered by a community rule, which displays a special icon in the UI to inform users.
To add a new rule:
-
Create
src/lib/rules/YourSiteRule.ts:import type { FeedsMap } from "../types"; import type { SiteRule, RuleContext } from "./SiteRule"; export class YourSiteRule implements SiteRule { readonly name = "Your Site"; matchesHostname(hostname: string): boolean { return hostname === "example.com" || hostname === "www.example.com"; } extractFeeds(context: RuleContext, feedsMap: FeedsMap): void { // Extract feeds and add to feedsMap with metadata feedsMap.set(`${context.origin}/feed.xml`, { title: "Example Feed", isFromRule: true, }); } }
-
Register it in
src/lib/rules/index.ts:import { YourSiteRule } from "./YourSiteRule"; const rules: SiteRule[] = [ // ... existing rules new YourSiteRule(), ];
-
Add tests in
tests/lib/rules.test.ts.
npm run dev: Starts the Vite development server.npm run dev:wrangler: Builds and starts the development server with Wrangler.npm run build: Builds the application for production.npm run preview: Locally preview the production build.npm run deploy: Builds and deploys the application to Cloudflare Workers.npm run lint: Runs ESLint to check for code style issues.npm run format: Runs Prettier to format the code.
This project is open source under the Apache 2.0 License. Please see the LICENSE file for details.
RSS Lookup is ad free, open-source, and privacy respecting, now and in the future. If you find RSS Lookup helpful and would like to show your appreciation, you can support its development:
Created by Max Ratmeyer - Personal Site