# Solana Launch Tape

Clean, daily data files about what happens when new Solana meme coins launch and graduate: every trade, who is behind each launch, other launchpads, and Meteora pool metrics. Recorded 24/7 by our own recorders since early October 2026.

## The datasets

| Dataset | What it is | Rows a day (Oct 10 2026) | Since |
|---|---|---|---|
| `gradtrades` | Every buy and sell on PumpSwap in the first 30 minutes after each pump.fun graduation, with wallet, amounts, price, pool reserves and fees | ~5,034,000 | Oct 3 2026 |
| `pregrad` | Who is behind each pump.fun launch: creator, its funding, curve buyers, graduation-slot buyers, the cap path; plus a +10 min price outcome. Raw facts only | ~194,000 | Oct 4 2026 |
| `padfeed` | Graduations on Meteora DBC (Bags, Jupiter Studio...) and Raydium LaunchLab (bonk.fun): migration facts, pool balances every few seconds, top holders, quote prices in US$ | ~32,500 | Oct 3 2026 |
| `meteora-pools` | Per-minute price, TVL, volume and exact per-minute fees for ~200 Meteora DLMM pools | ~287,000 | Oct 6 2026 |

**History is short and honest:** the oldest files are from October 3 2026, and it grows by one day every day. Coverage gaps (a dropped connection, a coin skipped under our data budget) are written into the files as rows (`down`, `up`, `resume`, `end` with `why`), never filled in or guessed.

## How it is collected

- Only public sources: Solana's public RPC, PumpPortal's free public feed, Meteora's public API, Jupiter's free price API.
- Nothing private: no keys, no logins, no scraped profiles or social handles.
- No wallet labels: we sell what happened on chain (addresses, amounts, times). We do not sell our own opinions on wallets ("insider", "rugger" and the like). Those fields are removed before export.
- Our own trading wallets are removed from every file.
- Every line is parsed and checked before it ships; malformed rows are dropped.

## Files and update cadence

- One gzipped JSON-lines file per dataset per UTC day: `gradtrades-YYYY-MM-DD.jsonl.gz`, `pregrad-...`, `padfeed-...`, `meteora-pools-...`.
- A new day is ready daily, after the UTC day closes.
- Read them with anything: `zcat file.jsonl.gz | jq`, pandas `read_json(..., lines=True)`, DuckDB `read_json_auto`.

## Free sample

Two hours of every dataset, 2026-10-10 14:00-16:00 UTC, cut from the day files by the same export as the files for sale. Download them from the storefront page (`site/sample/`):

| File | Rows | Size (gzipped) |
|---|---|---|
| `gradtrades-2026-10-10-1400-1600utc.jsonl.gz` | 417,544 | 66.4 MB |
| `pregrad-2026-10-10-1400-1600utc.jsonl.gz` | 14,417 | 2.1 MB |
| `padfeed-2026-10-10-1400-1600utc.jsonl.gz` | 3,602 | 0.3 MB |
| `meteora-pools-2026-10-10-1400-1600utc.jsonl.gz` | 23,794 | 1.6 MB |

SHA-256 checksums are on the storefront page under "Sample checksums".

## Schemas

### gradtrades schema

One JSON object per line. Every row has `type` and `t` (ms since 1970 UTC, when our recorder received it). SOL amounts in SOL, token amounts in whole tokens (6 decimals). Source: Solana public RPC (PumpSwap program logs), first 30 minutes after each pump.fun graduation.

| type | field | type | meaning |
|---|---|---|---|
| grad | t | number | graduation time (ms; chain block time for late pick-ups) |
| grad | bt | number | block time (s) |
| grad | slot / sig | number / string | slot and signature of the graduation (migration) transaction |
| grad | mint | string | the coin's token mint |
| grad | pool | string | its PumpSwap pool |
| grad | coinCreator | string | wallet that receives the coin's creator fees |
| grad | poolBase / poolQuote | number | starting tokens / SOL in the pool |
| grad | virtualQuote | number | PumpSwap's extra virtual SOL in the price math (~17.6 SOL, Oct 2026) |
| grad | price | number | SOL per token at graduation |
| grad | capSol | number | price x 1e9 (market cap in SOL, ~496 for a normal graduate) |
| grad | curveSol | number | SOL raised by the bonding curve |
| grad | late | bool | picked up late; trades before `followFrom` are missing |
| grad | followFrom | number | ms; trades are complete from here on |
| grad | follow | bool | false = coin not followed (cap outside 300-600 SOL, or found too late) |
| trade | bt, slot, sig, i | number, number, string, number | block time (s), slot, signature, index of the PumpSwap trade inside the transaction |
| trade | mint | string | coin |
| trade | side | "buy" / "sell" | direction |
| trade | user | string | wallet that traded |
| trade | baseAmount | number | tokens bought or sold |
| trade | quoteAmount | number | SOL paid (buy, fees included) or received (sell, after fees) |
| trade | price | number | quoteAmount / baseAmount (effective price, fees included) |
| trade | poolBase / poolQuote | number | pool tokens / real SOL after the trade |
| trade | priceAfter | number | pool price after the trade: (poolQuote + virtualQuote) / poolBase |
| trade | virtualQuote | number | only when the pool's virtual SOL changes (rare) |
| trade | userTokensBefore | number | the wallet's balance of this coin just before the trade |
| trade | lpFee / protocolFee / creatorFee | number | fees in SOL |
| trade | creator | bool | true when the trader is the coin's creator |
| trade | ix | string | instruction variant, e.g. `buy_exact_quote_in`; absent for a normal buy |
| trade | recovered | bool | the log was truncated; trade read from the full transaction |
| end | mint, why, buys, sells | string, string, number, number | coin no longer followed: `window` (30 min done), `evicted` (cap of 30 coins), `budget` (data budget); counts recorded |
| down / up | t | number | a feed connection dropped / came back: trades in between may be missing |
| resume | mint | string | coin picked up again after a restart; the gap before `t` is missing |

Failed transactions are not included. Coverage gaps are marked, never filled in.

### pregrad schema

Who is behind each pump.fun launch, as raw facts (addresses, amounts, times). No wallet labels, no risk flags, no images. Sources: PumpPortal free websocket (creations, migrations), Solana public RPC (bonding curves, transactions). Amounts in SOL; `pct` = % of the 1,000,000,000 supply; times in ms unless the name ends in `S` (seconds).

| type | field | type | meaning |
|---|---|---|---|
| create | t, mint, sig | number, string, string | coin creation |
| create | creator | string | creator wallet |
| create | name, sym | string | coin name / ticker |
| create | devTokens, devSol | number | creator's own buy at creation |
| create | capSol | number | curve market cap right after creation |
| create | curve | string | bonding-curve account |
| create | mayhem | bool | pump.fun "mayhem mode" launch |
| curvex | slot, curve, mint | number, string, string/null | bonding-curve cap crossing (mint null when not yet mapped) |
| curvex | cap, cross, sol, sinceFirstS | number | cap now (SOL), line crossed (100/200/300/400 SOL), SOL in curve, seconds since first seen |
| ctrade | bt, slot, sig, i, mint, side, user | | bonding-curve trade on a coin near graduation (read from cap 200 SOL up) |
| ctrade | sol, tokens, capAfter, curveSol | number | SOL and tokens of the trade, cap and curve SOL after it |
| migrate | mint, sig, pool | string | migration seen by PumpPortal (`pool` = destination AMM) |
| grad | mint, slot, capSol, creator | | graduation as seen on chain |
| record | mint, sym, name, pool, slot0, sig0, t0, bt0 | | one per graduate, written 10-40 s after graduation (t0 = graduation) |
| record | src | object | which feed saw it first; `curveCompleteS` = curve completed how long before t0 |
| record | creator, create | string, object | creator wallet; creation tx (`t`, `sig`, `mayhem`, `capSol`) |
| record | ageS | number | creation to graduation, seconds |
| record | instant | bool | graduated within 5 s of creation |
| record | cap0, curveSol | number | PumpSwap cap at graduation; SOL raised |
| record | devBuyTokens, devBuyPct, devBuySol | number | creator's buy at creation |
| record | creatorPctAtGrad | number/null | creator's holding at graduation |
| record | creatorInfo | object | `txs50` (tx count, capped 50), `capped`, `oldestS`, `nBefore10m`, `funder`, `fundSol`, `fundedBeforeS`, `fundMemo`, `priorCoins24h`, `priorCoins72h` |
| record | gradSlot | object/null | PumpSwap buys in the graduation slot: `pct`, `sol`, `nWallets`, `nTx`, `buys[]` (`w`, `tokens`, `pct`, `sol`, `sig`, `bundleSize`, `payer`, `signers`, `slotOffset`, `creatorInTx`), `whale` = the largest of those buys with its wallet facts (`txs25`, `oldestS`, `lastTxKind`, `funder`, `fundSol`, `fundedBeforeS`, `fundSig`, `fundMemo`, `gainers[]`) |
| record | curve | object | `coverage` (full/partial/none), `holders[]` (top 10: `w`, `pct`, `sol`, `creator`), `creationSlot`, `bundleEst`, `estimated`, `top1NcPct`, `top5NcPct`, `nOver3Pct`, `bundleWallets`, `bundlePct`, `creatorPct`, `path` (`t100S`..`t400S`, `maxCap`, `updates`, `completeS`), `trades` |
| outcome | mint, sym, t0, recT | | +10 min after graduation |
| outcome | capAt | object | PumpSwap cap (SOL) at +10/45/60/120/180/300/600 s |
| outcome | maxGain, minDrop | number | best / worst move in %, first 10 min |
| outcome | crashed | bool | fell by 80%+ |
| outcome | trades | number | PumpSwap trades counted |
| outcome | dump, firstBigSell, bigSells[] | object | the first sale breaking a fixed size rule and the large sales: `tS`, `w`, `frac` (share of pool sold), `sol`, `capAfter`, `rule`, `tokensFrom` |
| outcome | src | string | where trades were read from |

Removed before sale: our internal "rogue" wallet list and every field derived from it, `flags`, `priorRugged`, the dumper `role`, picture fingerprints and metadata URIs, heartbeat/stats rows.

### padfeed schema

Graduations on two non-pump.fun Solana launchpads: `dbc` = Meteora Dynamic Bonding Curve (Bags, Jupiter Studio, ...) -> DAMM v2 pool, `ray` = Raydium LaunchLab (bonk.fun etc.) -> Raydium CPMM pool. Each coin followed 20 min (dbc) / 30 min (ray). Source: Solana RPC; US$ quote prices from Jupiter's free price API.

| type | field | type | meaning |
|---|---|---|---|
| all | t | number | ms when recorded |
| grad | pad | "dbc"/"ray" | launchpad |
| grad | platform | string | platform config / name |
| grad | mint, quote | string | coin mint; quote mint (SOL, or a token such as USD1/a tokenized stock) |
| grad | pool, curveAuth, baseVault, quoteVault | string/null | pool and vault accounts |
| grad | b, q | number | vault balances (tokens, quote units) at migration |
| grad | px | number | price in quote = q / b |
| grad | supply, decimals, tokenProgram | number, number, string | mint facts (Token or Token-2022) |
| grad | feeBps, freeze, mintAuth | | Token-2022 transfer fee, freeze / mint authorities (null = none) |
| grad | sig, bt / other | | migration signature, block time and when heard |
| px | pad, mint, b, q | | vault balances when they changed (every ~6 s, ~2 s for fast-moving coins); price = q / b |
| holders | pad, mint, top10, top20[] | | +60 s and +5 min: 20 largest token accounts (`acct`, `owner`, `amt`); `top10` = share held by top 10 excluding pool vaults and curve |
| qpx | usd | object | every 30 s: US$ price of SOL and of every non-SOL quote mint seen in the last 2 h, keyed by mint |

### meteora-pools schema

One row per pool per minute, Meteora DLMM pools with TVL >= US$50k, top 200 by 24h fee/TVL. Source: Meteora's public DLMM API (dlmm.datapi.meteora.ag). No RPC, no wallets.

| field | type | meaning |
|---|---|---|
| type | "pool" | row type |
| t | number | ms when fetched |
| pool | string | DLMM pool address |
| price | number | pool's current price (quote per base token, as Meteora reports it) |
| tvlUsd | number | total value locked, US$ |
| vol24hUsd | number | rolling 24 h volume, US$ |
| fees24hUsd | number | rolling 24 h fees, US$ |
| vol24hDeltaUsd | number/null | change in the rolling 24 h volume since the pool's previous row |
| feesMinUsd | number/null | exact fees earned since the previous row (diff of Meteora's all-time cumulative fees); null on a pool's first row or a reset |

Token mints and names are not in the row; look them up from the pool address (Meteora API or chain).

## Licence

Personal and research use. You may not resell or republish the files, or share them outside your own team. Derived results (charts, papers, models, strategies) are yours.

No warranty. This is market data, not advice.

## Pricing

Pay in SOL or USDC on Solana (Solana network only; other chains on request).

| Plan | What you get | SOL | USDC |
|---|---|---|---|
| Day file | one dataset, one UTC day | 0.05 | 6 |
| Month of history | one dataset, 30 days | 0.5 | 60 |
| Daily feed | every dataset, each new day as it closes, per month | 1 | 120 |

Pay address: `4uooiS8jeqKuiEf81NwrE2LPEmyT54eDaefEjsuP4BEK`

Add a memo to the transfer with your email address or Telegram handle, and say which dataset and days you want. You get a private download link within 24 hours. Delivery is manual for now; automatic delivery comes later. For questions or a missing payment, include the transaction signature.
