Documentation Menu

How Ranking Works

By the end of this page, you'll understand the philosophy behind Scour's ranking and how it differs from algorithmic feeds on other platforms.

The Philosophy: Hidden Gems Over Viral Content

Most algorithmic feeds optimize for engagement. Clicks, shares, and time-on-site drive what gets shown. This creates a bias toward viral content: the article everyone already saw, the hot take designed to provoke, the clickbait that works.

Scour takes a different approach. The goal is to surface content you'd never find otherwise: the indie blog with 50 readers, the obscure technical post that's exactly what you needed, the thoughtful essay that didn't go viral because it required attention.

To do this, Scour deliberately avoids using popularity signals. There's no consideration of how many shares a post has, how many backlinks point to it, or how much engagement it's getting elsewhere. Instead, ranking is based entirely on:

  • Your explicit interests — topics you've told Scour you care about
  • Content quality — a domain blocklist filters out known spam, content farms, and SEO-heavy sites
  • Source diversity — ensuring no single topic or source dominates your feed

Explicit Interests, No Pigeonholing

On most platforms, clicking one article about cooking can flood your feed with cooking content for weeks. The algorithm infers your interests from behavior and doubles down.

Scour doesn't work this way. Your feed is determined by the interests you explicitly add. One click on a random article won't change anything. If you want more cooking content, you add a cooking interest. If you don't, you don't.

Scour does use your reactions and reading history to subtly tune your feed: sources you engage with become slightly more prominent, and topic areas you consistently read get a bit more space. But these are gentle adjustments within your existing interests, not new topics being injected. Scour also uses reactions to suggest new interests you might want to add, but suggestions are just suggestions.

This keeps your feed predictable. You always know why you're seeing something because it matches an interest you chose. Reactions fine-tune the mix, not the ingredients.

How Interest Matching Works

Scour compares each interest to every article using two complementary signals: semantic matching (does the article mean something close to the interest?) and lexical matching (does the article actually say the things this interest is about?). Both feed into a single score per article.

The two signals balance each other: semantic catches articles that talk around a topic without using its name; lexical catches articles that talk about a topic directly, in the topic's own vocabulary.

Semantic Matching

When you add an interest like "distributed systems" or "fermentation," Scour converts that phrase into a semantic embedding (a vector that represents its meaning). Every article in Scour's database also has an embedding generated from its content.

Embeddings are produced by a model trained on a large amount of text; phrases with related meanings end up with similar vectors even when they share no actual words. That's why semantic matching works on meaning rather than exact phrasing:

  • An interest in "machine learning" finds articles about "neural networks" and "deep learning" even if they don't contain the literal phrase
  • A specific interest like "PyTorch distributed training" finds relevant content even when phrased differently

Scour uses binary quantized embeddings with Hamming distance for fast comparison, which allows real-time ranking across hundreds of thousands of articles. For the technical details (why binary quantization works surprisingly well and how Scour indexes embeddings), see Binary Vector Embeddings Are So Cool.

Lexical Matching

On the lexical side, Scour works in two steps. First it confirms an article actually uses your interest's vocabulary in the right sense, ruling out the wrong meaning of an ambiguous word. Then it weighs how much the article is genuinely about the topic, looking across its title, summary, and body. This is what makes "Rust" the programming language match programming articles, not articles about the Rust Belt or metal corrosion.

The semantic and lexical scores combine into a single number per article. Each article is scored by its best matching interest, so a perfect match for one interest beats a mediocre match for several. How much the semantic vs lexical side weighs is set by the interest's specificity tier (Broad leans semantic; Specific leans lexical; Normal is balanced). See Interests for how to tune that.

Timeframe & Recency

The timeframe selector affects how recency factors into ranking:

  • Fresh — Prioritizes recent content while ensuring your feed spans multiple time periods. Ranking is still based on relevance to your interests, but selection is balanced across recency buckets so you see a spread of new and recent posts. This is the default.
  • Day, Week, Month — Show content from that time period ranked purely by relevance.

Rankings are computed in real-time on each page load, not precomputed. This means changes to your interests or filter settings take effect instantly.

Quality Filtering

Before ranking, Scour filters out content from low-quality sources. A domain blocklist of 1993710 domains removes known spam, content farms, and SEO-heavy sites.

Additionally, articles with listicle-style titles ("5 Ways to...", "Top 10...") and titles that lead with attention-grabbing emojis are filtered out before ranking. Those articles are tempting to click on, but often contain particularly unsatisfying content.

For more on filtering options you control, see Content Filtering.

Source Discovery Within Your Interests

Discovery on Scour means finding new voices on topics you already care about—not being pushed toward new topics. The unknown indie blog writing about Rust is the win, not an algorithm deciding you should suddenly care about cryptocurrency.

This is why source diversity is a core ranking factor. Relevance alone would produce a boring feed: if all your top-scoring articles came from the same few sources, you'd miss the breadth of perspectives Scour has access to. New and obscure sources aren't disadvantaged compared to established ones.

We find articles that match your interests, filter out low-quality content, then build a diverse feed that balances your topics, mixes familiar and new sources, and avoids showing the same story from multiple outlets.

In practice, this means:

  • You won't see five articles from the same source in a row
  • If you have ten interests, your feed will reflect a mix, not just your most active topic
  • When multiple outlets cover the same story, you see it once

Works for Niche Interests

Some recommendation systems only work well when you have similar users to learn from. Scour doesn't require this. If you have a unique combination of interests—say, fermentation and formal verification—the algorithm works just as well for you as for someone with mainstream tastes.

Ranking is computed entirely from your explicit interests and the content itself. There's no cold-start problem and no degradation for niche users.

How Reactions Shape Your Feed

Reactions won't change what topics you see. One click on a cooking article won't flood your feed with cooking content. Your interests are still the only way to add new topics to your feed.

What reactions do is subtly adjust the mix within your existing interests:

  • Source prominence: Likes and loves on a source's content make that source more likely to show up. Consistent dislikes or flags make a source less prominent.
  • Topic balance: If you have interests spanning technology and cooking but you consistently engage with tech articles, your tech interests get a bit more space. This adjusts how much of each area you see, not which areas appear.
  • Interest suggestions: Reactions feed into the interest recommendation system, which suggests new topics you might want to add. Suggestions are just suggestions.

These effects are designed to be gradual. A single reaction won't dramatically shift your feed. Adjustments are confidence-weighted (based on how much content you've seen from a source), capped so no source dominates, and decay over time. The goal is to show you more of what you enjoy without pigeonholing you.

What's on the Roadmap

Ranking is an ongoing project. A few things I'm working on:

  • More tuning controls: Exposing more ranking parameters so you can adjust quality filtering, source preferences, and more. You can track this feature request on the feedback board.

If an article you expected didn't show up in your feed, try the "Why didn't I see this?" page. Paste the article URL and Scour will explain what happened: whether the source isn't in your feeds, the article was filtered, or it ranked below your current page.

If you have ideas for how Scour's ranking algorithm could work better for you, I'd love to hear them: feedback.scour.ing.


Still have questions? Or feedback on these docs? Please let me know!

Keyboard Shortcuts

Navigation

Next / previous item
j/k
Open post
oorEnter
Preview post
v

Post Actions

Love post
a
Like post
l
Dislike post
d
Undo reaction
u
Save / unsave
s

Recommendations

Add interest / feed
Enter
Not interested
x

Go to

Home
gh
Interests
gi
Feeds
gf
Likes
gl
History
gy
Changelog
gc
Settings
gs
Browse
gb
Search
/

General

Show this help
?
Submit feedback
!
Close modal / unfocus
Esc

Press ? anytime to show this help