How to Write a Trading Bot Spec That Gets an Accurate Quote
A hire-side template for your trading bot development scope of work spec — venues, latency budgets, RPC/Geyser assumptions and acceptance tests for a firm quote.
Most quotes come back vague because the spec was vague. A studio can't commit to a number when "build me a Solana sniper" could mean a mempool-less bot polling every 400ms or a co-located Geyser consumer racing to land in the same slot as the pool-creation transaction. The gap between those two builds is roughly 3x in hours and 10x in infra cost. If you want a firm quote instead of a padded range, hand the shop a scope-of-work document that answers the questions they'd otherwise have to guess at — and price the guesses as risk.
This is the template I ask founders to fill out before I'll give them a fixed bid. It's organized the way a trading-systems engineer reads a spec, not the way a product manager writes one.
Start with the venue, not the strategy
The single biggest driver of cost is where the bot trades, because the venue dictates the execution model. Name the exact venue and the exact interface.
- Solana DEX — Which programs? Raydium AMM v4 and CLMM are different codepaths; pump.fun's bonding curve is a third. Are you sniping new pools, or trading existing pairs?
- Perps — Hyperliquid's on-chain order book behaves nothing like a Binance-style CEX. If you're building a market maker there, the quoting and cancel/replace logic is venue-specific, which is why a Hyperliquid market-making build is scoped separately from anything CEX.
- Prediction markets — Polymarket's CLOB plus the neg-risk adapter means "buy YES" and "sell NO" are not the same trade at the contract level. If your edge lives in the neg-risk split/merge mechanics, say so — that's a specific integration, not a generic order router.
Write one line per venue: chain, program/contract, and the specific action (snipe, quote, arb, TWAP). A studio can price a known integration in an afternoon. "Support DEXes" is unpriceable and will get you a range with a fat upper bound.
State your latency budget as a number
"Fast" is not a spec. Give a target and the point you're measuring between.
For a sniper, the number that matters is time-from-signal-to-signed-transaction, and whether you need to land in the same block as the trigger event. That single requirement changes the whole architecture:
- Same-slot landing required → you need a Geyser plugin (Yellowstone, Triton) or a staked RPC connection with a Jito bundle path, plus tip logic. This is real infra with a monthly cost.
- Next-few-slots is fine → a good paid RPC with
processedcommitment and a tight polling loop gets you there for a fraction of the cost.
Put the budget in writing:
Signal source: Geyser account subscription (pool init)
Detection latency: < 50 ms from account write to decode
Submit path: Jito bundle, tip = dynamic (p75 of last 20 blocks)
Landing target: same slot as trigger, or abort
Fallback: standard sendTransaction if bundle not landed in 1 slot
That block tells the studio exactly what to build and what to charge for. If you can't specify it, a strategy consultation to pin down the latency requirement is cheaper than paying an engineer to discover it mid-build. It's the same reason a well-scoped Solana sniper build starts with the signal path, not the UI.
Make your infra assumptions explicit
This is where surprise invoices come from. The studio needs to know who's paying for and operating the infrastructure, because "the bot" and "the boxes the bot needs" are separate line items.
Spell out:
- RPC / Geyser provider — Are you providing a Helius/Triton endpoint, or is the studio sourcing it? A dedicated Geyser stream can run $500–2000/mo. If that's a surprise at delivery, someone's unhappy.
- Hosting — Co-located near the validator? A specific region? Or a $20 VPS is fine? Latency-sensitive bots often need a box in the same datacenter as your RPC, and that constrains the provider.
- Wallet / key management — Hot keys in env vars, or a signer service? Who holds the funds during testing?
- Rate limits — What's the request budget? Some strategies die quietly against a 50 req/s cap.
For anything touching prediction markets, note whether you're providing the funded proxy wallet and API credentials, since a Polymarket spread bot can't be acceptance-tested without live allowances on the CLOB.
Define acceptance tests, or you're defining an argument
The most valuable section, and the one founders skip. Acceptance criteria convert "is it done?" from an opinion into a checklist. Write them as pass/fail conditions a third party could verify.
Good ones are concrete:
- On a testnet pool-creation event, the bot submits a signed buy within 50ms and the transaction confirms in the same or next slot, over 20 consecutive trials, with ≥ 90% landing.
- Given a simulated RPC disconnect mid-order, the bot recovers without double-submitting — no duplicate fills.
- On restart after a crash with an open position, the bot reconciles state from the chain and does not re-enter.
That second and third one aren't optional polish. Crash recovery and idempotency are where most bots quietly lose money, and they're worth reading up on how a proper order state machine survives crashes without double-filling before you write the tests. If your acceptance suite doesn't cover the disconnect-and-restart path, you haven't specified a trading bot — you've specified a demo.
Price the scope creep up front
The last section of a good spec is the out of scope list. It's counterintuitive, but naming what you're not paying for is what makes the quote firm.
IN SCOPE: single-venue sniper, one signal source, CLI config,
Telegram fill alerts, acceptance suite above
OUT (v2): multi-wallet, position sizing model, dashboard UI,
second venue, MEV-protected exit routing
CHANGE: anything in OUT quoted separately at $X/day before work starts
When both sides sign off on that, a change request stops being a fight. The studio isn't padding the bid to cover things you might ask for; you're not paying for a dashboard you didn't want. Anything in the OUT column has a known rate, so a mid-project "can we also…" is a one-line estimate instead of a renegotiation.
The one-page version
If you write nothing else, write these five lines and you'll get a real number:
- Venue + interface — chain, program, action, per line.
- Latency budget — a millisecond number and the measurement points.
- Infra ownership — who provides RPC/Geyser, hosting, keys.
- Acceptance tests — pass/fail, including disconnect and restart.
- In / out of scope — with a per-day rate on the out list.
A studio that gets this document can quote in a day and hold the price, because you've removed the two things that force padding: ambiguity and undefined edges. If you're not sure how to fill in the latency and signal-path lines, start with a short strategy consultation and let the spec fall out of that conversation.
Need a bot like this built?
We design, build and run trading bots on Solana, Hyperliquid and Polymarket.
Start a projectMore from the blog
Public vs Paid RPC: How to Run a Fair Benchmark
A fair comparison of public and paid RPC endpoints must account for quotas, workload, freshness and support guarantees.
Read articleRPC Benchmark Percentiles Explained: p50, p95 and p99
Why averages hide the latency spikes that break trading bots, wallets and production blockchain applications.
Read articleHyperliquid REST vs WebSocket Benchmark: What to Measure
A benchmark plan for Hyperliquid market data that separates request latency from streaming freshness and recovery.
Read article