Bots

Best Discord Bot Hosting 2026: Free vs Paid, Real Prices Compared

📅 January 10, 2025🔄 Updated July 19, 2026⏱ 18 min read✍ Discord Timestamp Team

What it actually costs to keep a Discord bot online in 2026. Published list prices, linked SLAs, and the free-tier traps that quietly kill gateway bots.

Most hosting comparisons for Discord bots are affiliate pages with invented numbers. This one is a price list you can check yourself: every figure links to the provider's own pricing or SLA page, and the date those prices were read is stated above the table.

We do not publish latency benchmarks. The reason matters for how you pick a host, so it gets its own section below.

Why Discord Bot Hosting Is Different

Generic hosting guides assume your app is a website. A website idles until a request arrives, answers it, and sleeps again. Hosting is built around that shape: scale to zero, wake on request, pay per request.

A Discord bot is the opposite shape. It opens a persistent WebSocket connection to Discord's Gateway and holds it open forever. Discord's docs are explicit that this is a long-lived connection you maintain yourself: "Gateway connections are persistent WebSockets which introduce more complexity than sending HTTP requests or responding to interactions... your app must know how to open the initial connection, as well as maintain it and handle any disconnects." Your bot must also heartbeat at a fixed interval for the life of that connection (Discord Gateway docs).

That one fact decides everything else:

  • A host that sleeps your process is disqualified. No process, no WebSocket, no bot.
  • Scale-to-zero serverless is usually the wrong tool. There is no incoming HTTP request to wake your bot. The events you need arrive on a socket that only exists while the process runs.
  • You are billed for time, not traffic. A bot in one quiet server costs the same as one in fifty busy servers, because both are one process running 730 hours a month.
  • Free tiers designed for websites are traps. They optimise around idling, and your bot never idles.

Flowchart: does your bot need always-on hosting? A gateway bot needs an always-on host; an HTTP-interactions-only bot can use serverless

There is one real exception, and it is the fork in the flowchart. Discord delivers interactions two mutually exclusive ways: over a Gateway WebSocket, or over HTTP via outgoing webhooks. Set an Interactions Endpoint URL in your app's settings and Discord POSTs slash-command interactions to your URL instead, with no gateway connection at all (interactions overview). That bot can genuinely run serverless for almost nothing.

The catch: HTTP interactions deliver only interactions. If you need messageCreate, member joins, reactions, voice state or presence, you need the Gateway. Most bots people actually build do. Check which you are before shopping.

One sizing note. A single gateway connection tops out at 2,500 servers: "Each shard can only support a maximum of 2500 guilds, and apps that are in 2500+ guilds must enable sharding" (Discord sharding docs). That is enforced with close code 4011, not advisory. Everything priced here assumes one shard, which covers you to 2,500 servers — further than most bots ever get.

We Don't Publish Latency Benchmarks

You will see articles quoting a single global millisecond figure per host. Ignore them.

The round trip that matters is between your host and Discord's gateway, not between your host and your members — they talk to Discord, not to you. And a single "45ms global average" is not measurable in any useful way: it depends on your region, which gateway you were assigned, what your process was doing, and how loaded the box was. Anyone quoting one number for an entire provider is guessing.

Here instead is what each provider commits to in writing.

ProviderPublished uptime commitmentApplies to
DigitalOcean Droplets99.99%All Droplets. Wording is "commits to"
DigitalOcean App Platform99.95%Weaker wording: "commercially reasonable efforts"
Google Cloud Run99.95%Standard non-GPU services
Railway99.9% Hobby, 99.99% ProPublished as an "Availability Target"; contractual SLA is Enterprise-only
Fly.io99.9%Enterprise only. Pay-as-you-go gets no uptime SLA
RenderNot publishedContractual SLAs are Enterprise-only, figure not public

Note that Fly.io and Render publish no uptime commitment for the plans a hobbyist would actually buy, and that DigitalOcean's headline 99.99% covers Droplets — its managed App Platform carries a lower 99.95% and softer language. That distinction gets copied wrong constantly.

Treat all of these as refund policies, not forecasts. None of them cover your own crashes, memory leaks, or a bad deploy at 2am.

What One Always-On Bot Actually Costs

One concrete workload priced across every provider: a 512 MB always-on Node.js bot, one shard, 24/7 for a full month. No free credits, no committed-use discounts, list prices only.

Prices verified: 2026-07-19.

Chart: estimated monthly list price to run one 512 MB always-on Discord bot on Railway, Render, Fly.io, DigitalOcean, Hetzner, Vultr and Oracle, list prices as of 19 July 2026

ProviderWhat you buyPer monthNotes
Oracle CloudAlways Free E2.1.Micro, 1 GB$0.00Genuinely free. Reclamation risk — see below
Fly.ioshared-cpu-1x, 512 MB~$3.19US-region base; Machine pricing is region-specific, US/EU regions cluster low
Vultr512 MB with IPv4$3.50Sandbox plan: capped at 5 instances, no API automation
DigitalOceanDroplet, 512 MB, 10 GB SSD$4.00App Platform equivalent is $5.00
RailwayHobby, 512 MB measured$5.00Plan fee includes $5 usage. Billed on measured use
RenderStarter, 512 MB / 0.5 CPU$7.00Cheapest always-on tier. Free tier will not work
HerokuBasic dyno, 0.5 GB$7.00Read the Heroku note before choosing this
HetznerCX23, 2 vCPU / 4 GB, + IPv4~$7.09$6.49 server + $0.60 IPv4, excl. VAT, EU only
Google Cloud Runmin-instances=1, 1 vCPU / 512 MiB~$49.93Arithmetic below

Four notes on reading that honestly.

Railway bills what you use, not what you provision. Its rates are $10 per GB of RAM per month and $20 per vCPU per month, so 512 MB works out at $5.00 — but a typical Node bot holding 200 MB resident bills nearer $2, plus a little CPU. The $5 Hobby fee includes $5 of usage, so most small bots land at exactly $5 all-in. Render's $7 is a fixed box you rent whether you fill it or not.

Hetzner is cheap but no longer cheapest, and EU-only at that price. The CX11 and CX22 plans older guides recommend are gone; Hetzner deprecated the old shared-Intel line from 1 January 2026 (changelog). The entry plan is now CX23, 2 vCPU / 4 GB / 40 GB. Hetzner also raised prices on 15 June 2026, taking CX23 from €3.99 to €5.49/month ($6.49), excluding VAT, plus €0.50 ($0.60) for a primary IPv4 address. Four times the RAM of a $4 Droplet, but the CX and CAX lines exist only in Germany and Finland.

Vultr's cheap tiers have strings. The widely-quoted $2.50 plan is IPv6-only and capped at 2 instances per account. The cheapest with IPv4 is $3.50, capped at 5. Vultr's FAQ adds that "these plans are not available for API automation". A normal unrestricted 1 GB plan is $5.00.

Cloud Run's number is not a typo. See below.

Free Tiers and Where They Trap You

Every "free Discord bot hosting 24/7" result describes one of these. All have a catch; three are fatal.

Render's Free Tier Is Not for Bots

The most common wasted afternoon in Discord bot hosting.

Render's free instance type is not available for Background Workers — free covers web services, static sites, Postgres and key-value stores only (Render free tier docs). A Background Worker, the correct component for a bot with no HTTP endpoint, starts at $7/month.

So running free on Render means deploying your bot as a web service, bolting on an HTTP server it does not need. Then you hit the real problem: "Render spins down a Free web service that goes 15 minutes without receiving any inbound traffic." Your outbound gateway WebSocket is not inbound traffic. Fifteen minutes after deploy your process stops and your bot goes offline; when something eventually hits the URL, spinning back up "takes about one minute".

Timeline: a Render free web service receives traffic, idles for 15 minutes, spins down, then needs a cold start before it responds again

Render's free tier is fine for a static site or hobby API. For a gateway bot it does not work, and no configuration fixes it. Budget $7.

The Keep-Alive Pinger Anti-Pattern

The standard workaround is to add an Express server to your bot and point an uptime monitor at it every 10 minutes, so the platform sees inbound traffic and never spins you down.

It works until it doesn't, for reasons that all surface at 3am:

  • It is an explicit end-run around the free tier's terms, and free tiers are where providers change spin-down logic first.
  • You have added a dependency. When the pinger's own free tier lapses or its cron slips past 15 minutes, your bot dies silently.
  • It keeps the container alive, not the connection. If your gateway socket drops and your reconnect logic is broken, the health check still returns 200 while the bot sits offline.
  • Platforms restart free instances for their own reasons, and each restart costs a fresh identify against a limit of 1,000 per 24 hours.

You are doing unpaid ops work to dodge a $7 bill. If the bot matters, pay for always-on. If it doesn't, use Oracle.

Cloud Run: The "$0.01 a Month" Claim Is Impossible

Cloud Run scales to zero, and with no instance running there is no gateway connection — so a gateway bot must set min-instances = 1. It also needs CPU between requests to heartbeat, which means instance-based billing. Google's docs point straight at this: "combining instance-based billing with a number of minimum instances results in a number of instances up and running with full access to CPU resources, enabling background processing use cases" (billing settings).

At that point you are renting a machine 24/7 at per-second rates. At us-central1 list prices of $0.000018 per vCPU-second and $0.000002 per GiB-second, one always-on instance at 1 vCPU and 512 MiB for 730 hours (2,628,000 seconds) is:

  • CPU: 2,628,000 × $0.000018 = $47.30
  • Memory: 1,314,000 GiB-seconds × $0.000002 = $2.63
  • Total: about $49.93/month, before the free tier trims a few dollars.

Roughly ten times a Droplet for the same bot. Cloud Run is reasonable for an HTTP-interactions-only bot, where scale-to-zero genuinely applies and you pay the request price ($0.40 per million, first 2 million free). For a gateway bot it is the most expensive option here.

Fly.io's Free Allowance Is Gone for New Accounts

Fly used to be the default answer for free bot hosting. Not any more. Fly deprecated its plans on 7 October 2024, and free resource allowances survive only for organizations already on those plans. The billing docs are blunt: "There is no 'free account/free tier' on Fly.io" (Fly.io billing).

New accounts get a trial capped at 2 VM-hours or 7 days, whichever comes first, with machines auto-stopping after 5 minutes. Enough to evaluate Fly, not to host anything. Plenty of tutorials still say otherwise — check their dates.

Paid Fly is good value at about $3.19/month for 512 MB in a baseline US region. Machine pricing became region-specific in 2024, and premium regions such as São Paulo and Sydney run higher, so confirm the figure for your chosen region on the pricing page rather than copying a headline number.

Oracle Always Free Is Real, With One Rule That Matters

Oracle's Always Free tier is the only entry here that is both actually free and actually always-on, and the allowance is better than most guides claim: two VM.Standard.E2.1.Micro instances at 1/8 OCPU and 1 GB RAM each (2 GB total, not 1 GB), 200 GB of block storage across boot and block volumes, and 10 TB of outbound transfer a month.

The Arm option is where guides are stale. Ampere A1 was 4 OCPU / 24 GB. It is now 2 OCPU / 12 GB — Oracle's docs read "the first 1,500 OCPU hours and 9,000 GB hours per month for free... For Always Free tenancies, this is equivalent to 2 OCPUs and 12 GB of memory." The reduction was made quietly on the docs page rather than announced, so treat any 4 OCPU / 24 GB figure you see in an older guide as out of date. Even so, 2 OCPU and 12 GB for nothing is more than any Discord bot needs.

Now the rule that catches people. Oracle reclaims idle Always Free compute, and defines idle precisely:

Idle Always Free compute instances may be reclaimed by Oracle. Oracle will deem virtual machine and bare metal compute instances as idle if, during a 7-day period, the following are true:

  • CPU utilization for the 95th percentile is less than 20%
  • Network utilization is less than 20%
  • Memory utilization is less than 20% (applies to A1 shapes only)

Read that against your bot. A Node bot in a handful of servers sits near zero CPU and near zero network for days, meeting all three conditions comfortably. Oracle says only "may be reclaimed" and does not state whether the instance is stopped or destroyed, so plan for the worse case: keep code in git, keep the token in a secrets store, and be able to rebuild the box from scratch.

Oracle is right for a personal bot where a surprise outage costs nothing, and wrong for a bot other people depend on.

And Heroku

Heroku has not been free since 2022, but it needs flagging for a different reason. On 6 February 2026 Salesforce announced that "Heroku is transitioning to a sustaining engineering model focused on stability, security, reliability, and support... rather than introducing new features" (An update on Heroku). Enterprise contracts are closed to new customers; existing ones are honoured.

Be precise about what that is. It is not a shutdown, no end-of-life date was announced, and the post says "there is no change for customers using Heroku today". But you would be picking a platform whose vendor has publicly stopped building new features on it, at $7/month for 0.5 GB — the same as Render Starter, more than a Droplet. For a new bot in 2026 there is no longer a reason to start here.

If you have inherited a bot on Heroku: the $5 Eco plan sleeps web dynos after 30 minutes, but Eco worker dynos do not sleep, since they serve no web requests. A 24/7 worker burns 730 of the 1,000 monthly hours in the shared Eco pool (Eco dyno hours).

Which One Should You Pick

Your situationPickWhy
Learning, personal bot, nobody depends on itOracle Always FreeGenuinely free and always-on. Accept idle-reclamation risk, keep code in git
Prototyping, want zero setupRailway Hobby, $5Deploy from a GitHub repo, no server admin. Not Render Free — no free worker type, and web services spin down after 15 minutes
Small community bot you don't want to babysitRailway Hobby or Render StarterManaged, git-push deploys, no OS patching. $5-7
Cheapest reliable always-onFly.io $3.19 or a $4 DropletLowest real prices here. Fly has no uptime SLA below Enterprise; the Droplet has 99.99%
You want an SLA in writingDigitalOcean Droplet, $499.99%, worded "commits to" rather than "commercially reasonable efforts"
Comfortable on Linux, want headroomHetzner CX23, ~$72 vCPU and 4 GB for the price of a 512 MB managed tier. EU regions only
Slash-commands-only, no gateway eventsCloud Run or any serverlessSet an Interactions Endpoint URL. The only case where scale-to-zero works
Gateway bot on serverlessDon'tmin-instances=1 makes Cloud Run ~$50/month for a $4 workload

The honest summary: this is a choice between $0 (Oracle, with a caveat), $4 (a Droplet, if you can use Linux) and $5-7 (Railway or Render, if you'd rather not). A few dollars a month separates them. Pick on how much server admin you want to do, not on price.

Deploying to Railway

One walkthrough, using the option most people should start with. The same shape applies to Render, Fly and App Platform.

1. Get your package.json right. Two things here go stale fastest:

{
  "name": "my-discord-bot",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "discord.js": "^14.27.0",
    "dotenv": "^17.0.0"
  },
  "engines": {
    "node": ">=24"
  }
}

discord.js 14.27.0 is current as of July 2026, and it requires Node 24.17.0 or newer — so >=24 is the floor regardless. Node 18 went end-of-life on 30 April 2025 and Node 20 went end-of-life on 30 April 2026; Node 24 is the current Active LTS (release schedule). Pinning >=24 gets you a runtime that still receives security patches.

2. Deploy. Sign in with GitHub, create a project from your repo, let Railway detect Node. There is no build config to write for a standard bot.

3. Set environment variables. Add DISCORD_TOKEN and DISCORD_CLIENT_ID in the Variables tab. Never commit these — a leaked token lets anyone run code as your bot.

4. Pick a region. Railway has four: US West (California), US East (Virginia), EU West (Amsterdam) and Southeast Asia (Singapore) (regions). Guides claiming "US and EU only" are out of date. Choose the nearest for deploy and log latency; it will not meaningfully change your bot's responsiveness.

5. Add a database only if you need one. If your bot stores warns, config or leveling data, add Postgres from the dashboard and read DATABASE_URL from the environment. Pin a supported major: PostgreSQL 13 went end-of-life on 13 November 2025, so use 17 or 18 (versioning policy).

To deploy a container instead — required on Cloud Run, optional elsewhere — this is the whole Dockerfile:

FROM node:24-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --omit=dev

COPY . .

# Run as a non-root user
RUN addgroup -g 1001 -S nodejs && adduser -S botuser -u 1001 -G nodejs
USER botuser

CMD ["npm", "start"]

Two details to copy deliberately rather than from a template. Use a current base image — node:24-alpine tracks the Active LTS. And name the user after what it runs; a surprising number of published bot Dockerfiles create a user called nextjs, a reliable tell that nobody read the file they pasted.

Note there is no EXPOSE and no port. A gateway bot does not listen for HTTP. If your host demands an open port, it expects a web service — check whether it will keep a non-listening process alive at all.

Three Things That Cause More Downtime Than Your Host

  • Handle reconnects. Your process will lose its WebSocket. discord.js reconnects on its own, but log shardDisconnect and shardReconnecting so you notice a reconnect loop instead of finding it a week later.
  • Restart on crash. Managed platforms do this for you. On a VPS you need a process manager or a systemd unit with Restart=always. An unsupervised node index.js in a terminal is not hosting.
  • Watch identify limits. You get 1,000 identify calls per 24 hours across all shards. A crash loop can burn through them and get your token reset, turning a small problem into an outage.

Where This Leaves You

If your bot is personal, run it free on Oracle and keep a backup of the code. If people rely on it, spend $4 to $7 a month — that is the entire realistic range for a single-shard bot, and every option in it is fine. What separates them is how much Linux you want to touch, not performance.

Ignore anything telling you one host is 20ms faster than another. Nobody measured that.

Changelog

  • 2026-07-19 — Rebuilt. Replaced unsourced performance figures with each provider's published pricing and SLAs, and repriced every provider from source. Corrected: Railway Pro is a $20/month usage minimum with unlimited seats (not a per-seat charge), and Railway has four regions including Singapore; DigitalOcean App Platform's SLA is 99.95%, not 99.99%; Cloud Run is $0.40 per million requests, not $0.24. Added: Render's free tier excludes Background Workers; Heroku's sustaining engineering model; Hetzner's CX22 retirement and June 2026 price rise; Oracle's Ampere A1 cut and idle-reclamation rule; Fly.io's removed free allowance. Updated Node, discord.js and PostgreSQL versions.
  • 2025-01-10 — First published.

Building the bot itself? Start with our guide to making a Discord bot, or see how to add a music bot if that is the plan.

If your bot posts schedules or reminders, our timestamp generator produces the <t:...> codes that render in every member's own timezone — useful for scheduled events and countdowns. The Unix time converter and snowflake decoder help while debugging.

Prices are list prices published by each provider and read on 19 July 2026; check the linked pages before committing, as they change without notice.

Share this article

Related Articles

Building or scheduling with a bot?

Grab the timestamp codes your bot needs — free, instant, no login.

This website is not affiliated with, endorsed by, or connected to Discord Inc. It's an independent Discord timestamp generator tool created for the Discord community.