Skip to content

Cost analysis / Field guide

Inngest vs BullMQ + Durabull: model the actual cost

Inngest and BullMQ are runtime choices; Durabull is an operations interface for Redis-backed BullMQ. A useful cost comparison starts with an equivalent workload and makes each billing unit visible. The examples below use public USD prices reviewed on 20 October 2026, exclude taxes and negotiated discounts, and are estimates rather than vendor quotes.

By DurabullPublished 4 min read6 primary sources
The short answer

A business job is not an Inngest execution. Count runs and steps first, then compare full operating costs rather than a SaaS invoice against a free dashboard.

How many executions is your workload?

Executions = function runs × (steps per run + 1)

6,000,000

Billable executions under this simplified model, before retries or extra steps.

A function run counts once, plus each step. A million five-step runs are six million executions. This models usage, not an overage quote; consult current tier pricing. Official pricing ↗ · Reviewed 20 October 2026.

Translate business work into billed executions

Inngest’s published calculator uses executions = runs × (steps + 1). One function run with five step.run() calls therefore consumes six executions. One million such runs produces six million executions; it is not covered by an allowance of one million executions.

Make a workload inventory before estimating. Separate simple notifications from multi-step workflows, assign a monthly run count to each class, and count the steps actually reached along each branch. A single global average can hide an expensive minority of long workflows. Keep retry and replay behavior explicit and validate the resulting units against a pilot’s billed usage.

Step boundaries also carry operational value. Inngest persists completed step results so a resumed workflow can avoid repeating completed work. Consolidating every operation into one step solely to reduce the count can reduce the precision of recovery. Price the implementation you would actually trust in production.

const workload = [
  { name: 'notifications', runs: 800_000, steps: 1 },
  { name: 'account-onboarding', runs: 200_000, steps: 5 },
]

const executions = workload.reduce(
  (total, item) => total + item.runs * (item.steps + 1),
  0,
)
console.log(executions) // 2800000
A baseline execution model, excluding retries and other metered dimensions.

Separate known plan prices from unknown overages

The published Pro plan starts at $99/month with one million executions. Business starts at $499/month with ten million. Those are plan allowances, not prices per million business jobs. At those exact execution volumes, the base plans cover the execution count, subject to their other limits.

For 100 million executions, this guide does not publish a definitive bill. Inngest describes tiered Pro overage rates that fall from $0.000050 to $0.000015 per execution as volume grows, but the reviewed page does not publish the tier breakpoints needed to reproduce that invoice. Use the current calculator or obtain a quote; do not multiply the lowest advertised marginal rate across every execution.

Keep events, concurrent steps, workers, seats, observability, and any sandbox compute as separate estimate lines. A workload fitting an execution allowance can still exceed another resource limit. Save the dated plan assumptions next to the estimate so a future reader can update them without reconstructing the model.

Build the BullMQ side from measured resources

For Redis-backed BullMQ, estimate Redis capacity and availability, worker compute, network traffic, backups, telemetry, and engineering operations. Durabull’s hosted dashboard is free to start, but that does not make the underlying workload free. Durabull is Apache-2.0 open source; self-hosting it adds its own deployment costs.

Use the same job mix, payload sizes, retention, peak arrival pattern, and recovery target on both sides. Measure CPU time and memory for your processors; a large idle worker fleet and a highly utilized fleet produce very different costs per completed job. Include retained failed jobs when sizing Redis, especially after a prolonged dependency outage.

Distinguish incremental cost from total cost. An existing BullMQ fleet may have spare capacity, making the next workload inexpensive to add. A greenfield comparison must include provisioning and maintaining that fleet. Both are valid questions, but they cannot share one unlabeled savings percentage.

Price recovery and maintenance as scenarios

Build a normal month, a growth month, and an incident month. For each, record successful work, retries, retained failures, peak concurrency, and operator time. Use your own hourly cost assumptions and label them as assumptions. Avoid claiming an industry-wide operational savings rate from a single team’s experience.

A useful worksheet has one row per cost category and separate columns for measured usage, unit price, fixed allowance, and uncertainty. Mark unknown amounts as unknown. A blank price is more honest and actionable than a fabricated zero: it tells you which trial or vendor conversation is still needed.

Include the effort to implement equivalent semantics. If you require persisted multi-step progress, long waits, or coordinated recovery, estimate that implementation on BullMQ rather than comparing only a simple queue consumer with a durable workflow.

Choose based on the work you need to own

Keeping BullMQ is attractive when you already have reliable processors and want better operational visibility. Inngest is attractive when its workflow model removes work your team would otherwise build and maintain. The right outcome can be to retain existing queue workloads while evaluating a new orchestration model for a separate feature.

Before a migration decision, implement one representative workflow, cause a controlled failure, recover it, and review the resulting usage and operational effort. A small observed comparison is more decision-useful than projecting a headline unit price across a hundred million hypothetical jobs.

Common questions

How many Inngest executions are one million five-step runs?

Using the published runs × (steps + 1) formula, the baseline is six million executions. Validate additional retries, replays, and other usage dimensions against your actual workload and plan.

Does Durabull replace Inngest?

No. Durabull observes and operates Redis-backed BullMQ. Inngest provides a different execution and orchestration model. Moving between runtimes requires application work.

Is BullMQ always cheaper?

No universal result follows from the public prices. Include Redis, worker compute, availability, observability, and engineering effort, then compare equivalent behavior and workload.

Sources & review

Written by Durabull. Reviewed against the references below and Durabull’s implementation. Pricing examples are documented models, not measured benchmarks or vendor quotes.

Suggest a correction if a feature, price, or documented behavior has changed.

Compare the options

Keep reading

Connect Redis. Queues appear.

Inspect your Redis-backed BullMQ queues in one place. Hosted Durabull is free to start.