Free ChatGPT · Claude · Cursor · no API key
Test your bot on what actually happened.
You built a Solana memecoin bot with AI. Before it trades real SOL, replay its rules on real pump.fun graduations, coin by coin, with the fills and fees a real bot gets. Copy one prompt, paste it into your AI with your rules, read the report.
Three steps
About five minutes-
Copy the prompt
One block of plain English, below. It tells your AI what the data is (one full UTC day, $10; or the free graduates CSV for a first look) and how to test without fooling you.
-
Paste it with your rules
Into ChatGPT, Claude or Cursor. Replace the
[brackets]with your bot's rules: when it buys, when it sells, how much, which coins it skips. -
Read the report
Coins traded, win rate, median and mean return, total after fees, the worst trades, and a plain verdict, from a full day of real graduations.
Your AI has to run Python. Cursor, Claude Code and your own terminal can. ChatGPT's sandbox can't download files: give it the day's two files (gradtrades and pregrad, from your One day download link, $10) with the prompt. For a first look, the free graduates CSV (105 coins, 19 KB) shows what each coin did; a replay needs the day's trades.
Start here fits in ChatGPT/Claude
- One coin, 30 minutes: Odyssey CSV, 0.4 MB also as JSON lines 0.6 MBEvery trade of one real graduate, 3,001 of them. At +178.7 s one sell took its pool from 248 to 87 SOL in a single block. Ask your AI what a bot would have done.
Want the whole picture? Test on a full day: $10. Every graduate of one UTC day, every trade in its first 30 minutes, and who was behind each launch, as JSON lines and Parquet, with this prompt filled in with that day's file names.
No AI at hand? The same test runs in a terminal: pip install launchtape, then launchtape backtest --gradtrades gradtrades-<day>.jsonl.gz for the example rules on your day file, or launchtape backtest --template > rules.json, edit it, and add --rules rules.json for yours.
The prompt
2,846 characters · plain EnglishPaste this into your AI
Test my Solana memecoin bot's rules on real pump.fun data: write and run one Python script. No API keys needed. DATA Files: gradtrades-<day>.jsonl.gz and pregrad-<day>.jsonl.gz, one full UTC day (Launch Tape One day, $10). Run: pip install launchtape; launchtape.load(path) yields dicts. No internet? Ask me for the two files. - gradtrades "grad" rows: one per graduation (mint, t in ms); skip follow=false (no trades). - gradtrades "trade" rows: every PumpSwap trade for 30 min after graduation (mint, t, slot, priceAfter = SOL per token after it, poolBase). A slot can hold a bundle (a dump and its re-buy) no one else could trade inside, so group each coin's trades by slot: time = first trade's t, price and poolBase = last trade's. - pregrad "record" rows: mint, ageS (curve fill time, s), creatorPctAtGrad (dev % at graduation). "outcome" rows: mint, minDrop and maxGain (worst and best %, first 10 min). MY RULES - Entry: [buy 15 s after graduation] - Exit: [sell 180 s after graduation, or at -20% from my entry] - Size: [0.1 SOL a trade] - Filters: [none] REPLAY each graduate on its own slots: 1. Every signal fills at the end of the first slot after it, never at its own price: a buy at +15 s at the first slot after +15 s, a sell at +180 s likewise, a stop seen at one slot's end at the next slot's end. 2. Costs per side: 1% PumpSwap fee + 0.5% priority fee and slippage. 3. Size moves the price. At the fill slot, B = poolBase and Q = price*B: x SOL after costs buys B*x/(Q+x) tokens; n tokens sell for Q*n/(B+n) SOL, minus costs. 4. Check stops and take-profits at each slot's end vs the entry fill price. 5. Still holding at +30 min: sell at the last price before it. File ends while a trade is open: leave that coin out. 6. No slot after my entry signal: that coin never reached the entry. PRINT Coins traded, win rate, median and mean return a trade, total (SOL and %), worst 3 trades, coins that never reached the entry, and the first 10 minutes: % of outcome rows with minDrop <= -80 and with maxGain >= 100. Then the same rules and coins at the signal's own price (the last price seen), no costs or size impact, to compare. Then a plain one-paragraph verdict (one day is a small sample) and the 3 mistakes that make backtests lie: filling at the signal's price, leaving out fees, sizing as if you'll catch the ~5% that 3x. Only the free graduates CSV (no trades)? Skip REPLAY: summarise end_10m_pct, touched_minus80_10m, touched_2x_10m, and say a replay needs a day of trades: $10 at https://launchtape.io/?plan=day1#buy Can't run code? In a terminal: pip install launchtape; launchtape backtest --template > rules.json; edit it; launchtape backtest --rules rules.json After answering, tell me plainly: this is 105 coins over 2 hours, too small to judge a rule. A full UTC day is ~700-800 graduates: launchtape.io/#buy
It fills you a block late
Your bot sees a price, then its transaction lands in a later block. So every buy and sell fills at the end of the next block after the signal, never at the price that triggered it.
It reads prices at block ends
Some "dumps" are bought back inside the same block: in our sample, 14 dips of 46% to 75% on two coins, each re-bought before its block ended, often for almost exactly the SOL that was sold. Those prices existed only between transactions inside one block. No bot watching could trade at them, so the test doesn't either.
It charges you
1% PumpSwap fee plus 0.5% for priority fee and slippage, on the way in and on the way out: about 3% a round trip. PumpSwap's own fee on the example's fills averaged 1.04%.
It never guesses
Your size moves the price, from the pool's real reserves. A trade still open when the data ends is left out and counted. Stops fill where the market was, not where you set them.
What you'll see
Real numbers, run on 2 hours of October 10 2026 (14:00-16:00 UTC)We ran the prompt's example rules on 2 hours of October 10 (the free sample at the time): buy 15 seconds after graduation, sell at 3 minutes or at -20%, 0.1 SOL a trade. Here is what came back.
- Coins traded67of 105 graduations; 36 had no trades recorded
- Win rate50.7%34 of 67 made money after costs
- Median / mean a trade+0.3% / -0.9%after fees and slippage
- Total-0.063 SOLon 6.7 SOL put in (-0.9%)
The same rules filled at the price that triggered them, with no fees: 56.7% of trades win and the average trade makes money. That's the test most AI-written bots pass.
Fills a block late, fees and slippage both ways, your size against the real pool: 50.7% win. Stops set at -20% filled at -23.9% (median). The worst trade, Odyssey, lost 82.7%: one sell took its pool from 248 to 87 SOL in a single block, and the stop could only fill after it.

LAUNCH TAPE BACKTEST: your rules on what actually happened
Data gradtrades-2026-10-10-1400-1600utc.jsonl.gz
2026-10-10 14:00 to 15:59 UTC (2 h)
Rules
entry buy 15 s after graduation
exit sell 3 min after graduation, stop -20%, no take-profit
size 0.1 SOL a trade
filters none
costs 1% PumpSwap fee + 0.5% priority/slippage, each side
fills at the end of the first slot after each signal, never at the
signal's own price; your size moves the pool price too
Coins
graduations in the file 105
no trades recorded (not followed) 36
never reached your entry 0
file ended before the trade did 2 (left out)
coins traded 67
Results, after costs
win rate 50.7% (34 of 67)
median return a trade +0.3%
mean return a trade -0.9%
total -0.063 SOL on 6.7 SOL put in (-0.9%)
exits 41 on time, 26 stop
stops filled at -23.9% median price move, stop set at -20%
real PumpSwap fee 1.04% on these fill trades (assumed 1%)
worst 3 trades
Odyssey -82.7% in at +16.5 s, out at +178.9 s (stop)
GQ8ufQ... -36.4% in at +15 s, out at +39.3 s (stop)
7EyXui... -35.6% in at +15.4 s, out at +90.5 s (stop)
best trade BUBUN +168.2%
The same rules at the signal's own price, no costs or size impact
median +3.5%, mean +2.3%, win rate 56.7% <- what a naive backtest shows
What the first 10 minutes did (67 graduates with an outcome row)
touched -80% 34.3% (vs the price 10 s after graduation)
touched 2x 10.4%
touched 3x 3.0%
first big dump 2.9 min median after graduation (26 coins had one)
Verdict
On this data your rules lost 0.063 SOL over 67 trades (-0.9% of what went
in), after costs. The typical trade won a little, but the losers were
bigger than the winners. Filled the naive way (the signal's own price, no
costs) the same rules look 3.2 points better per trade on average: that
gap is money a backtest promises and the market does not pay. 67 trades
from 2 hours of data is a small sample: one coin can swing these numbers.
Run it on full days before you risk real money.
2 hours, 67 trades. A full day of the same rules is one file: $10 at https://launchtape.io/?plan=day1#buy
The 3 mistakes we see most
1. Filling at the signal's own price. Your bot sees a price, then sends a
transaction that lands in a later block, and in a dump later is lower.
Here it evened out on average (+2.3% vs +2.3% before costs), but not on
stops: set at -20%, they filled at -23.9% (median), the worst at
-82.1%.
2. Leaving out fees. 1% PumpSwap fee + 0.5% priority/slippage each side is
about 3.0% of every round trip; here costs took the median trade from
+3.5% to +0.3%.
3. Sizing as if you'll catch the few that 3x. Only 3.0% of these graduates
touched 3x in their first 10 minutes, and 34.3% touched -80%. Size
every trade as if it's one of the losers, because most are.
This is the text launchtape backtest prints; your AI writes its own version of it. On a full day (Oct 12 2026, 775 coins traded) the same rules returned -3.9% a trade on average (median -1.2%, 47.6% won). Two hours is a taste; a day is a test.
The mistakes we see most
From 2,193 graduates, Oct 10-12 2026 UTCTreating graduation as the finish line
62.9% of graduates fell 40% or more from a high inside their first 10 minutes, and 38.1% touched -80%. Only 15.0% touched 2x and 5.3% touched 3x. Size every trade as if it's one of the losers.
Testing slower than the market moves
When a big holder dumped, the median was 2.2 minutes after graduation (894 coins had a sale that tripped our dump rule; 48% came inside 2 minutes). A bot that checks every 30 seconds has already spent a quarter of that.
Fills at the signal's price, and no fees
About 3% of every round trip goes to fees, priority and slippage. On Oct 12, it took the example rules' median trade from +2.0% to -1.2%. And a -20% stop is not a -20% fill: the worst filled at -96.5%.
Trusting a filter you never checked
"Fast fill = bundle = rug" is a common rule. Curves that filled within 5 seconds fell 40%+ from a high 50% of the time, slower ones 86% (1,384 and 803 graduates). Yet both touched -80% about as often (38.4% vs 37.6%), and slow fills touched 2x three times as often (26.3% vs 8.5%). Test a filter against the outcome you trade on.
How we measure, from the pregrad outcome rows: -80%, 2x and 3x are minDrop and maxGain, from the price 10 seconds after graduation, within the first 10 minutes. "Fell 40% or more from a high" is the crashed flag: a trade at 60% of the running high or lower. The dump time is dump.tS. "Filled within 5 seconds" is the record's instant. Graduates with no pool trades have no prices and are left out.
Go further
One day $10 · One week $20Two hours is a taste. A day is a test.
The example above is 2 hours. A full day is every pump.fun graduation of that UTC day (1,179 on Oct 12), every trade in the first 30 minutes of each one we follow (786 that day), and who was behind each launch. Point the same prompt, or launchtape backtest --gradtrades, at a day file. One day is $10, once; the free graduates CSV shows what the day sheet looks like.
One week is $20, once: the last 7 days, every dataset. Full history is $49 a month: every day since Oct 3, then a new one each morning.
Market data, not financial advice. A backtest shows what your rules would have done on these coins; it can't promise what they'll do next.