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 UTC | Bonding curve | AMM | Total |
|---|---|---|---|
| Jul 5 | 85,332 | 961,176 | 1,046,508 |
| Jul 12 | 60,252 | 416,196 | 476,448 |
| Jul 19 | 98,447 | 549,380 | 647,827 |
| Jul 26 | 119,213 | 649,122 | 768,335 |
| Aug 1 | 106,926 | 859,154 | 966,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
| Provider | Billing unit | Bulk history | One month of data |
|---|---|---|---|
| Bitquery | Points and volume | Archive sold separately; S3 export on Enterprise | $139+/mo, plus points for volume |
| Solana Tracker | Requests per month | Via REST, no file export | €50–€1,499/mo by request count |
| Self-hosted indexer | Metered stream + storage | You backfill and enrich it yourself | ~$500/mo streaming + engineering |
| PumpFunData | One credit per hourly file | Parquet, 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_fun | pump_amm | |
|---|---|---|
| Events | 106,926 | 859,154 |
| Columns | 24 | 22 |
| Buys / sells | 56,198 / 49,704 | 522,560 / 336,345 |
| Token creations | 983 | 127 |
| Graduations | 41 | — |
| Unique tokens | 2,675 | 2,678 |
| Freeze authority | flagged per row | flagged 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 sideWhich provider to choose
The use cases barely overlap, so this is short.
| If you're doing this | Use |
|---|---|
| Backtesting a strategy on history | PumpFunData |
| Research, market studies, ML training sets | PumpFunData |
| Measuring bot activity or survivorship | PumpFunData |
| Reconstructing bonding curve state over time | PumpFunData |
| Querying a handful of specific tokens | A metered REST or GraphQL API |
| Pre-computed OHLCV candles and market caps | A 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.