READ API LIVEBuild on /v1 for search, profiles, timelines, audience graph, and tweet context.READ DOCS

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.

Jump to the starter
Bitcoin radarillustrative

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
discover
Request
GET /v1/search/recent/enriched?query=bitcoin min_faves:100 lang:en -filter:replies&limit=20
Authorization: Bearer <api_key>
Response shape
{
  "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/:id/context
drill down
Request
GET /v1/tweets/1234567890/context
Authorization: Bearer <api_key>
Response shape
{
  "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

See 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

Docs →

Daily Brief

Combine enriched search with profile lookups and your own LLM to generate a daily summary.

GET /v1/profiles/by-username/:username

Docs →

Copy-paste starter

A dependency-free TypeScript starter: query enriched search, tally the loudest authors, and print what the call cost.

radar.ts
/**
 * 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.

Start in 60 seconds
with Google.

Sign in, mint an API key, and call the workflow your product needs. 1,000 credits free to start. Failed calls, rate limits, and service-side errors are never charged.