auto pump n dump
Key Required

auto pump n dump

[UPD] StonksFromBeyondFromBeyond 2.8K views 701 executesUpdated May 16, 2026
5.0/ 5(2 votes)
20100% Positive
Lua Script•543 lines (20705 chars)
--b to buy, s to sell, h to reset, n to kill
--if ever in doubt look at Gui
--made with a brain, design by ai. fuck design

local RS = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local UIS = game:GetService("UserInputService")
local player = Players.LocalPlayer

--REMOTES
local buyRemote, sellRemote, exchangeRemote, watchRemote
for _, v in pairs(RS:GetDescendants()) do
    if v:IsA("RemoteFunction") then
        if v.Name == "MarketBuyPoints" and not buyRemote then buyRemote = v
        elseif v.Name == "MarketSellPoints" and not sellRemote then sellRemote = v
        elseif v.Name == "RequestExchange" and not exchangeRemote then exchangeRemote = v
        elseif v.Name == "WatchStock" and not watchRemote then watchRemote = v
        end
    end
end

-- STATE 
local targetIdRaw = nil
local targetId = nil
local pricePerShare = nil    -- Best estimate (updated from buys AND sells)
local buyCount = 0
local sellCount = 0
local cycles = 0
local mode = "detecting"
local running = true
local lastSnapShares = {}
local lastSnapPoints = 0
local totalInvested = 0
local totalReturned = 0

-- DATA 
local dataStore = {Shares = {}, Points = 0}
for _, v in pairs(RS:GetDescendants()) do
    if v.Name == "DataUpdate" and v:IsA("RemoteEvent") then
        v.OnClientEvent:Connect(function(data)
            if type(data) == "table" then
                if data.Shares then dataStore.Shares = data.Shares end
                if data.Points then dataStore.Points = data.Points end
            end
        end)
    end
end

-- HELPERS 
local function fmt(n)
    if not n then return "---" end
    if n >= 1e15 then return string.format("%.2fQ", n/1e15)
    elseif n >= 1e12 then return string.format("%.2fT", n/1e12)
    elseif n >= 1e9 then return string.format("%.2fB", n/1e9)
    elseif n >= 1e6 then return string.format("%.2fM", n/1e6)
    elseif n >= 1e3 then return string.format("%.2fK", n/1e3)
    else return string.format("%.2f", n) end
end

local function getBalance() return dataStore.Points or 0 end

local function getShares()
    if not targetIdRaw then return 0 end
    return dataStore.Shares[targetIdRaw] or 0
end

local function takeSnapshot()
    local shares = {}
    if dataStore.Shares then
        for k, v in pairs(dataStore.Shares) do shares[k] = v end
    end
    return shares, dataStore.Points or 0
end

local function detectPurchase(oldShares, oldPoints, newShares, newPoints)
    local pointsDiff = oldPoints - newPoints
    local candidates = {}
    for k, v in pairs(newShares) do
        local oldVal = oldShares[k] or 0
        local diff = v - oldVal
        if diff > 0 then
            table.insert(candidates, {
                key = k, numId = tonumber(k) or k,
                oldShares = oldVal, newShares = v, diff = diff
            })
        end
    end
    if pointsDiff > 0 and #candidates > 0 then
        table.sort(candidates, function(a, b) return a.diff < b.diff end)
        return candidates[1], candidates, pointsDiff
    end
    if #candidates > 0 then
        table.sort(candidates, function(a, b) return a.diff < b.diff end)
        return candidates[1], candidates, pointsDiff
    end
    return nil, {}, pointsDiff
end

local function setupStock(id)
    if watchRemote then pcall(function() watchRemote:InvokeServer(id) end) wait(0.3) end
    if exchangeRemote then pcall(function() exchangeRemote:InvokeServer(id) end) wait(0.3) end
end

-- GUI 
local gui = Instance.new("ScreenGui")
gui.Name = "StockTrader"
gui.ResetOnSpawn = false
gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 320, 0, 360)
frame.Position = UDim2.new(0, 15, 0.5, -180)
frame.BackgroundColor3 = Color3.fromRGB(12, 12, 22)
frame.BorderSizePixel = 0
frame.Parent = gui

local frameCorner = Instance.new("UICorner")
frameCorner.CornerRadius = UDim.new(0, 8)
frameCorner.Parent = frame

local frameStroke = Instance.new("UIStroke")
frameStroke.Color = Color3.fromRGB(0, 255, 150)
frameStroke.Thickness = 1.5
frameStroke.Parent = frame

-- Header bar
local header = Instance.new("Frame")
header.Size = UDim2.new(1, 0, 0, 30)
header.BackgroundColor3 = Color3.fromRGB(0, 40, 25)
header.BorderSizePixel = 0
header.Parent = frame

local headerCorner = Instance.new("UICorner")
headerCorner.CornerRadius = UDim.new(0, 8)
headerCorner.Parent = header

local headerCover = Instance.new("Frame")
headerCover.Size = UDim2.new(1, 0, 0, 10)
headerCover.Position = UDim2.new(0, 0, 0, 20)
headerCover.BackgroundColor3 = Color3.fromRGB(0, 40, 25)
headerCover.BorderSizePixel = 0
headerCover.Parent = header

local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -60, 0, 30)
title.Position = UDim2.new(0, 10, 0, 0)
title.BackgroundTransparency = 1
title.Text = "STOCK AUTO-TRADER v1.5"
title.TextColor3 = Color3.fromRGB(0, 255, 150)
title.TextXAlignment = Enum.TextXAlignment.Left
title.Font = Enum.Font.GothamBold; title.TextSize = 13
title.Parent = header

local closeBtn = Instance.new("TextButton")
closeBtn.Size = UDim2.new(0, 22, 0, 22)
closeBtn.Position = UDim2.new(1, -28, 0, 4)
closeBtn.BackgroundColor3 = Color3.fromRGB(180, 30, 30)
closeBtn.Text = "X"; closeBtn.TextColor3 = Color3.new(1, 1, 1)
closeBtn.Font = Enum.Font.GothamBold; closeBtn.TextSize = 11
closeBtn.BorderSizePixel = 0
closeBtn.Parent = header

local closeCorner = Instance.new("UICorner")
closeCorner.CornerRadius = UDim.new(0, 4)
closeCorner.Parent = closeBtn

closeBtn.MouseButton1Click:Connect(function() running = false; gui:Destroy() end)

-- Status indicator dot 
local statusDot = Instance.new("Frame")
statusDot.Size = UDim2.new(0, 8, 0, 8)
statusDot.Position = UDim2.new(0, 10, 0, 40)
statusDot.BackgroundColor3 = Color3.fromRGB(255, 255, 0)
statusDot.BorderSizePixel = 0
statusDot.Parent = frame

local dotCorner = Instance.new("UICorner")
dotCorner.CornerRadius = UDim.new(1, 0)
dotCorner.Parent = statusDot

-- Labels 
local lbl = {}
local defs = {
    {"status",  "SCANNING... Buy 1 share!", Color3.fromRGB(255,255,0), true},
    {"stock",   "Stock: ---",                Color3.fromRGB(140,160,220), false},
    {"balance", "Balance: ---",              Color3.fromRGB(220,200,80), false},
    {"shares",  "Shares: ---",               Color3.fromRGB(80,220,120), false},
    {"price",   "Est. Price: ---",           Color3.fromRGB(200,150,80), false},
    {"value",   "Holdings: ---",             Color3.fromRGB(100,180,220), false},
    {"profit",  "P/L: ---",                  Color3.fromRGB(180,180,180), false},
    {"buys",    "Buys: 0 | Sells: 0",       Color3.fromRGB(180,180,200), false},
    {"cycles",  "Cycles: 0",                Color3.fromRGB(180,120,220), false},
    {"lastResult", "Last: ---",             Color3.fromRGB(100,100,100), false},
    {"confirm", "",                          Color3.fromRGB(255,200,0), true},
}

for i, d in ipairs(defs) do
    local l = Instance.new("TextLabel")
    l.Size = UDim2.new(1, -20, 0, 20)
    
    if i == 1 then
        l.Position = UDim2.new(0, 24, 0, 38)  
    else
        l.Position = UDim2.new(0, 10, 0, 36 + i * 20)  
    end
    l.BackgroundTransparency = 1
    l.Text = d[2]; l.TextColor3 = d[3]
    l.TextXAlignment = Enum.TextXAlignment.Left
    l.Font = d[4] and Enum.Font.GothamBold or Enum.Font.Gotham
    l.TextSize = 12
    l.Parent = frame; lbl[d[1]] = l
end

-- Keybinds bar
local keyBar = Instance.new("Frame")
keyBar.Size = UDim2.new(1, 0, 0, 24)
keyBar.Position = UDim2.new(0, 0, 1, -44)
keyBar.BackgroundColor3 = Color3.fromRGB(8, 8, 16)
keyBar.BorderSizePixel = 0
keyBar.Parent = frame

local keyBarCorner = Instance.new("UICorner")
keyBarCorner.CornerRadius = UDim.new(0, 8)
keyBarCorner.Parent = keyBar

local keyLabels = {
    {"[B]", "Buy", Color3.fromRGB(0,200,100)},
    {"[S]", "Sell", Color3.fromRGB(255,80,80)},
    {"[Y]", "Yes", Color3.fromRGB(0,200,255)},
    {"[N]", "No", Color3.fromRGB(200,100,100)},
    {"[H]", "Reset", Color3.fromRGB(200,200,100)},
}
local xOffset = 8
for _, k in ipairs(keyLabels) do
    local keyText = Instance.new("TextLabel")
    keyText.Size = UDim2.new(0, 20, 0, 18)
    keyText.Position = UDim2.new(0, xOffset, 0, 3)
    keyText.BackgroundTransparency = 1
    keyText.Text = k[1]; keyText.TextColor3 = k[3]
    keyText.Font = Enum.Font.GothamBold; keyText.TextSize = 10
    keyText.Parent = keyBar

    local valText = Instance.new("TextLabel")
    valText.Size = UDim2.new(0, 30, 0, 18)
    valText.Position = UDim2.new(0, xOffset + 18, 0, 3)
    valText.BackgroundTransparency = 1
    valText.Text = k[2]; valText.TextColor3 = Color3.fromRGB(130,130,140)
    valText.Font = Enum.Font.Gotham; valText.TextSize = 9
    valText.Parent = keyBar

    xOffset = xOffset + 56
end

-- Credit
local credit = Instance.new("TextLabel")
credit.Size = UDim2.new(1, 0, 0, 16)
credit.Position = UDim2.new(0, 0, 1, -18)
credit.BackgroundTransparency = 1
credit.Text = "Brought to you by FromBeyond"
credit.TextColor3 = Color3.fromRGB(60, 60, 80)
credit.Font = Enum.Font.Gotham; credit.TextSize = 9
credit.Parent = frame

-- Draggable
local dragging, dragStart, startPos
frame.InputBegan:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then
        dragging = true; dragStart = input.Position; startPos = frame.Position
    end
end)
frame.InputEnded:Connect(function(input)
    if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
end)
UIS.InputChanged:Connect(function(input)
    if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
        frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + (input.Position.X - dragStart.X), startPos.Y.Scale, startPos.Y.Offset + (input.Position.Y - dragStart.Y))
    end
end)

gui.Parent = player:WaitForChild("PlayerGui")

-- PULSE ANIMATION, Took me too long icl
spawn(function()
    while running do
        local colors = {
            detecting = Color3.fromRGB(255, 255, 0),
            confirming = Color3.fromRGB(255, 200, 0),
            ready = Color3.fromRGB(0, 200, 255),
            buying = Color3.fromRGB(0, 255, 100),
            selling = Color3.fromRGB(255, 80, 80),
            idle = Color3.fromRGB(100, 100, 100),
        }
        local baseColor = colors[mode] or Color3.fromRGB(150, 150, 150)
        for i = 1, 10 do
            if not running then break end
            local t = i / 10
            local r = math.floor(baseColor.R * 255 * (0.4 + 0.6 * t))
            local g = math.floor(baseColor.G * 255 * (0.4 + 0.6 * t))
            local b = math.floor(baseColor.B * 255 * (0.4 + 0.6 * t))
            statusDot.BackgroundColor3 = Color3.fromRGB(r, g, b)
            frameStroke.Color = Color3.fromRGB(r, g, b)
            wait(0.08)
        end
    end
end)

-- UPDATE GUI 
local function updateGUI()
    local mText, mColor
    if mode == "detecting" then mText = "SCANNING... Buy 1 share!"; mColor = Color3.fromRGB(255,255,0)
    elseif mode == "confirming" then mText = "CONFIRM? [Y/N]"; mColor = Color3.fromRGB(255,200,0)
    elseif mode == "ready" then mText = "LOCKED! Press B"; mColor = Color3.fromRGB(0,200,255)
    elseif mode == "buying" then mText = "PUMPING..."; mColor = Color3.fromRGB(0,255,100)
    elseif mode == "selling" then mText = "DUMPING..."; mColor = Color3.fromRGB(255,80,80)
    else mText = "IDLE"; mColor = Color3.fromRGB(150,150,150) end

    lbl.status.Text = mText; lbl.status.TextColor3 = mColor
    lbl.stock.Text = "Stock: " .. (targetId and tostring(targetId) or "---")
    lbl.balance.Text = "Balance: " .. fmt(getBalance())
    lbl.shares.Text = "Shares: " .. getShares()
    lbl.price.Text = "Est. Price: " .. (pricePerShare and fmt(pricePerShare) or "---")

    -- Holdings value = shares × estimated price
    local sharesHeld = getShares()
    if pricePerShare and sharesHeld > 0 then
        local holdingsValue = sharesHeld * pricePerShare
        lbl.value.Text = "Holdings: " .. fmt(holdingsValue) .. " (" .. sharesHeld .. " x " .. fmt(pricePerShare) .. ")"

        -- P/L = total returned + current holdings value - total invested
        local profit = totalReturned + holdingsValue - totalInvested
        if profit >= 0 then
            lbl.profit.Text = "P/L: +" .. fmt(profit)
            lbl.profit.TextColor3 = Color3.fromRGB(0, 255, 100)
        else
            lbl.profit.Text = "P/L: -" .. fmt(math.abs(profit))
            lbl.profit.TextColor3 = Color3.fromRGB(255, 80, 80)
        end
    else
        lbl.value.Text = "Holdings: ---"
        lbl.profit.Text = "P/L: ---"
        lbl.profit.TextColor3 = Color3.fromRGB(140, 140, 140)
    end

    lbl.buys.Text = "Buys: " .. buyCount .. " | Sells: " .. sellCount
    lbl.cycles.Text = "Cycles: " .. cycles
end

-- DETECTION LOOP 
spawn(function()
    wait(3)
    lastSnapShares, lastSnapPoints = takeSnapshot()
    updateGUI()

    while running and mode == "detecting" do
        local newShares, newPoints = takeSnapshot()
        local best, allChanges, ptsDiff = detectPurchase(lastSnapShares, lastSnapPoints, newShares, newPoints)

        if best then
            targetIdRaw = best.key
            targetId = best.numId
            local confirmText = "Detected: " .. tostring(targetId) .. " (+" .. best.diff .. " shares"
            if ptsDiff > 0 then
                confirmText = confirmText .. ", -" .. fmt(ptsDiff) .. " pts)"
                pricePerShare = ptsDiff / best.diff
            else
                confirmText = confirmText .. ", no bal change?)"
            end
            if #allChanges > 1 then
                confirmText = confirmText .. " | Also:"
                for i, c in ipairs(allChanges) do
                    if i <= 3 and c.key ~= best.key then
                        confirmText = confirmText .. " " .. tostring(c.numId) .. "(+" .. c.diff .. ")"
                    end
                end
            end
            lbl.confirm.Text = confirmText
            mode = "confirming"
            updateGUI()
        end

        if mode == "detecting" then
            lastSnapShares, lastSnapPoints = newShares, newPoints
        end
        wait(0.5)
    end
end)

-- MAIN TRADING LOOP 
spawn(function()
    while running do
        if mode == "buying" and targetId then
            local balBefore = getBalance()
            local ok, result = pcall(function() return buyRemote:InvokeServer(targetId, 1) end)

            if ok and result == true then
                buyCount = buyCount + 1
                local balAfter = getBalance()
                local paid = balBefore - balAfter
                if paid > 0 then
                    pricePerShare = paid  -- Update estimate from buy
                    totalInvested = totalInvested + paid
                end
                lbl.lastResult.Text = "Buy OK #" .. buyCount .. " (-" .. fmt(paid) .. ")"
                lbl.lastResult.TextColor3 = Color3.fromRGB(0,255,100)

                -- Can't afford? Auto-switch to selling
                if pricePerShare and getBalance() < pricePerShare then
                    local currentShares = getShares()
                    if currentShares > 0 then
                        mode = "selling"  -- AUTO-SWITCH to dump!
                        lbl.lastResult.Text = "CAN'T AFFORD -> AUTO SELL!"
                        lbl.lastResult.TextColor3 = Color3.fromRGB(255,200,0)
                    else
                        mode = "idle"
                        lbl.lastResult.Text = "BROKE & NO SHARES"
                        lbl.lastResult.TextColor3 = Color3.fromRGB(255,80,80)
                    end
                end
            else
                local errStr = ok and "false" or "ERR"
                lbl.lastResult.Text = "Buy " .. errStr .. " (cooldown)"
                lbl.lastResult.TextColor3 = Color3.fromRGB(80,80,80)
            end

        elseif mode == "selling" and targetId then
            local currentShares = getShares()

            if currentShares <= 0 then
                cycles = cycles + 1
                mode = "idle"
                lbl.lastResult.Text = "SOLD OUT! Cycle " .. cycles .. " done"
                lbl.lastResult.TextColor3 = Color3.fromRGB(255,200,0)
            else
                local sellQty = math.max(1, math.floor(currentShares * 0.1))
                local balBefore = getBalance()
                local ok, result = pcall(function() return sellRemote:InvokeServer(targetId, sellQty) end)

                if ok and result == true then
                    sellCount = sellCount + 1
                    local balAfter = getBalance()
                    local gained = balAfter - balBefore
                    if gained > 0 then
                        -- Update price estimate from sell!
                        local sellPrice = gained / sellQty
                        pricePerShare = sellPrice
                        totalReturned = totalReturned + gained
                    end
                    lbl.lastResult.Text = "Sell OK #" .. sellCount .. " (x" .. sellQty .. " +" .. fmt(gained) .. ")"
                    lbl.lastResult.TextColor3 = Color3.fromRGB(0,255,100)
                else
                    local errStr = ok and "false" or "ERR"
                    lbl.lastResult.Text = "Sell " .. errStr .. " (cooldown)"
                    lbl.lastResult.TextColor3 = Color3.fromRGB(80,80,80)
                end
            end
        end

        updateGUI()
        wait(0.1)
    end
end)

-- KEY INPUT 
UIS.InputBegan:Connect(function(input, gpe)
    if gpe then return end

    if input.KeyCode == Enum.KeyCode.Y and mode == "confirming" then
        setupStock(targetId)
        lbl.confirm.Text = "Confirmed: " .. tostring(targetId)
        lbl.confirm.TextColor3 = Color3.fromRGB(0,255,100)
        mode = "ready"
        updateGUI()

    elseif mode == "confirming" and (input.KeyCode == Enum.KeyCode.N or input.KeyCode == Enum.KeyCode.H) then
        targetIdRaw = nil; targetId = nil; pricePerShare = nil
        lbl.confirm.Text = "Rejected. Re-scanning..."
        lbl.confirm.TextColor3 = Color3.fromRGB(255,100,100)
        mode = "detecting"
        lastSnapShares, lastSnapPoints = takeSnapshot()
        updateGUI()

    elseif input.KeyCode == Enum.KeyCode.B then
        if mode == "buying" then
            mode = "idle"
        elseif targetId and (mode == "ready" or mode == "idle" or mode == "selling") then
            mode = "buying"
        end
        updateGUI()

    elseif input.KeyCode == Enum.KeyCode.S then
        if mode == "selling" then
            mode = "idle"
        elseif targetId and (mode == "ready" or mode == "idle" or mode == "buying") then
            mode = "selling"
        end
        updateGUI()

    elseif input.KeyCode == Enum.KeyCode.H then
        targetIdRaw = nil; targetId = nil; pricePerShare = nil
        buyCount = 0; sellCount = 0; cycles = 0
        totalInvested = 0; totalReturned = 0
        lbl.confirm.Text = ""
        mode = "detecting"
        lastSnapShares, lastSnapPoints = takeSnapshot()
        spawn(function()
            while running and mode == "detecting" do
                local newShares, newPoints = takeSnapshot()
                local best, allChanges, ptsDiff = detectPurchase(lastSnapShares, lastSnapPoints, newShares, newPoints)
                if best then
                    targetIdRaw = best.key
                    targetId = best.numId
                    local confirmText = "Detected: " .. tostring(targetId) .. " (+" .. best.diff .. " shares"
                    if ptsDiff > 0 then
                        confirmText = confirmText .. ", -" .. fmt(ptsDiff) .. " pts)"
                        pricePerShare = ptsDiff / best.diff
                    else
                        confirmText = confirmText .. ", no bal change?)"
                    end
                    if #allChanges > 1 then
                        confirmText = confirmText .. " | Also:"
                        for i, c in ipairs(allChanges) do
                            if i <= 3 and c.key ~= best.key then
                                confirmText = confirmText .. " " .. tostring(c.numId) .. "(+" .. c.diff .. ")"
                            end
                        end
                    end
                    lbl.confirm.Text = confirmText
                    mode = "confirming"
                    updateGUI()
                end
                if mode == "detecting" then
                    lastSnapShares, lastSnapPoints = newShares, newPoints
                end
                wait(0.5)
            end
        end)
        updateGUI()

    elseif input.KeyCode == Enum.KeyCode.N and mode ~= "confirming" then
        running = false
        gui:Destroy()
    end
end)

Features & Information

can be used to make alot of robux
#robux#free robux#stonks#auto buy#auto sell

Community Comments (15)

gancaTenanggancaTenangMay 16, 2026

Insane your UI That was real windows error

down*15down*15May 16, 2026

keep this niche dawg

down*15down*15May 16, 2026

btw son the dumper is kinda slow losing alot on that

Replying to @down*15
FromBeyondFromBeyondMay 16, 2026

@down15 the whole point of dumper is to sell 10% of the value of all ur shares to get as much profits as possible... ill see what i can do tho

FromBeyondFromBeyondMay 16, 2026

@1y3w9emxgmtj W

orbit167orbit167May 17, 2026

aura

trentonlgaletrentonlgaleMay 17, 2026

I mean id say it works, goated

trentonlgaletrentonlgaleMay 17, 2026

What do you do when its on idle?

Replying to @trentonlgale
FromBeyondFromBeyondMay 17, 2026

@trentonlgale Idle means not pumping or dumping, not doing anything

Replying to @FromBeyond
trentonlgaletrentonlgaleMay 20, 2026

@FromBeyond do you just wait when its on that?

Replying to @trentonlgale
FromBeyondFromBeyondMay 22, 2026

@trentonlgale read the gui

Replying to @FromBeyond
trentonlgaletrentonlgaleMay 23, 2026

@FromBeyond I did, i dont understand though do we buy right after dumping because it doesnt do it by itself

Replying to @trentonlgale
FromBeyondFromBeyondMay 23, 2026

@trentonlgale before you start an dump and pump, the first thing u do is buy max shares when the cost is one point. then you some you sell some of the shares and then finally you can turn on auto pump and dump. it does not help you set up only that it does the most tedious part

FromBeyondFromBeyondMay 17, 2026

@twistedtemp12 alr

hydraroblox5hydraroblox5May 26, 2026

keep that niche and put it offline or with a key pleaseeee man