For AI agents
The daily top 20 trending terms in data, tech and AI, as text and a cached JSON API. Each morning at 05:45 UTC the full day just ended is ranked; today so far is ranked again through the day.
Point your agent here
- https://trending.fru.dev/llms.txtSummary, today's ranking and the number one of each day
- https://trending.fru.dev/llms-full.txtEvery ranked term of every day, one line each
- https://trending.fru.dev/openapi.jsonOpenAPI 3.1 spec of the read API, for tool use
Call the API
MethodPathParametersReturns
- GET/api/todaynoneThe latest day's top 20: rank, term, category, score, lift, mentions per source, top links.
- GET/api/days/{day}day: YYYY-MM-DDThat day's top 20, same shape as /api/today.
- GET/api/calendarlimit (1 to 400, default 400)Each day's number one: day, term, slug, category, score.
- GET/api/termscat, limit (1 to 200, default 100), offsetTerms that made a daily top 20: first seen, peak, days in the top 20, days at number one.
- GET/api/terms/{slug}slugOne term and its daily score series (every day it ranked in a day's top 60).
- GET/api/riserslimit (1 to 100, default 20)Summed score of the last 7 days against the 7 before, biggest change first.
- GET/api/movementsnoneTechnology waves (RAG, MCP, vibe coding...): stage, month emerged, origin link, change against last month, 14-day buzz, last 12 months of the lifecycle index.
- GET/api/movements/{slug}slugOne movement: monthly curve since it emerged (Hacker News, Wikipedia, arXiv), stage rule inputs, related companies, releases, papers, repos, funding, history.
- GET/api/changessince (ISO date or time), limit (1 to 500, default 200)The append-only log, newest first: terms added (first ranked), renamed, recategorised, hidden or merged, and feeds found, activated or dropped, with the source link and the run; title is the term name or the feed label. A term row is listed once the term has a page (a daily top 20), and links to it (a merged term to the term it was merged into).
- GET/api/sourcesstate (active, candidate, dead), kind (endpoint, youtube, reddit, mastodon, blog, arxiv), limit (1 to 1000, default 500)The feeds Trending reads and the ones it is still checking: kind, label, link, the companies.fru.dev company when it is an official channel, how it was found, first seen, last read, items on the last read.
- GET/api/companiessince (ISO date or time)Companies that ranked as trending terms, for the companies.fru.dev registry: slug, name, domain, first seen, last seen, page URL.
- GET/api/searchq, limit (1 to 20)Ranked matches over terms, categories, days and pages.
JSON, GET only, CORS open, cached at the edge for an hour. List endpoints take limit (at most 200) and offset. openapi.json
curl
curl -s "https://trending.fru.dev/api/today"Sample: /api/today
{
"day": "2026-11-08",
"terms": [
{
"rank": 1,
"term": "Nvidia",
"slug": "nvidia",
"category": "companies",
"score": 43.5,
"lift": 2.52,
"mentions": 74,
"sources": {
"mastodon": 8,
"hn": 3,
"github": 1,
"hf": 1,
"reddit": 1,
"gnews": 53,
"blogs": 7,
"news": 10
},
"links": [
{
"title": "dsx-ai-factory/nvke: NVIDIA Kubernetes Engine (NVKE). A mana...",
"url": "https://github.com/dsx-ai-factory/nvke",
"source": "github",
"eng": 345
}
],
"url": "https://trending.fru.dev/terms/nvidia"
},
{
"rank": 2,
"term": "Jensen Huang",
"slug": "jensen-huang",
"category": "people",
"score": 37.5,
"lift": 5.7,
"mentions": 42,
"sources": {
"hn": 2,
"reddit": 1,
"mastodon": 3,
"gnews": 31,
"blogs": 5,
"news": 10
},
"links": [
{
"title": "Nvidia CEO Jensen Huang's letter to staff about affair",
"url": "https://news.ycombinator.com/item?id=50418016",
"source": "hn",
"eng": 728
}
],
"url": "https://trending.fru.dev/terms/jensen-huang"
},
"..."
]
}curl
curl -s "https://trending.fru.dev/api/calendar?limit=3"Sample: /api/calendar?limit=3
{
"days": [
{
"day": "2026-11-06",
"top": "Tesla",
"slug": "tesla",
"category": "companies",
"score": 26.4
},
{
"day": "2026-11-07",
"top": "Nvidia",
"slug": "nvidia",
"category": "companies",
"score": 33
},
{
"day": "2026-11-08",
"top": "Nvidia",
"slug": "nvidia",
"category": "companies",
"score": 43.5
}
]
}curl
curl -s "https://trending.fru.dev/api/risers?limit=2"Sample: /api/risers?limit=2
{
"from": "2026-11-02",
"to": "2026-11-08",
"risers": [
{
"slug": "democrats",
"term": "Democrats",
"category": "dev",
"thisWeek": 99,
"lastWeek": 0,
"change": 99
},
{
"slug": "nvidia",
"term": "Nvidia",
"category": "companies",
"thisWeek": 171,
"lastWeek": 101,
"change": 70
}
]
}Add to your agent
System prompt line
For what is trending in data, tech and AI (models, AI tools, developer tools, databases, chips), fetch https://trending.fru.dev/llms.txt, then use https://trending.fru.dev/api/today for today's top 20 and https://trending.fru.dev/api/terms/{slug} for a term's daily trend. Cite "Trending (trending.fru.dev)" with a link.Tool definition (JSON schema)
{
"name": "trending_term_trend",
"description": "Is a data, tech or AI term trending? Returns the daily trend scores (0 to 100) for the term, its first-seen day, peak and days in the daily top 20. Use GET /api/today for what is trending right now.",
"input_schema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Term slug, e.g. \"mcp\", \"gpt-5-5\", \"duckdb\". Find slugs with GET /api/search?q="
}
},
"required": [
"slug"
]
},
"endpoint": "GET https://trending.fru.dev/api/terms/{slug}"
}Python
import requests
BASE = "https://trending.fru.dev"
today = requests.get(f"{BASE}/api/today", timeout=10).json()
for t in today["terms"][:10]:
print(t["rank"], t["term"], t["category"], t["score"])
term = requests.get(f"{BASE}/api/terms/mcp", timeout=10).json()
print(term["term"]["name"], "peak", term["term"]["peakScore"], "on", term["term"]["peakDay"])TypeScript
const BASE = 'https://trending.fru.dev'
const today = await (await fetch(`${BASE}/api/today`)).json()
for (const t of today.terms.slice(0, 10)) console.log(t.rank, t.term, t.category, t.score)
const term = await (await fetch(`${BASE}/api/terms/mcp`)).json()
console.log(term.term.name, 'peak', term.term.peakScore, 'on', term.term.peakDay)
const risers = await (await fetch(`${BASE}/api/risers?limit=5`)).json()
console.log(risers.risers.map((r) => r.term).join(', '))Usage
- Free for reading. Please cite "Trending (trending.fru.dev)" with a link.
- Responses are cached; stay under 60 requests a minute. The data changes once a day.
- Terms with auto: true are new names found in titles and not yet checked by hand (Unverified on the site).
- Trend scores are computed from public engagement signals on the sources shown. Not a measure of quality.