BuildPulse vs GitHub-hosted runners
Keep GitHub Actions, change the machine. The same jobs finish 2x faster on BuildPulse runners at half the cost of GitHub-hosted, and the only change is the runs-on label. Every number here is a list price or a public benchmark run.
2x
faster on the same jobs, measured at 4 vCPU
50%
less per build at the least, speed and rate compounded
33%
less per minute at 2 and 4 vCPU, list price to list price
3,000
free base minutes every month, at every size
At a glance
| GitHub-hosted runners | BuildPulse runners | |
|---|---|---|
| Price per minute | $0.006 at 2 vCPU to $0.162 at 64, Linux x64 | $0.004 to $0.128, 21% to 33% less; arm64 18% to 50% less |
| Speed at 4 vCPU | ubuntu-latest, measured | 1.3x to 2.1x faster on Rust, TypeScript and Docker builds |
| Cost per build at 4 vCPU | Measured, list price to list price | 50% to 68% less |
| Free minutes | 3,000 standard-runner minutes a month on Team and Pro for private repos; none on larger runners | 3,000 base minutes a month on every account, at every size |
| Sizes | 2 to 64 vCPU, x64 and arm64 | 2 to 64 vCPU, x64 and arm64 (Graviton), plus Docker builder runners |
| Billing | Per minute, rounded up per job | Per minute, rounded up per job, no minimums and no commitment |
| Config change | None | The runs-on label, per job |
Speed, measured on real projects
We ran the same jobs on GitHub's ubuntu-latest and on a BuildPulse x64-4x, both at 4 vCPU, five runs a side, on October 23, 2026. A job's time is the sum of its phase steps, measured the same way on both sides, and every run is public. The cost columns price each median at the two list prices, so the saving per build compounds the faster finish with the cheaper minute.
| Workload | GitHub-hosted | BuildPulse | Faster | GitHub cost | BuildPulse cost | Per build |
|---|---|---|---|---|---|---|
| Rust test and lintspotify-player, cargo test + clippy | 3m 51s | 1m 52s | 2.1x (52% less time) | $0.046 | $0.015 | 68% less |
| TypeScript install and typecheckopencode, bun install + turbo typecheck | 2m 3s | 1m 4s | 1.9x (48% less time) | $0.025 | $0.009 | 65% less |
| Docker image buildPostHog, no cache | 13m 7s | 9m 48s | 1.3x (25% less time) | $0.157 | $0.078 | 50% less |
Medians of 5 runs a side at 4 vCPU on October 23, 2026: GitHub's ubuntu-latest larger runner against a BuildPulse x64-4x. Cost is each side's list price per minute, $0.012 against $0.008, before any free allowance. Each workload links to the public run.
Method, hardware and every run: the GitHub Actions benchmark and github.com/buildpulse/runner-benchmarks. Rerun it yourself: the workflows are in the repo.
Price per minute, size by size
GitHub charges for larger runners by the minute at a list price per size, and the same is true here. Each row is the same vCPU count and memory on both sides. The per-minute discount is 21% to 33% on x64 and 18% to 50% on arm64; the saving on a build is larger because the build also needs fewer minutes.
Linux x64
| Linux x64 | Memory | BuildPulse $/min | GitHub $/min | Per minute | Free a month |
|---|---|---|---|---|---|
| 2 vCPU · 2x | 8 GB | $0.004 | 33% less | 3,000 vs 3,000 | |
| 4 vCPU · 4x | 16 GB | $0.008 | 33% less | 1,500 vs 0 | |
| 8 vCPU · 8x | 32 GB | $0.016 | 27% less | 750 vs 0 | |
| 16 vCPU · 16x | 64 GB | $0.032 | 24% less | 375 vs 0 | |
| 32 vCPU · 32x | 128 GB | $0.064 | 22% less | 187 vs 0 | |
| 64 vCPU · 64x | 256 GB | $0.128 | 21% less | 93 vs 0 |
Linux arm64
| Linux arm64 | Memory | BuildPulse $/min | GitHub $/min | Per minute | Free a month |
|---|---|---|---|---|---|
| 2 vCPU · 2x | 8 GB | $0.0025 | 50% less | 4,800 vs 3,000 | |
| 4 vCPU · 4x | 16 GB | $0.005 | 38% less | 2,400 vs 0 | |
| 8 vCPU · 8x | 32 GB | $0.010 | 29% less | 1,200 vs 0 | |
| 16 vCPU · 16x | 64 GB | $0.020 | 23% less | 600 vs 0 | |
| 32 vCPU · 32x | 128 GB | $0.040 | 20% less | 300 vs 0 | |
| 64 vCPU · 64x | 256 GB | $0.080 | 18% less | 150 vs 0 |
GitHub-hosted larger runner list prices for Linux, September 2026. BuildPulse prices are the same ones on /pricing. Free a month is BuildPulse against GitHub at that size.
Free minutes, on both sides
GitHub includes 3,000 minutes a month on Team and Pro for private repos, and they cover standard runners only: GitHub's billing docs are explicit that larger runners are charged from the first minute even when quota is left. BuildPulse includes 3,000 base minutes on every account, renewed monthly, and larger sizes draw them proportionally, so the grant is worth the same money whichever size you run: 1,500 minutes at 4 vCPU, 750 at 8, 187 at 32. No credit card is needed to use them.
What the minute includes
Caching
Docker layer, dependency and build caches that survive across runs, with an included storage allowance.
Docker builder runners
NVMe-backed Docker builder runners from 4x to 32x, at the same per-minute price as the standard runner of the same size.
Fixed egress IPs
Runners leave from four fixed addresses you can allowlist today, and a dedicated egress IP is available on request.
Flaky test detection
Every run is parsed for flaky tests and per-test timing. No second tool, no separate bill.
The migration is one line
Change the runs-on label on a job. Steps, actions, secrets, caches and matrix stay as they are. Move one workflow, compare the run times side by side for a day, and move the rest or change the line back.
# .github/workflows/ci.yml jobs: test: - runs-on: ubuntu-latest + runs-on: bp-ubuntu-latest-x64-4x steps: - uses: actions/checkout@v4 - run: npm ci && npm test
Labels follow one pattern, bp-ubuntu-latest-<x64|arm64>-<size>, from 2x to 64x. The GitHub Actions runner page has the setup steps.
Your month, every size
Rather think in minutes than in builds? This is the bill calculator from /pricing. Pick a size and compare a month on GitHub-hosted runners with the same jobs on ours, free allowances taken off on both sides.
vCPU
A month of CI at 10,000 GitHub minutes on 4 vCPU x64
runs-on: bp-ubuntu-latest-x64-4x
GitHub-hosted
$120
10,000 min · none included · 10,000 × $0.012
GitHub charges larger runners from the first minute, even when your plan has quota left.
BuildPulse
$28
5,000 min · 1,500 free · 3,500 × $0.008
Twice the speed, half the minutes.
See the benchmark →You pay
77% less
at 10,000 GitHub minutes a month
$0.008/min, not $0.012/min, for half as many minutes, and the first 1,500 free every month.
| Linux x64 | Memory | BuildPulse | GitHub | Depot | Total vs GitHub |
|---|---|---|---|---|---|
| 2 vCPU | 8 GB | $0.004 | 67% less | ||
| 4 vCPU | 16 GB | $0.008 | 67% less | ||
| 8 vCPU | 32 GB | $0.016 | 64% less | ||
| 16 vCPU | 64 GB | $0.032 | 62% less | ||
| 32 vCPU | 128 GB | $0.064 | 61% less | ||
| 64 vCPU | 256 GB | $0.128 | 60% less |
Per-minute list prices for the same size, September 2026. Depot also charges a monthly plan fee.
3,000 free minutes a month
On every account, renewed monthly. Larger runners use them proportionally faster, so the grant is worth the same whichever size you run.
Flaky test detection included
Every run is parsed for flaky tests and per-test timing. No second tool, no separate bill.
Caching included
Docker layer, dependency and build caches that survive across runs, with no per-GB storage line.
Need your CI to reach a private registry or database behind an allowlist? Our runners leave from four fixed addresses you can allowlist today, and a dedicated egress IP is available on request. Talk to us.
FAQ
How is a minute billed?
Per minute, rounded up to the next whole minute per job, the same way GitHub bills. There are no minimums and no commitment, and the first 3,000 base minutes each month are free on every size: 1,500 minutes at 4 vCPU, 750 at 8.
How many jobs can run at once?
Concurrency comes from a per-organization CPU quota rather than a per-plan seat count, and the quota is raised on request. Running jobs in parallel costs nothing extra; you pay for the minutes they use.
Is arm64 available?
Yes. Every size is available on arm64 (Graviton) under bp-ubuntu-latest-arm64 labels, priced below the x64 size with the same vCPU count: $0.0025 a minute at 2 vCPU against GitHub’s $0.005.
How is a job isolated?
Each job runs on a fresh runner that is discarded when the job ends, so nothing from one job is visible to the next. Your repository secrets stay in GitHub and reach the job the same way they do on a GitHub-hosted runner. BuildPulse runs the fleet; there is nothing to patch or secure on your side.
Does it work on public repositories?
Yes. GitHub asks you to allow self-hosted runners on public repositories first: in your organization’s Actions settings, open Runner groups, pick Default and check “Allow public repositories”.
What if it is not faster on my repository?
Change the line back. The free minutes cover the trial, and nothing else in your workflow moved.
Comparing managed runners instead? See BuildPulse vs Depot. On CircleCI or Semaphore, the same machines are priced next to those vendors' own in the CircleCI and Semaphore runner docs.
Move one workflow and time it
Change the runs-on label on one job and watch the run times next to GitHub's for a day. Everything else in your workflow stays where it is.
3,000 free minutes every month · No credit card required