For P&H Capital
Everything LunarCrush has, hour by hour, for the 260 of the Binance spot top 300 we cover: posts, contributors,
interactions, sentiment, spam, our composite scores and market context.
4,584,840 rows, 17,520 bars per asset,
2024-08-11 00:00 to 2026-08-10 23:00 UTC. Runs to the current hour, with bar_maturity on every row so you pick your own
freshness line: 4,973,938 settled, 20,638 still maturing.
Every file carries a SHA-256 in MANIFEST.json. The dataset joins to the universe
file on asset.
LunarCrush hourly metrics keep changing for about 72 hours after a bucket closes: posts inside a fresh bucket keep accruing interactions, and late discovery adds posts retroactively. After that the bucket is memorialized. We verified it rather than asserting it, by re-polling the same hourly series and diffing bar for bar: every bar older than 72h came back byte-identical, and every revision sat inside the window.
The delivery is cut at 2026-08-10 23:00 UTC, which was already
93 hours old when the file was written. Re-pull this window in six
months and you get the same numbers.
knowledge_time. That column is
time + 72h, the moment the bar's value was final. It is a deterministic offset from the settlement rule
rather than a per-bar observation of when the value settled. Filter knowledge_time <= your_decision_time and the
lookahead question is closed at the query layer instead of in a methodology paragraph. Two caveats: this is a point-in-time snapshot, not an as-of service, because
the API has no as_of parameter and always returns current best knowledge. And do not
reconcile these bars against the 24h rollup endpoints, which are computed on a different path and
sit 1 to 3 percent off the sum of hourly bars by construction.
(asset, time) is the composite key. time is a UTC hour bucket, left
labelled, stored naive so it joins to your Binance bars with no timezone coercion. Nulls are
genuine "no observation", never silent zeros.
The signal columns
posts_createdsumposts_activenever sumcontributors_createdsumcontributors_activenever suminteractionssumsentimentweighted avgspamexcluded aboveCross-sectional, plus the PIT column
galaxy_score0 to 100alt_rank1 = bestsocial_dominance% of crypto socialmarket_dominance% of mcapknowledge_timetime + 72hConvenience only, use your own marks
open high low closecross-venuevolume_24hcross-venuemarket_capUSDcirculating_supplyunitsposts_active and
contributors_active are distinct-entity counts inside the bucket, so they
cannot be summed across hours. We measured it rather than warning about it in the abstract:
across 35,003 asset-days in the top 50, summing 24 hourly bars against the true daily bar gives
1.0x for interactions, posts_created and
contributors_created, which is exact, but 5.8x for
posts_active and 7.7x for
contributors_active. That is why the daily file exists. The market columns
are cross-venue aggregates rather than Binance prints, so they will not tie out to your
execution data.
Social data is not less precise than market data, it is revised. Every value here is a real count of real public activity we observed. What changes is whether it is final. The closest thing you already model is macro data: nobody calls non-farm payrolls imprecise, they call it revised, keep vintages, and backtest against what was knowable on the day.
We re-polled the same hourly series and diffed it bar by bar. Every bar older than roughly 72 hours came back byte-identical. So rather than truncating the delivery at that line and throwing away the freshest data, we ship to the current hour and label every row.
| bar_maturity | Age | Rows | What to expect |
|---|---|---|---|
| settled | 72h and older | 4,973,938 | byte-stable on re-poll, safe to backtest |
| maturing | 24 to 72h | 13,783 | still accruing, revisions shrinking |
| provisional | under 24h | 6,855 | freshest and most revisable |
WHERE bar_maturity = 'settled' is the conservative read.
WHERE knowledge_time <= your_decision_time is the same idea as a timestamp. If
your book tolerates a small revision you can trade this far fresher than 72 hours, and that is
your call rather than ours. Judge a revision against the topic's own volatility: a 5 to 10
percent revision sits inside a series whose genuine hour-over-hour moves routinely run 50 to
1,000 percent. Full discussion in SOCIAL-DATA-REVISIONS.md.
interactions,
posts_created and contributors_created, but 5.8x for
posts_active and 7.7x for contributors_active, which
are distinct-entity counts inside the bucket. Daily runs back to
2020-01-01, well before the hourly window opens.
The universe is the live Binance spot book from
data-api.binance.vision, collapsed to base assets across USD-quoted pairs and
ranked by 24h volume. The exchange snapshot ships in the bundle so you can re-run the cut
yourself without an API key.
Of the 300: 260 are covered and delivered,
19 are not crypto at all (Binance tokenized equities
like AAPLB and NVDAB, plus EUR), and 21 are crypto we do not carry.
A further 3 carry an entity_flag where Binance
volume runs well above the market cap we report for that coin, which usually means the ticker
resolves to a different project. All 300 rows are in
coverage_300.csv with the answer and the join key.
Pull live on lunarcrush_id, not on the ticker. Tickers collide,
including with equities, and the id is what reproduces this file.
| # | Asset | Name | Binance | 24h volume | LunarCrush id | Pull by | Bars | Coverage | Note |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
Optional, and it stays cold until you ask for it. Opening the console loads DuckDB-WASM and reads the Parquet straight off our CDN with HTTP range requests. No server, no auth, no telemetry, and nothing leaves your machine.
To keep it quick, the console loads a 17 MB slice: all 300 assets, the social
and composite columns, and the most recent six months. It is the same schema and the same
numbers as the download, just a smaller window, and it is registered as social.
The full 24-month file is registered too, as social_full, if you want to hit it
from here rather than downloading it. The first query against social_full streams row
groups over HTTP and takes one to three minutes depending on your line; if you want the whole
thing, the download link is faster.
Short version, because this is universe selection and not the product. We do not carry Binance market data; the contract list is only how we decided which assets to send you.
Deterministic, and shipped as a script
Things that would otherwise surprise you
1000PEPE maps to asset PEPEsocial is per assetbinance_ranking_snapshot_2026-08-14.json and build_universe.py turns it back into this list deterministically. Rebuilding the cut as of an arbitrary past date is not possible from this bundle, because we do not hold historical Binance liquidity ranks. Send your own universe list and we will deliver against it. fapi.binance.com refuses US-origin requests with an HTTP 451, which is why the snapshot comes from the CoinGecko derivatives feed.
LunarCrush covers stocks as well as coins, so a bare ticker lookup can return the wrong asset class entirely. Every asset here was resolved against the LunarCrush coin universe using market capitalisation as the discriminator: a candidate whose market cap is orders of magnitude away from the project behind the Binance contract is the wrong entity no matter how well its name matches.
258 resolved to a coin entity and were pulled by numeric id.
30 resolved by cashtag only and carry
entity_confidence = ticker_only, meaning the topic has data but no coin record to
verify against. 12 were dropped rather than shipped.
| # | Ticker | Binance lists | Why it was dropped |
|---|---|---|---|
| 19 | BTW | Bitway | ticker resolves to 'Banana Tape Wall', market cap 62x off the token |
| 83 | RE | RE | ticker resolves to 'Everest Re Group Ltd', market cap 213x off the token |
| 172 | LA | Lagrange | ticker resolves to 'LAToken', market cap 66x off the token |
| 179 | KITE | Kite | cashtag engagement is orders of magnitude out of scale with the asset, so the ticker is catching unrelated text rather than this project |
| 191 | AIN | Infinity Ground | ticker resolves to 'AI Network', market cap 6x off the token |
| 198 | OPEN | OpenLedger | ticker resolves to 'Opendoor Technologies Inc.', market cap 90x off the token |
| 199 | 4 | 4 | cashtag engagement is orders of magnitude out of scale with the asset, so the ticker is catching unrelated text rather than this project |
| 206 | MET | Meteora | ticker resolves to 'MetLife, Inc.', market cap 689x off the token |
| 210 | MIRA | Mira | ticker resolves to 'MIRA Pharmaceuticals, Inc.', market cap 3x off the token |
| 211 | TRUST | Intuition | ticker resolves to 'Trust The Process', market cap 87x off the token |
| 259 | ARX | Arcium | ticker resolves to 'Accelerant Holdings', market cap 127x off the token |
| 296 | SPACE | Spacecoin | ticker resolves to 'Space Token', market cap 161x off the token |
lunarcrush_id, never on the bare ticker. Every one of the 300 rows in
universe_300.csv carries lunarcrush_id,
entity_confidence, resolved_by and resolution_evidence,
including the dropped ones. Using the id column reproduces this file exactly.
We handed this bundle to independent reviewers and told them to try to reject it. Everything here is what came back, reproduced from the delivered files. Section 6 of the README has the long form.
Structural, we cannot fix it retroactively
Screen on density, not coverage_pct
populated_pct_interactionsper assetpopulated_pct_posts_createdper assetpopulated_pct_closesparse early onMethodology change, not a market move
Descriptive state, not signals
galaxy_score, alt_rankcarry live priceFlagged, not silently repaired
high < low or close out of rangeflaggedohlc_validUnder investigation
daily_barsclose column early in the window, and the galaxy_score break. The rest are a filter away.