Recipes / Follow a sector, but only in publications you trust
Follow a sector, but only in publications you trust
/stories in hybrid mode. This page is the
operational half — what comes back, how it breaks, and what running it for real takes.
The request
GET /stories
?q=<sector terms>
&mode=hybrid
&source=<domain>
&from=<now - 3d>
# repeat per outlet, merge client-side As a call you can paste:
curl -s -G "https://api.unzoi.com/stories" \
-H "x-api-key: $UNZOI_KEY" \
--data-urlencode "q=<sector terms>" \
--data-urlencode "mode=hybrid" \
--data-urlencode "source=<domain>" \
--data-urlencode "from=<now - 3d>"
For an agent rather than a script, the same query is the list_stories
MCP tool with these as its arguments.
Parameters used here
What comes back
Coverage from only those publishers. Because you fixed the outlet set, week-over-week comparisons within it are meaningful rather than an artefact of which sites happened to match.
Field by field: the /stories response reference.
How this goes wrong
Assuming a trusted-outlet list gives you completeness. It gives you precision. Run a wider unscoped query periodically to check what your list is missing.
Adapting it
The same shape works for regional scoping — a set of outlets in one market is usually a sharper filter than a country code, because it excludes the national press writing about that market from outside it. For editorial-position comparison, build two sets rather than one and query both, then compare the story lists: what appears in one and not the other is the finding, and merging them into a single feed destroys it.
Running it for real
One request per outlet per poll multiplies quickly, so keep the set small and deliberate rather than comprehensive. A dozen outlets polled hourly is roughly nine thousand requests a month before anything else. Where the set is large, poll it less often and use an unconstrained query at a higher frequency as the tripwire, falling back to the per-outlet sweep only when the tripwire fires. Re-audit the set quarterly: publications fold and get acquired, and a dead domain returns zero results indefinitely without erroring.
Related recipes
Why this approach
The case for these parameters over the obvious alternatives — and when this recipe is the wrong tool entirely — is on the recipe's page on unzoi.com. It is kept there rather than repeated here, so the argument and the operations cannot drift apart.