MarketMoodIQ takes a firehose of social-market data, normalises it into time-series snapshots, and turns those into dashboards that say something more interesting than "the price went up." This page walks through the whole pipeline — what we pull, what we calculate, how the pages are structured, and how alerts and watchlists fit on top.
The data flow
Every five minutes our ingestion worker wakes up, looks at which assets, narratives, topics, stablecoins and creators are due for refresh based on their priority tier, and queues calls to LunarCrush. Tier-1 majors (BTC, ETH, SOL, etc.) refresh every five minutes; tier-2 mid-caps every fifteen; tier-3 long-tail coins every four hours. Narratives refresh every two hours, creators every eight.
For each call we:
- Pull the raw payload and store it in
raw_lunarcrush_payloadsfor forensics. - Run a normaliser that maps the upstream fields to our schema. Different LunarCrush endpoints use different field names for the same concept (e.g. social_volume vs social_volume_24h vs social_dominance); the normaliser unifies them.
- Compute derived metrics (mood score, social velocity, sentiment velocity, mood band) and write a row
to
asset_snapshots(or the equivalent for narratives, stablecoins, topics, creators). - Log the API call to
api_usage_logsfor budget tracking — we run within LunarCrush’s 1,850-call-per-day envelope.
A separate cron at 00:05 UTC runs the daily report generator, and another at 00:10 UTC Monday runs the weekly report. The alert evaluator runs every five minutes and queues emails for any conditions that have crossed their threshold (subject to per-alert cooldown).
The scores
Five scores do most of the work on the site:
- Mood Score (asset-level, 0–100) — sentiment + velocity + engagement + creator growth + abnormality risk in one number.
- Heat Score (narrative-level, 0–100) — volume + engagement + asset participation + average sentiment for a theme.
- Momentum Score (narrative-level, 0–100) — how fast the heat is changing.
- Confidence Score (stablecoin-level, 0–100) — peg behaviour + negative sentiment + risk-keyword incidence.
- Social Velocity (asset-level, ratio) — current social volume divided by the 7-day average. The headline "something unusual is happening" indicator.
Each score is recomputed on every snapshot, never carried over. Full formulas are on the methodology page and per-metric definitions live in the glossary.
The page types
- Index pages (
/assets,/narratives,/stablecoins,/topics,/creators) rank everything we track by the relevant score, with quick filters. - Detail pages (
/assets/[slug]etc.) show the latest snapshot, charts, related entities, highs/lows over the chosen window, and a hand-authored "About this …" explainer. - Dashboards —
/market-moodfor the aggregate read,/social-spikesfor assets with elevated velocity,/comparefor side-by-side overlays. - Reports —
/reports/dailyand/reports/weeklyhold dated, archived summaries of attention rotation.
Accounts, watchlists, and alerts
Creating an account is free and gives you three extras:
- Watchlists — star any asset to add it; your watchlist lives at
/dashboard/watchlistand is private to you. - Alerts — open any asset, narrative, or stablecoin detail page, hit 🔔, and create a condition (e.g. "BTC social velocity > 2.0"). The evaluator runs every five minutes; when your condition triggers you get an email and a red dot appears in the header.
- Daily digest — opt in from
/dashboard/preferencesfor a 06:30 UTC summary email of your watchlist’s overnight moves and the day’s top market movers.
Sign-in uses magic links — no password to remember and no third-party identity provider lurking in the background.
What MarketMoodIQ isn’t
We don’t give financial advice, we don’t hold balance sheets, we don’t audit reserves, and we don’t make price predictions. Social signal is one input into a research process — useful for spotting attention before it shows up in price, dangerous if used in isolation. Always cross-check against your own due diligence and consult a qualified professional before making investment decisions.