LunarCrush
For P&H Capital
Confidential
Trial delivery · 14 Aug 2026

Top 300 Binance perps. Hourly. Point-in-time. Exactly what you asked for on the call, plus the receipts.

Aggregated social metrics for the underlyings behind the 300 most liquid Binance perpetual contracts, in 17,520 hourly buckets per asset covering 2024-08-11 00:002026-08-10 23:00 UTC. Parquet, no raw posts, drop straight into your data lake. Every bar in this file was already past the settlement line when it was written, so nothing in here can be revised out from under a backtest. The extended file carries all 531 Binance perp underlyings we cover, so you can define the universe yourself without a redelivery. Query it below. DuckDB runs in your browser, straight against the Parquet, and nothing leaves your machine.

Hourly rows · top 300
0M
9.16M across the full perp universe
Bars per asset
0
730 days × 24, no holidays, no gaps
Universe coverage
300/300
293 with the complete 24-month history
Settlement margin
0
hours past the 72h line at the delivery cut
01 · Stability

Why every bar in this file is final

This was your first question on the call, so it gets the first section. LunarCrush hourly metrics move for roughly 72 hours after a bucket closes: posts published inside the bucket keep accruing interactions, and late discovery adds posts retroactively. After that window the bucket is memorialized and does not change again.

We verified it rather than asserting it. 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. So the delivery is cut at 2026-08-10 23:00 UTC, which was already 90 hours old when the file was built. Re-pull this window in six months and you get these same numbers.

Memorialized · what you receivedOlder than 72h. Byte-stable, reproducible, safe to backtest against.
Hot window · excludedThe last ~72h. Interaction counts still climbing, late posts still landing.
Current bucket · excludedIncomplete by definition. Never let a partial bar into a fit.
Two things worth saying plainly. First, this is a point-in-time snapshot, not an as-of service: the API has no as_of parameter, it always returns current best-knowledge. For live trading the right pattern is to poll hourly and store your own vintages, or to take scheduled vendor-delivered PIT snapshots, and we can set the latter up. Second, do not reconcile these bars against the 24h rollup endpoints (/coins/list/v2); those are computed on a different path and sit 1–3% off the sum of hourly bars structurally. The hourly series is the authoritative one.
02 · Universe

589 perpetual contracts, 531 underlyings, 300 delivered

Every PERPETUAL contract on Binance futures, with the contract-size prefix normalized off (1000PEPEPEPE) and quote variants collapsed onto the underlying, because social data is per-asset not per-contract. 24h USD volume summed across the variants, ranked, top 300 taken.

One caveat that will change your universe: a single 24h volume snapshot is a noisy liquidity measure, because freshly listed contracts spike straight to the top of it. Ranking the same universe by open interest instead swaps roughly 50 names in and out of the top 300. Both ranks ship in the manifest and the extended file carries all 531 underlyings, so you can re-cut on a 30-day ADV, an OI floor or a spread cap without waiting on us.

#AssetBinance contracts24h volumeOpen interestBarsCoverageHistory from
Loading universe…

Binance liquidity snapshot 2026-08-14 via the CoinGecko binance_futures derivatives feed, because fapi.binance.com refuses US-origin requests (HTTP 451). Full table in lunarcrush_pnh_universe.csv.

03 · Entity resolution

A ticker is not a key

LIT is Lighter on Binance and Litentry almost everywhere else. OPEN is OpenLedger on Binance and Opendoor Technologies as an equity ticker. Asking a social data vendor for "LIT" and getting something back is easy; getting the right thing back is not. So every asset here was resolved deliberately, and the result is recorded on every row of the manifest.

Each Binance base asset was resolved against the LunarCrush API, the returned entity receipt compared to the project CoinGecko lists behind that exact contract. Where they disagreed and a correct entity existed, the whole 24-month series was re-pulled by LunarCrush numeric id instead of the ticker. Where no correct entity existed we kept the series and flagged it rather than quietly shipping it.

Confirmed
0
entity matches the project on the contract
Corrected
0
wrong project on the bare ticker · re-pulled by id (23 across the full universe)
Flagged for review
0
ambiguous, named not hidden
Manifest columns
6
entity_check · review_reason · binance_project · lc name / topic / id
#AssetProject on the Binance contractLunarCrush entityTopicLC id
Loading…
The flags are names to check, not names known to be wrong. The test is deliberately conservative: a rebrand (FET → Artificial Superintelligence Alliance) trips it exactly like a genuine collision does. Where the resolved entity is a visibly different project, say MET landing on MetLife, ARX on Accelerant Holdings or OPEN on Opendoor, treat the series as suspect until it is mapped by hand. Ask and we will resolve any of them manually and redeliver those columns.
04 · Signal preview

Attention shocks, straight out of the panel

Computed live in your browser from the delivered Parquet: hours where an asset's interactions ran more than 20× its trailing week mean, one row per asset, largest first. This is the cheapest useful thing to do with the file and a reasonable first sanity check that the hourly resolution is carrying real information rather than noise.

AssetHour (UTC)InteractionsTrailing 7d meanShockPostsSentiment
Querying the Parquet…
05 · Schema

What is in each row

Composite key is (asset, time). time is a UTC hour bucket, left labelled: a row stamped 14:00 covers 14:00:00–14:59:59. Nulls are genuine "no observation", never silent zeros.

Social

The signal columns

  • posts_createdsum
  • posts_activenever sum
  • contributors_creatednever sum
  • contributors_activenever sum
  • interactionssum
  • sentimentweighted avg
  • spamexcluded above

LunarCrush composites

Blended, cross-sectional

  • galaxy_score0–100
  • alt_rank1 = best
  • social_dominance% of crypto social
  • market_dominance% of mcap

Market context

Convenience only, use your own marks

  • open high low closecross-venue
  • volume_24hcross-venue
  • market_capUSD
  • circulating_supplyunits
The one modelling trap in this schema. posts_active and the two contributors_* series are distinct-entity counts inside the bucket. Summing them across hours double-counts anything alive for more than an hour, which quietly inflates every daily and weekly aggregate built on them. Sum interactions and posts_created; take min / max / mean on the _active series. The market columns are cross-venue aggregates, not Binance perp prints, so they will not tie out to your execution data, so use your own marks for anything touching PnL.
06 · SQL playground

Query it yourself, right here

DuckDB-WASM in your browser, reading the Parquet from our CDN over HTTP range requests. No server, no auth, no telemetry: the queries run on your machine. Tables: hourly (the top 300 panel), universe_hourly (all 531 underlyings), universe (the manifest / join table), gaps (the coverage diff).

First query pulls the Parquet footer and the row groups it needs over HTTP, so it takes a moment. Later ones are fast.
07 · Files

Download

Native columnar Parquet, zstd compressed, one row per asset-hour, sorted by liquidity rank then time. Schemas, methodology and the honest coverage notes are in the README.