Day 256 of the year: Programmers' Day. 10% off every month for as long as you keep your server. code DAY256. Claim 10% Programmers' Day: 10%: DAY256 Claim 10%
Skip to content
Bot hosting VPS

A VPS that keeps your bots and scripts running, day and night.

First month $1, then the normal monthly price. One per customer.

A Discord bot. A Telegram bot. Cron jobs, Python and Node scripts that are not allowed to stop, and Playwright workers that have to show up from one fixed IP. For all of that we hand you a KVM VPS with full root, a fixed IPv4, NVMe RAID10 and unlimited traffic, in Amsterdam or New York. Close the laptop, go home. It keeps running.

Fixed IPv4
1 includedplus a /64 IPv6 block
Traffic
Unlimitedno bandwidth bill
Geekbench 6 single-core
2,0002 vCPU dedicated instance
Provisioning
30-60 safter payment
Plan
The S-2, 1 vCPU, 2 GB and 30 GB NVMe, at €6.99 a month ($7.99)
Plenty for a few Discord or Telegram bots plus some cron jobs. Headless browsers? Those want more, see sizing.
OS
Ubuntu 24.04
Python 3.12 straight from apt, Node from NodeSource or nvm. Debian 13 behaves exactly the same.
Process manager
One of systemd, pm2 or Docker
Any of the three brings the bot back after a crash or a reboot. Pick one. Not all three.
Logs
journald, with a hard size cap on it
Or pm2-logrotate. Logs with no cap are how a 30 GB disk usually fills.
Network
A fixed IPv4 that stays glued to the server
Whitelist it once at the APIs you call. Resizes and reboots leave it alone.
Expect
Reconnects after every reboot without you lifting a finger
Restart=always in the unit, plus a bot library that knows how to reconnect.

Transparent pricing

Plans and prices

Monthly price, no setup fee
Day 256 of the year: Programmers' Day. 10% off every month for as long as you keep your server.DAY256Start a VPS with this code
1:2 to 1:4Shared vCPU on EPYC Milan, capped at one to four shares per node, with the node headroom left unsold.
PlanvCPUMemoryNVMeTrafficMonthly1 year
Standard
S-2Standard1vCPU2 GBMemory30 GBNVMe RAID10UnlimitedTraffic$7.99/moFirst month $1$7.19/mo on 1 yearStart for $1
S-4Standard2vCPU4 GBMemory60 GBNVMe RAID10UnlimitedTraffic$13.99/moFirst month $1$12.59/mo on 1 yearStart for $1
S-8Standard3vCPU8 GBMemory120 GBNVMe RAID10UnlimitedTraffic$24.99/moFirst month $1$22.49/mo on 1 yearStart for $1
S-16Standard4vCPU16 GBMemory240 GBNVMe RAID10UnlimitedTraffic$44.99/moFirst month $1$40.49/mo on 1 yearStart for $1
S-32Standard8vCPU32 GBMemory480 GBNVMe RAID10UnlimitedTraffic$84.99/moFirst month $1$76.49/mo on 1 yearStart for $1
S-64Standard16vCPU64 GBMemory720 GBNVMe RAID10UnlimitedTraffic$159.99/moFirst month $1$143.99/mo on 1 yearStart for $1
Dedicated CPU
D-4Dedicated1vCPU4 GBMemory45 GBNVMe RAID10UnlimitedTraffic$37.00/moFirst month $1$31.45/mo on 1 yearStart for $1
D-8Dedicated4vCPU8 GBMemory90 GBNVMe RAID10UnlimitedTraffic$69.00/moFirst month $1$58.65/mo on 1 yearStart for $1
D-16Dedicated4vCPU16 GBMemory160 GBNVMe RAID10UnlimitedTraffic$118.00/moFirst month $1$100.30/mo on 1 yearStart for $1
D-32Dedicated6vCPU32 GBMemory220 GBNVMe RAID10UnlimitedTraffic$215.00/mo$182.75/mo on 1 yearDeploy D-32
D-64Dedicated10vCPU64 GBMemory400 GBNVMe RAID10UnlimitedTraffic$377.00/mo$320.45/mo on 1 yearDeploy D-64
High Memory
H-64High Memory8vCPU64 GBMemory480 GBNVMe RAID10UnlimitedTraffic$249.00/mo$211.65/mo on 1 yearDeploy H-64
H-128High Memory16vCPU128 GBMemory960 GBNVMe RAID10UnlimitedTraffic$459.00/mo$390.15/mo on 1 yearDeploy H-128
H-192High Memory24vCPU192 GBMemory1.4 TBNVMe RAID10UnlimitedTraffic$669.00/mo$568.65/mo on 1 yearDeploy H-192
Prices in USD. Code DAY256 gives 10% off every month for as long as you keep your server, on monthly and yearly terms.

What people run on a bot VPS.

Nearly all of it is one long-running process with a token in an env file. The rest is scheduled work.

Discord bots with discord.py or discord.js

Moderation, music, role management, maybe a little game for the server. What the bot does hardly matters. Underneath, every one of them is holding a websocket open to Discord's gateway, and that connection is the thing that has to stay up. Which comes down to two requirements. Something that restarts the bot the second it dies, and a machine that never goes to sleep.

Telegram bots with python-telegram-bot

Polling bot? Then not a single inbound port is needed. A webhook bot does need HTTPS, and Caddy on the VPS hands you that in one line of config. Either way Telegram keeps seeing the same fixed IPv4, year after year, and that keeps it happy.

24/7 scripts and cron jobs

Say, a price watcher. A feed-to-Slack relay, the nightly report, that one job that cleans up a bucket at 03:00 while everyone is asleep. Cron on a VPS is still the simplest scheduler we know of for this kind of work. Nothing to learn. And journald holds on to the output, so you can read it the next morning.

Playwright and headless Chrome workers

Screenshots for a report, form fills against your own systems, collecting data where the site's terms permit it. But a real Chromium eats memory. Of everything on this page, this is the one workload the S-2 can't carry.

Which plan for this workload.

A chat bot sits idle most of the time. A browser never does. So if there are browsers, size for those.

Setup Plan Why
Two or three Discord or Telegram bots plus some cron jobs S-2 An idle bot takes a few dozen MB, so 1 vCPU is plenty
Bots with Postgres or Redis next to them, a webhook endpoint, a small dashboard S-4 The database gets headroom of its own from 2 vCPU and 4 GB
Two to three headless browsers running at the same time S-8 Count 2 GB per browser, so 8 GB and 3 vCPU carry three
Sustained CPU from morning to night: scraping, image processing, tight polling loops S-8 or D-4 One pinned core that runs at the same speed every hour: D-4 (1 vCPU, 4 GB, 45 GB NVMe) at €34.00 a month ($37.00)
A whole fleet of browsers, or many CPU-bound workers D-8 Four pinned cores on the D-8 (4 vCPU, 8 GB, 90 GB NVMe) at €64.00 a month ($69.00)

Standard plans share vCPUs at a 1:4 ratio, which is fine for bots that wait on a websocket or an API. When a process wants a core for hours on end, a pinned core on a Dedicated plan behaves more predictably. Our published numbers on /vps-benchmarks/ come from a 2 vCPU dedicated instance: Geekbench 6 single-core 2,000, multi-core 6,414. For headless browsers the rule is 2 GB of RAM per concurrent browser; running more than that on a plan swaps or gets processes killed. Start small and resize in place when the bot outgrows the box; RAM and vCPU change with one short reboot, and the IP stays. Disk is rarely the limit unless you keep screenshots or scraped files forever.

Setting it up on BuyVPS.

Step 1: order, create a user, install the runtime

Order an S-2 and pick Ubuntu 24.04. Payment goes through and 30 to 60 seconds later the server is up. Then, please, don't run the bot as root. Create a user, install Python, put the bot in a virtualenv and leave it there. Node people: get a current release from NodeSource or nvm, not the one from apt.

Step 2: keep the token out of the code

Put secrets in a .env file that only the bot user can read. systemd loads it with EnvironmentFile, so the token never appears in the repository or in ps output.

Step 3: a systemd unit that restarts the bot

And that, honestly, is the entire trick to 24/7. There is nothing clever in it. The unit waits until the network is up, restarts five seconds after any exit, crash or clean quit alike, and comes back at boot.

Step 4: or pm2 for Node, or Docker for either

pm2 does the same job for Node projects and writes its own logs. Docker is the better choice when the bot has native dependencies or when you deploy it to more than one machine; restart: unless-stopped in the compose file replaces the unit above.

Step 5: cap the logs

journald grows until it hits its limit. Fine. Except the default limit is a share of the disk, not a fixed number. So give it an explicit cap, because a chatty bot can otherwise fill the 30 GB on an S-2, and we've seen it happen.

Step 6: Playwright workers and cron

Playwright brings its own Chromium along, and the system libraries that go with it. Run the workers under the same kind of unit, one unit for every browser you want going in parallel. Scheduled scripts? Set the server timezone first. Only then add the crontab entry, not the other way round.

For a Node bot, Docker with a memory cap is the tidiest option. The cap turns a leak into a restart instead of a dead server.

Cron jobs get a lock, so a slow run never overlaps with the next one.

Playwright's documentation is at playwright.dev. Keep scrapers lawful: read robots.txt and the site's terms, identify your client honestly, and rate-limit yourself. We do not help with evading blocks, and abuse complaints against a server lead to suspension.

Pitfalls we see, and how to avoid them.

Rate limits and platform terms

Discord rate-limits you. Telegram does too, and both of them ban a bot that spams. Use the rate limiter your library already ships with, back off the moment a 429 comes back, and read the developer terms once, properly, with coffee. Scraping? Same story with robots.txt and whatever terms the site publishes. One more thing. A fixed IP that gets blocked stays blocked, and that IP happens to be yours.

Secrets in the repository

Commit a token to Git and someone else finds it. Not maybe. Every time. So the token goes in the .env file with mode 600, .env goes in .gitignore, and the day a token leaks, even once, you rotate it and get on with your life. Database passwords sitting in compose files? Same treatment, and for exactly the same reason.

Slow memory leaks

A bot that grows a few MB a day gets killed after a month. Watch systemctl status mybot for memory, add MemoryMax= to the unit as a safety net, and restart on a schedule if the library or a dependency is the cause. Headless browsers should be closed after every job, not reused for days.

Timezones

A fresh server runs on UTC. Which is why the "daily at 09:00" reminder goes off at 11:00 in Amsterdam in summer. Set the timezone with timedatectl, or, better, store every time in UTC and convert inside the bot. Cron follows the system timezone. Check it again after every reinstall, because you will forget.

Pick the region closest to your users.

For bots the users are the APIs you talk to and the people who wait for replies. From Amsterdam we measure 9.0 ms to London and 8.5 ms to Frankfurt; from New York 4-7 ms to Philadelphia and 7-12 ms to Washington DC. Prices are identical in both. See Amsterdam and New York.

Amsterdam, for Europe
New York, for North America
See all locations

Questions about hosting bots on a VPS.

Is a VPS better than a free bot hosting service?

Different, yes. A VPS gives you full root, a fixed IPv4, unlimited traffic and no sleep timer, and in return the updates and the process manager are your job. Is that a good trade? For a bot that has to stay online and talk to third-party APIs from one known address, usually, at €6.99 a month, it is.

How many bots fit on the S-2 plan?

A few, without strain. An idle Discord or Telegram bot sits at tens of MB, so two or three of those and a handful of cron jobs live happily on 1 vCPU and 2 GB. Then there is the headless browser. Add one and you move to the S-8, no discussion, because each browser wants about 2 GB for itself and takes it, whatever else happens to be running.

Does the IP address change?

No. Reboots, resizes, none of that touches the IPv4 or the /64 IPv6 block, they stay with the server. So whitelist the IPv4 once at the services you call and forget about it. Need a second address? An extra IPv4 is €5.00 a month plus $10 setup.

Can I run Playwright or headless Chrome?

Yes. On Ubuntu 24.04, playwright install --with-deps chromium pulls in Chromium together with the libraries it needs. Count on 2 GB of RAM per concurrent browser and steady CPU, which for sustained work means S-8 or D-4. And close the browser after each job. People forget that one.

Will you help me scrape a site that blocks me?

No. We host lawful automation, and only that. In practice: robots.txt is respected, the terms of the sites you visit are respected, your client says who it is, and you stay inside the rate limits. Simple rules. But when abuse complaints about a server start landing in our inbox, that server is suspended under our acceptable use policy.

What happens if my bot crashes at night?

Back within seconds. Restart=always in the systemd unit handles it, so does pm2, so does restart: unless-stopped in Docker. A reboot? Covered too, because the unit is enabled at boot. What we would still add is an uptime check or a heartbeat ping. Without one, the bot can restart quietly all night long and you hear nothing about it the next morning.

Ready to deploy

Deploy a measured VPS

From $6.79/mo on a 2-year term. KVM on AMD EPYC, NVMe RAID10, ECC memory. No setup fee, cancel monthly.

30-day performance guarantee. Not satisfied? Full refund, no admin fee. How it works