Use case · Bitcoin social intelligence
Bitcoin social intelligence, built on X/Twitter data
Track the narratives and KOLs moving Bitcoin X with a read-only API that returns LLM-ready JSON. Spot a rising story, then pull the exact tweet, author, and amplifiers behind it.
Rising narratives · 24h
- ETF net inflows+210%142
- Lightning capacity+96%88
- OP_CAT / covenants+54%61
- Mempool fee spike-12%40
Top amplifiers
- On-chain research desk1.2M7 quotes
- Core-dev thread430K5 quotes
built from GET /v1/search/recent/enriched
Narrative Radar
Bitcoin signal surfaces first on X — a developer thread, an ETF analyst, a sudden spike in mempool chatter — and watching it by hand means open tabs and missed context. The radar is a crypto social listening pipeline you own: each poll returns matched tweets and a de-duplicated author set in one response, ready for an LLM summarizer or RAG pipeline, with no client-side join to write. Operators like min_faves:, lang:, and -filter:replies cut the firehose down to tweets worth reading.
GET /v1/search/recent/enriched?query=bitcoin min_faves:100 lang:en -filter:replies&limit=20 Authorization: Bearer <api_key>
{
"data": {
"tweets": [ { "id", "text", "author_id", "quote_count" } … ],
"authors": [ { "id", "username", "verified", "follower_count" } … ]
},
"meta": { "credits": { "charged": 41 }, "pagination": { "next_token": "…" } }
}Tweet Dossier
Take a hot BTC tweet id, say the top quote_count result from your radar poll or a bitcoin min_retweets:500 search. One call returns the tweet, its author, its quotes, and its retweeters: why it is spreading, who is amplifying it, what the counterpoints are. Go deeper with thread and conversation.
GET /v1/tweets/1234567890/context Authorization: Bearer <api_key>
{
"data": {
"tweet": { … },
"author": { … },
"quotes": [ … ],
"retweeters": [ … ]
},
"meta": { "credits": { "charged": 3 } }
}The full radar
KOL Watchlist
A watched account posts and the tweet lands in your Discord channel or signed webhook in real time. No polling loop to run. Monthly plans include monitor slots; the extra-account rate is $3 / account / month.
dashboard · account monitors
Community Scanner
Search Bitcoin communities and read their timelines; pull tweets from curated lists you already follow by list id.
GET /v1/communities/search
Daily Brief
Combine enriched search with profile lookups and your own LLM to generate a daily summary.
GET /v1/profiles/by-username/:username
Copy-paste starter
A dependency-free TypeScript starter: query enriched search, tally the loudest authors, and print what the call cost.
/**
* Minimal Bitcoin "Narrative Radar" with xfetch — no dependencies.
* Run: XFETCH_API_KEY=xf_... npx tsx radar.ts
*/
const API = "https://api.xfetch.io";
const KEY = process.env.XFETCH_API_KEY;
// X-style operators keep the stream high-signal; drop them to sample the firehose.
const QUERY = "bitcoin min_faves:100 lang:en -filter:replies";
async function main() {
if (!KEY) throw new Error("Set XFETCH_API_KEY");
const url = new URL("/v1/search/recent/enriched", API);
url.searchParams.set("query", QUERY);
url.searchParams.set("limit", "20");
const res = await fetch(url, { headers: { Authorization: `Bearer ${KEY}` } });
if (!res.ok) throw new Error(`xfetch ${res.status}`);
const body = await res.json();
const data = body.data ?? { tweets: [], authors: [] };
const authors = new Map();
for (const a of data.authors) authors.set(a.id, a);
const counts = new Map();
for (const t of data.tweets) counts.set(t.author_id, (counts.get(t.author_id) ?? 0) + 1);
const ranked = [...counts.entries()]
.sort((a, b) => b[1] - a[1])
.slice(0, 5)
.map(([id, n]) => `${n}x @${authors.get(id)?.username ?? id}`);
console.log("Top rising authors:\n" + ranked.join("\n"));
console.log("\nCredits charged:", body.meta?.credits?.charged);
}
main().catch((e) => { console.error(e); process.exit(1); });
FAQ
- Is this a trading or alpha product?
- No. xfetch is a read-only data API. This use case structures public X/Twitter data into evidence; it does not give buy/sell signals or investment advice.
- Which endpoints does the radar use?
- Primarily GET /v1/search/recent/enriched for discovery and GET /v1/tweets/:id/context for drill-down, plus communities, lists, and profile lookups for breadth.
- Which search operators are supported?
- Recent search supports X-style operators: "quoted phrases", OR, () grouping, #hashtag, $cashtag, from:, lang:, since:/until: (YYYY-MM-DD), min_faves:, min_retweets:, filter:links, and - negation such as -filter:replies. Combine min_faves:, lang:, and -filter:replies to keep only high-engagement posts in the language you read.
- How are KOL updates monitored?
- Account monitors are configured in the dashboard and deliver updates to generic webhooks or Discord incoming webhooks. Free/PAYG get one 10-day trial slot, monthly plans include slots, the extra-account rate is $3 / account / month, and deliveries are not credit-metered.
- How much does it cost to run?
- Cost scales with how many topics you track and how often you poll. A radar tracking 8 topics every 30 minutes at 20 tweets per poll (41 credits per poll) runs about 472,320 credits a month — it fits the $49 Growth plan. Failed or rate-limited calls are never charged; see /pricing for the full table.