Market data
Hourly market observations for digital assets, stored as immutable rows on a single canonical asset identity. Price, capitalisation, volume, volatility and dominance in one schema, comparable across every asset in the snapshot.
What this data is
A market observation is a snapshot of an asset's traded state at a specific hour. It is not a tick feed and it does not claim to be one: the layer records one row per asset per hour, and every consumer downstream reads that same row. That constraint is deliberate — it makes cross-asset comparison, historical joins and reproducible research possible, which a best-effort stream of unevenly spaced updates does not.
Where it comes from
Market figures are sourced from a commercial market and social data aggregator, which itself consolidates venue-level trading activity. Moonlytics does not connect to individual exchanges and does not present venue-level order book data. What reaches the layer is already aggregated; what Moonlytics adds is identity resolution, a stable schema, snapshot alignment and history.
A second, slower metadata source supplies reference figures — supply, all-time high and low, fully diluted valuation — on a daily rhythm. Those two rhythms are kept in separate series rather than blended, so a daily value is never presented as if it were an hourly one.
How it is processed
Update frequency
The ingest job runs on a several-minute schedule; a persisted observation is written per asset per hour. In practice that means the newest market row is between zero and sixty minutes old, and the store grows by 24,000 rows a day.
We do not describe this as real-time, and there is no millisecond or sub-second guarantee anywhere in the system. The freshness page lists the measured cadence for every category.
Available fields
The canonical market observation:
The daily reference metadata series carries a wider set of descriptive figures:
How it can be accessed
Market data currently reaches applications through the internal Moonlytics service layer. A public, self-serve Data API is in development — see the API page for what exists today and what does not.
{
"asset": { "id": 1, "symbol": "BTC", "name": "Bitcoin" },
"observedAt": "2026-08-31T09: 00: 00Z",
"price": 78135,
"marketCap": 1568738541274,
"volume24h": 13029310589,
"volatility": 0.0142,
"marketDominance": 54.9,
"altRank": 3
}Limitations
- Snapshot granularity. One row per asset per hour. Intra-hour movement is not retained, so this data cannot reconstruct wicks, fills or intraday highs beyond the provider's own 24 hour aggregates.
- Aggregated volume. Volume and volatility come from an upstream aggregation across venues. Per-exchange breakdown, order book depth and slippage are not available.
- Rolling coverage. Each snapshot covers the top 1,000 assets by the provider's combined rank. An asset that leaves that set stops accruing observations until it returns, which leaves gaps in long series for assets near the boundary.
- Nullable rank.
altRankcan be absent for an asset in a given snapshot. Treat it as missing, not as zero. - Not a price oracle. These figures are analytical inputs. They are not suitable as a settlement or liquidation price source.
Which applications use it
Market observations back the scoreboards, ranking tables and historical charts on moonboard.ai, and the market context behind the portfolio surfaces on moonlytics.ai. The scoring formulas that consume them are documented on moonboard.io.
Related
- Historical market series — how far back the data goes and what it is useful for.
- Asset metadata — the identity every market row hangs off.
- Normalization — how provider payloads become this schema.
- Normalizing market data across providers — the engineering write-up.