Home / Recipes / Build a crypto news feed that is not mostly press releases

Worked query

Build a crypto news feed that is not mostly press releases

/stories in hybrid mode. The parameters matter less than the reasoning behind them, so that is most of what is below.

The request

HTTP
GET /stories
  ?q=<asset or protocol>
  &mode=hybrid
  &from=<now - 24h>
  &limit=15

Why these parameters

Crypto coverage has an unusually high ratio of syndicated and promotional material to original reporting, so story collapsing matters more here than in almost any other subject. Use the outlet count on each story as a crude quality filter: promotional material is typically carried by one outlet or by a cluster of low-reputation ones, while genuine news reaches independent publishers.

The obvious approach, and why it loses

The obvious approach is an outlet allowlist of the crypto trade press, and it trades one problem for another: the trade titles carry the promotional material most heavily, because it is what their readers expect. The other instinct, filtering on tone to remove obvious promotion, catches the crudest examples and misses the well-written ones, which are the ones that mislead. Collapsing to stories and reading the outlet spread is a weaker filter than either in principle and a better one in practice, because it measures whether independent newsrooms thought the thing was worth covering rather than measuring how the copy was written.

When it returns too much, or too little

Too much means the asset name is also a common word or a project with an unrelated namesake, and a disambiguating term — the ticker, the chain, the foundation — fixes more than any mode change. Too little in a 24-hour window is normal outside an active period, and widening the window is safer than widening the query, which on this subject fills immediately with promotional material. If the outlet count filter is not separating anything, the reason is usually coordinated coverage across a cluster of low-reputation domains; an allowlist is the only thing that handles it, and it has to be maintained by someone who knows the field.

How you would know it is working

Sample fifty items and label each as original reporting, syndicated pickup or promotion. The third number is the one that matters and it is the one nobody measures; on an untuned feed it is routinely a third or more. Track it monthly rather than once, because the ratio moves sharply with market conditions — promotional volume rises when prices do. Also check the feed against a known event after the fact: if something significant happened and the feed carried it late or not at all, the outlet set is too narrow, and that failure is much harder to notice than the noise one.

When this is the wrong tool

Outlet count works less well as a quality filter in crypto than elsewhere, because coordinated promotional coverage across multiple outlets is common in a way it is not in other subjects. A story carried by eight outlets you do not recognise is not the same signal as one carried by eight you do, and the count alone cannot tell them apart. Maintain an outlet allowlist for anything you act on. This recipe is also unsuitable as a price signal: crypto coverage follows price moves far more often than it precedes them, so a feed that looks predictive in backtest is usually just reflecting what already happened.

Running it for real

Response fields, failure modes, adaptations and scheduling cost: Build a crypto news feed that is not mostly press releases, in the docs.

Related recipes