
Key Required
auto pump n dump
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

Insane your UI That was real windows error
keep this niche dawg
btw son the dumper is kinda slow losing alot on that
@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
@1y3w9emxgmtj W
aura
I mean id say it works, goated
What do you do when its on idle?
@trentonlgale Idle means not pumping or dumping, not doing anything
@FromBeyond do you just wait when its on that?
@trentonlgale read the gui
@FromBeyond I did, i dont understand though do we buy right after dumping because it doesnt do it by itself
@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
@twistedtemp12 alr
keep that niche and put it offline or with a key pleaseeee man