All posts

August 2, 2026

Pump.fun Data API Comparison: Which One for Historical Backtesting?

Pump.fun produces over 500 million events a month across its bonding curve and the PumpSwap AMM. If you want all of them — to train a model or backtest a strategy — the provider you pick decides whether that costs tens of dollars or an enterprise contract, because almost everyone in this market bills per request and a month of history is hundreds of millions of them. Downloading it as hourly files instead costs about $24. This post compares the options on bulk cost, coverage, and what you actually get in the file. Pricing reflects public pages as of August 2026.

How much data Pump.fun actually produces

That number isn't an estimate. We pulled hour 12 UTC from five separate days between July 5 and August 1, 2026 and counted what was in them:

Hour 12 UTCBonding curveAMMTotal
Jul 585,332961,1761,046,508
Jul 1260,252416,196476,448
Jul 1998,447549,380647,827
Jul 26119,213649,122768,335
Aug 1106,926859,154966,080

An average hour carries 781,000 events, which annualizes to roughly 560 million a month. The AMM dominates because graduated tokens keep trading for weeks while most launches die on the curve within hours. Those ten files cost 10 credits — about 17 cents.

The curve side averages 94,000 events an hour, or 68 million a month. That lines up with our April 2026 analysis, which counted 73 million bonding-curve events across that entire month — two independent samples, four months apart, within 7% of each other.

Request-metered plans are sized in the hundreds of thousands to a few million calls a month. A month of complete Pump.fun history doesn't fit, however aggressively you batch. Both exits are bad: an enterprise contract, or shrinking the dataset until it fits — which changes what you're measuring, since the tokens you drop are never random.

Provider comparison: cost per month of history

ProviderBilling unitBulk historyOne month of data
BitqueryPoints and volumeArchive sold separately; S3 export on Enterprise$139+/mo, plus points for volume
Solana TrackerRequests per monthVia REST, no file export€50–€1,499/mo by request count
Self-hosted indexerMetered stream + storageYou backfill and enrich it yourself~$500/mo streaming + engineering
PumpFunDataOne credit per hourly fileParquet, Feb 2026 onward$24 one-time, both exchanges

The last column normalizes everything to the same question: what does one month of complete Pump.fun history cost? For the subscription providers that's a recurring floor before metering, and history is often a separate purchase on top — Bitquery states plainly that its self-service plans are real-time only, with archive access from $100/mo.

For us it's 1,440 files at one credit each: $24, paid once. Not $24 a month — there's no subscription, and the $50 credit pack covers about two months of both exchanges. Per unit of data that works out to roughly 4 cents per million events.

What building it yourself actually costs

The obvious escape from per-request pricing is to stream from a node provider and parse the events yourself. It is a legitimate option, and for some teams the right one, but two costs are routinely underestimated. Streaming is metered too — websockets and gRPC both bill by usage, and full real-time coverage of both exchanges lands in the $500-a-month range at current provider rates, before you write any parsing code or store a byte. And parsed events tell you what happened, not what the token is allowed to do.

That second one bites. If a token has freeze or update authority enabled, the creator can stop a wallet from selling — a honeypot — and that state lives on the mint account, not in the swap event, so you'd fetch it separately for every mint you encounter. Our files carry can_be_frozen already resolved on every row.

Across the five sample hours, 29 of 8,491 tokens trading on the AMM had freeze authority live. A thin slice — but it is the slice where a backtest books profitable exits no real trader could have taken, and you cannot filter for it at all if the flag isn't in your data.

Why bulk files suit historical analysis

The boundary first: we sell hourly files, so we're the wrong tool for pre-computed OHLCV candles or data before February 2026. What follows is what files are for — training models, backtesting, research that needs the whole population instead of a sample.

Cost is flat per hour, not per row. One credit buys one hour of everything on that exchange, ten thousand rows or a million. A month of both exchanges is 1,440 files — $24 at the Full tier for all 500M+ events, roughly 4 cents per million. The whole archive since February 2026 is 8,389 files, roughly $140. One-time credits, no subscription.

Nothing is filtered out. An hourly file is every event that hour — swaps, creations, graduations, liquidity, bots included. Query APIs return what you asked for, so your results inherit the shape of your filter. Survivorship bias is how memecoin backtests go wrong, and you can only correct for failed tokens if the failures are in the data.

Parquet, and it stays yours. Columnar, so reading one field of 24 touches only that column; native to pandas, Polars, DuckDB, and Spark. And a file you downloaded is a file you still have — re-running last month's backtest costs nothing and gives the same answer.

What an hourly file contains

The two files for August 1, 2026, hour 12 UTC — one credit each:

 pump_funpump_amm
Events106,926859,154
Columns2422
Buys / sells56,198 / 49,704522,560 / 336,345
Token creations983127
Graduations41
Unique tokens2,6752,678
Freeze authorityflagged per rowflagged per row

966,080 events for two credits — about four cents. Every swap carries reserve state before and after, so you can reconstruct the bonding curve at any point without a second lookup. The 41 graduations that hour are the signal behind our graduation rate analysis, which found only 0.84% of tokens ever make it.

Loading it:

import pandas as pd
df = pd.read_parquet("pump_fun_2026-08-01_12.parquet")
swaps = df[df.event_type == "swap"]
print(swaps.groupby("action").lamports_amount.sum() / 1e9) # SOL volume by side

Which provider to choose

The use cases barely overlap, so this is short.

If you're doing thisUse
Backtesting a strategy on historyPumpFunData
Research, market studies, ML training setsPumpFunData
Measuring bot activity or survivorshipPumpFunData
Reconstructing bonding curve state over timePumpFunData
Querying a handful of specific tokensA metered REST or GraphQL API
Pre-computed OHLCV candles and market capsA GraphQL provider

Needing both is normal — a stream to execute, files for the research that decides what to execute. But the research comes first; a fast feed running an untested strategy just loses money faster. Our Python backtesting walkthrough runs end to end and the API guide covers the endpoints.

Common questions

Does Pump.fun have an official data API? No. Every option is a third party indexing Solana, or an indexer you run yourself.

Can I get CSV instead of Parquet? Converting is one line: pd.read_parquet(f).to_csv("out.csv"). Parquet is ~10x smaller here and keeps types, so we'd keep it.

Do credits expire? No, and there's no subscription. $10 buys 500 credits and the last 30 days; $50 buys 3,000 and the full archive.

How much data is there? As of August 2026, 4,194 hourly files for the bonding curve and 4,195 for the AMM, starting February 8, 2026. One credit is one file, so a full month of both exchanges is about 1,440 credits.

Download Pump.fun historical data

Hourly Parquet files for the Pump.fun bonding curve and the PumpSwap AMM. One-time credits, no subscription.