<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Launch Tape</title>
    <description>The latest articles on DEV Community by Launch Tape (@launchtape).</description>
    <link>https://dev.to/launchtape</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4182249%2Fd2a85d5e-5367-4747-85ac-e57935ecf181.jpg</url>
      <title>DEV Community: Launch Tape</title>
      <link>https://dev.to/launchtape</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/launchtape"/>
    <language>en</language>
    <item>
      <title>What 2,193 pump.fun graduations did in their first 10 minutes (and what it means for your bot)</title>
      <dc:creator>Launch Tape</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:01:03 +0000</pubDate>
      <link>https://dev.to/launchtape/what-2193-pumpfun-graduations-did-in-their-first-10-minutes-and-what-it-means-for-your-bot-4f70</link>
      <guid>https://dev.to/launchtape/what-2193-pumpfun-graduations-did-in-their-first-10-minutes-and-what-it-means-for-your-bot-4f70</guid>
      <description>&lt;p&gt;&lt;em&gt;Correction (Oct 14): an earlier version called a 40% fall from the high a "crash of 80%+". Numbers below are corrected.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A lot of people are building Solana trading bots with ChatGPT or Claude right now. I was one of them. The bot part turns out to be easy. Knowing whether it would actually make money is the hard part, because almost every test runs on made-up or smoothed-over data.&lt;/p&gt;

&lt;p&gt;So we started recording everything. Every pump.fun coin that graduates to a PumpSwap pool, every trade in its first 30 minutes, who was behind the launch, and how it ended. Here's what three days of that tape show: &lt;strong&gt;2,193 graduates, October 10 to 12, 2026 (UTC).&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Most graduates fall hard, and fast
&lt;/h2&gt;

&lt;p&gt;Every move here is measured from the price 10 seconds after graduation, within the first 10 minutes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;38.1%&lt;/strong&gt; touched -80% at some point (835 of 2,193).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;62.9%&lt;/strong&gt; fell 40% or more from a high (1,380). The first version of this post called this an 80% drop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15.0%&lt;/strong&gt; touched 2x (330), and only &lt;strong&gt;5.3%&lt;/strong&gt; touched 3x (117).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Graduated" sounds like a finish line. For the median coin, the lowest point in those 10 minutes was 50% below its price 10 seconds after graduation.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. You get about two minutes
&lt;/h2&gt;

&lt;p&gt;When a big holder dumps (a single sale big enough to crater the pool), the median time was &lt;strong&gt;2.2 minutes after graduation&lt;/strong&gt; (894 coins had one). Almost half of those dumps came inside the first 2 minutes.&lt;/p&gt;

&lt;p&gt;If your bot polls an API every 30 seconds, sends a transaction, and waits for confirmation, a big part of that window is already gone. Test your bot's real reaction time, not just its logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The popular "bundle = rug" rule didn't hold up
&lt;/h2&gt;

&lt;p&gt;A lot of filters treat a bonding curve that fills in seconds as a bundled rug and skip it. Oct 10-12, 2,187 graduates with a launch record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curve filled in &lt;strong&gt;under 5 seconds&lt;/strong&gt; (1,384 coins): 38.4% touched -80% within 10 minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slower&lt;/strong&gt; fills (803 coins): 37.6% touched -80%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;About the same. Slower fills did fall 40% or more from a high more often (85.6% vs 50.0%), but they also touched 2x three times as often (26.3% vs 8.5%): they swing more both ways. Three days isn't enough to call it a law. It's enough to say: check your filters against the outcome you actually trade on.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Watch the dev wallet
&lt;/h2&gt;

&lt;p&gt;Oct 10-12, 1,913 graduates with holder data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dev &lt;strong&gt;still holding more than 5%&lt;/strong&gt; of supply at graduation (1,310 coins): 33.6% touched -80% (49.3% fell 40% or more from a high).&lt;/li&gt;
&lt;li&gt;Dev &lt;strong&gt;already sold down&lt;/strong&gt; to 5% or less (603 coins): 47.4% touched -80% (81.8% fell 40% or more from a high).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sold-down group also touched 2x far more often (28.0% vs 7.0%), so it swings more both ways too.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you're building a bot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Paper results lie unless your fills are honest.&lt;/strong&gt; Use the next trade's price, not the one you saw. Add fees (they're bigger than you think on small pools).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test on what actually happened.&lt;/strong&gt; Random-walk or candle data hides the two-minute collapse completely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Size for the 95% that never 3x.&lt;/strong&gt; "Sell at 3x" strategies look great until you count the coins that never get there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write your gaps down.&lt;/strong&gt; If your recorder drops for a minute, mark it. Silent gaps make stats look better than they are.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;There's a free 2-hour sample (every dataset, Oct 10 14:00-16:00 UTC) on &lt;a href="https://www.kaggle.com/datasets/launchtape/solana-launch-tape" rel="noopener noreferrer"&gt;Kaggle&lt;/a&gt; and &lt;a href="https://huggingface.co/datasets/launchtape/solana-launch-tape" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;. Loading it is a few lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;gzip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;trades&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gradtrades-2026-10-10-1400-1600utc.jsonl.gz&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;grads&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grad&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;grads&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;graduations,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trades&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trade&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;trades&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or &lt;code&gt;pip install launchtape&lt;/code&gt; for a small helper that downloads and reads the files.&lt;/p&gt;

&lt;p&gt;The full daily data (every graduate, every day since Oct 3, plus who's behind each launch, other launchpads and Meteora pool minutes) is at &lt;a href="https://launchtape.io" rel="noopener noreferrer"&gt;launchtape.io&lt;/a&gt;, from $10 a month.&lt;/p&gt;

&lt;p&gt;Questions about how any number was measured: ask in the comments, happy to show the method.&lt;/p&gt;

</description>
      <category>solana</category>
      <category>python</category>
      <category>ai</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
