Error tracking is one of the few pieces of production tooling nobody argues about: an unhandled exception in a checkout flow has to reach an engineer with a stack trace attached, not sit in a log file nobody greps. What teams argue about is the bill, because nearly every hosted vendor meters raw event volume, and one retry loop or bad deploy can burn a month of quota in an afternoon.
Two things changed that calculation in 2026. Sentry's Team plan includes 50,000 errors per month at $26 with annual billing, and everything past that is priced per event. And Highlight.io, one of the better-funded open-source challengers, shut its own service down on February 28, 2026, requiring every customer to repoint their SDK snippet at LaunchDarkly Observability before March 1. Picking an error tracker is now partly a bet on who is still running the service in two years.
What Actually Pushes Teams Off Sentry
Sentry is a good product; the reasons teams leave are consistent.
Billing is metered on events you do not control. Team ($26/mo) and Business ($80/mo) include the same 50,000 errors, so the extra money buys features, not headroom. A noisy third-party script can multiply your event count without changing how many real bugs you have.
Self-hosting is heavy. Sentry publishes a self-hosted distribution, but its own docs ask for 4 CPU cores, 16 GB of RAM plus 16 GB of swap (32 GB recommended), and 20 GB of disk, spread across Kafka, Redis, ClickHouse, and more. That is a real infrastructure commitment for a team that wanted a stack trace inbox.
Then there is the license. Self-hosted Sentry ships under the Functional Source License: run it internally anywhere, it converts to Apache 2.0 after two years, but you cannot resell it as a service. That is fair source, not OSI open source, which matters if compliance or your product plans depend on the difference.
Two Kinds of Replacement
Drop-in replacements speak Sentry's ingestion protocol, so you keep the official Sentry SDK and change one environment variable, the DSN. GlitchTip and Bugsink both work this way, and moving between them is another one-line change.
Platform moves replace the SDK and the mental model. PostHog attaches exceptions to session replay it already records, SigNoz treats errors as one signal inside OpenTelemetry traces, and Honeybadger and BugSnag are their own hosted products. More setup work, more context afterward.
GlitchTip
GlitchTip is the closest thing to a straight swap and the only tool here that is unambiguously open source: the backend is MIT licensed. It accepts events from the official Sentry SDKs, so an app already instrumented for Sentry needs a new DSN and nothing else.

Self-hosting is free and runs on PostgreSQL, Redis, and Celery workers: several services, but nothing like Kafka and ClickHouse. Hosted plans are the cheapest published tiers here at volume, and uptime monitoring is included. You give up performance monitoring, session replay, and distributed tracing.
Pricing: Self-hosted free (MIT) · Hosted free 1K events · $15/mo 100K · $50/mo 500K · $250/mo 3M
Bugsink
Bugsink takes the same protocol compatibility and optimizes for operational simplicity. It runs as a single Docker container and defaults to SQLite, so there is no Redis, no queue, and no separate frontend to babysit. For a small team, that is the shortest path to error tracking on a $5 VPS.

The scope is narrow: capture the error, show the stack trace with local variables at the point of failure, group similar events, stop there. Read the license before standardizing on it. Bugsink is source-available rather than open source, shipping under the PolyForm Shield License 1.0.0, which permits self-hosting and internal use but forbids building a competing product.
Pricing: Self-hosted free (PolyForm Shield) · Hosted free 15K events · $16/mo 75K · $50/mo 600K · $158/mo 3M
Honeybadger
Honeybadger suits teams consolidating rather than self-hosting. Error tracking sits alongside logging, uptime checks, cron and job heartbeats, and what the company calls Just Enough APM, on one bill.

Pricing mirrors Sentry's almost exactly, with Business buying 180-day retention instead of 90. Overage runs $0.0003 per notification on Team and $0.0006 on Business, and it keeps processing to 125% of your limit before stopping, a friendlier failure mode than a hard cutoff mid-incident. SDK coverage leans toward Ruby, Elixir, PHP, and Python, so Rails shops land here most naturally.
Pricing: Free 5K errors · $26/mo 50K (Small Team) · $80/mo 50K with 180-day retention (Business)
BugSnag
BugSnag, now part of SmartBear, is the pick when the errors you care about happen on a phone. Its iOS, Android, and React Native SDKs are more mature than most competitors' mobile support, and its stability score gives release engineers one number to gate a rollout on.

The free tier is 7,500 events and 1 million spans per month for one user across 50+ platforms. Paid Select and Preferred tiers scale from 50,000 to 3 million events on a slider rather than a fixed list price, so budget from a quote. For a web-only backend this is more product than you need; on a mobile release train, release health justifies it.
Pricing: Free 7.5K events (1 user) · Select and Preferred scale 50K to 3M events · Enterprise custom
PostHog
PostHog comes at this from the other direction. Because it already captures product analytics, session replay, and feature flags, every exception arrives attached to the user who hit it and a replay of what they were doing.

The free allowance is the most generous here: 100,000 exceptions per month, no credit card. PostHog's own docs work the example, 200,000 exceptions costs $37.00, because the first 100,000 are free. Self-hosting is an MIT-licensed Docker Compose deployment, but it is officially unsupported and limited to free-tier features, so treat it as a hosted product with an escape hatch.
Pricing: Free 100K exceptions/mo · then $0.000370/exception to 325K · $0.000140 to 10M · $0.000115 above
SigNoz
SigNoz is the choice when the real problem is that errors, traces, logs, and metrics live in four different tools. It is OpenTelemetry-native, so you instrument once and keep the data portable if you swap backends later.

The core is MIT licensed outside the enterprise directories and self-hosting is free, though SigNoz Cloud has no free tier. The tradeoff is directness: a dedicated tracker groups exceptions and surfaces local variables out of the box, while an observability platform gives you the whole request path but asks you to build the error views yourself.
Pricing: Self-hosted free (MIT core) · Cloud from $49/mo including $49 usage · $0.30/GB logs and traces
Side-by-Side Comparison
| Tool | License | Sentry SDK compatible | Self-host footprint | Entry price |
|---|---|---|---|---|
| Sentry | Functional Source License | Native | 4 cores, 16 GB RAM + swap | Free 5K · $26/mo 50K |
| GlitchTip | MIT | Yes | Postgres, Redis, Celery | Free 1K · $15/mo 100K |
| Bugsink | PolyForm Shield 1.0.0 | Yes | Single container, SQLite | Free 15K · $16/mo 75K |
| Honeybadger | Proprietary | No | Hosted only | Free 5K · $26/mo 50K |
| BugSnag | Proprietary | No | Hosted only | Free 7.5K events |
| PostHog | MIT (self-host unsupported) | No | Docker Compose, free tier only | Free 100K exceptions |
| SigNoz | MIT core + enterprise dirs | No (OpenTelemetry) | ClickHouse-backed stack | Self-host free · Cloud $49/mo |
Do the Math on Your Own Volume
Pricing pages are hard to compare because they meter different units: Sentry and Honeybadger sell error quota, PostHog meters per exception, SigNoz bills ingested gigabytes. This script prints the cheapest published plan for each at your monthly event count, using the August 2026 numbers above.
JavaScript// error-tracking-cost.mjs - compare published error tracking plans at your volume. // Usage: node error-tracking-cost.mjs 250000 const events = Number(process.argv[2] ?? 250_000) // Published plan tiers: [monthly USD, included events]. Verified August 2026. const PLANS = { "Sentry Team": [[26, 50_000]], "Sentry Business": [[80, 50_000]], "Honeybadger Team": [[0, 5_000], [26, 50_000]], "GlitchTip Cloud": [[0, 1_000], [15, 100_000], [50, 500_000], [250, 3_000_000]], "Bugsink Cloud": [[0, 15_000], [16, 75_000], [50, 600_000], [158, 3_000_000]], } // PostHog meters per exception instead of selling quota tiers. const POSTHOG_TIERS = [ [100_000, 0], [325_000, 0.000370], [10_000_000, 0.000140], [Infinity, 0.000115], ] function postHogCost(volume) { let cost = 0 let floor = 0 for (const [ceiling, rate] of POSTHOG_TIERS) { if (volume <= floor) break cost += (Math.min(volume, ceiling) - floor) * rate floor = ceiling } return cost } const rows = Object.entries(PLANS).map(([name, tiers]) => { const fit = tiers.find(([, quota]) => quota >= events) return [name, fit ? `$${fit[0]}/mo` : "no published tier", fit ? `${fit[1].toLocaleString("en-US")} events` : "quote/overage"] }) rows.push(["PostHog", `$${postHogCost(events).toFixed(2)}/mo`, "metered per exception"]) rows.push(["GlitchTip self-hosted", "$0 + server", "hardware limited"]) rows.push(["Bugsink self-hosted", "$0 + server", "hardware limited"]) console.log(`\n${events.toLocaleString("en-US")} error events per month\n`) for (const [name, price, note] of rows) { console.log(` ${name.padEnd(23)} ${price.padEnd(18)} ${note}`) } console.log()
Running it at 250,000 events per month prints this:
text250,000 error events per month Sentry Team no published tier quote/overage Sentry Business no published tier quote/overage Honeybadger Team no published tier quote/overage GlitchTip Cloud $50/mo 500,000 events Bugsink Cloud $50/mo 600,000 events PostHog $55.50/mo metered per exception GlitchTip self-hosted $0 + server hardware limited Bugsink self-hosted $0 + server hardware limited
Above 50,000 errors a month, Sentry and Honeybadger stop having a published price, while GlitchTip and Bugsink still list a flat number. PostHog stays free until 100,000 exceptions, which covers a lot of production apps outright. As a sanity check, the script returns $37.00 for PostHog at 200,000 exceptions, matching the worked example in PostHog's own pricing docs.
How to Migrate in About 20 Minutes
With a drop-in replacement the migration is short. This order avoids a coverage gap.
- Stand up the new backend. One container with SQLite for Bugsink, or Compose with PostgreSQL, Redis, and a Celery worker for GlitchTip. Create a project and copy its DSN.
- Point staging at it first. Change
SENTRY_DSNin staging only. Leave application code alone: the official Sentry SDK talks to both backends. - Force a test exception. Throw something deliberate in a staging route and confirm it lands grouped, with a readable stack trace.
- Upload source maps. The step people skip, and the reason production JavaScript traces come back minified. Verify a front-end error resolves to real file names and lines.
- Recreate alert routing. Rebuild Slack, email, or webhook rules and fire one to confirm delivery.
- Run both in parallel for one billing cycle. Keep Sentry live on production while the new backend ingests the same traffic, then compare event counts and grouping.
- Cut over and downgrade. Switch production DSNs, watch one deploy cycle, then downgrade the old plan rather than deleting it so historical issues stay readable.
Protect the parallel-run step. Grouping behavior differs between backends, and a tool that splits one bug into forty issues wastes more time than it saves in fees.
Which One Should You Pick?
For the smallest change plus a real open-source license, run GlitchTip: MIT, Sentry SDK compatible, cheapest published tiers at 500,000 events and above. For error tracking on one box with no moving parts, run Bugsink, accepting the PolyForm Shield noncompete as the price of that simplicity.
If you already pay for PostHog, turn on error tracking before evaluating anything else. Shipping mobile apps makes BugSnag worth the premium for release health. Rails teams wanting logs, uptime, and cron monitoring on one invoice should pick Honeybadger. If your real complaint is four disconnected tools rather than the bill, SigNoz and OpenTelemetry solve the right problem.
Conclusion
Sentry is still the most complete product here, and most teams leaving it go over event-metered pricing above 50,000 errors per month or the 16 GB self-hosting floor, not missing features. GlitchTip and Bugsink make that exit cheap because they speak the same protocol, so the migration is a DSN change plus source maps. Price your real volume with the script above, and weigh operational risk alongside cost: Highlight.io's users spent early 2026 rewriting SDK snippets on someone else's deadline, a cost no pricing page lists.
Related DevToolLab Tools
- Source Map Decoder - check that a source map actually resolves a minified frame to real file names before you trust your new error tracker's stack traces.
- HAR File Analyzer - open the HAR from a failing session and inspect the exact request that produced the exception your tracker just grouped.
- Latency Percentile Calculator - compute p50, p95, and p99 from raw samples when deciding whether a spike is an error problem or a performance one.
- Uptime SLA Calculator - convert an availability target into allowed downtime per month so your alert thresholds match the SLA you promised.
Related Guides
- Best AI Bug Detection Tools for Development Teams - the AI layer that root-causes the errors your tracker collects
- Best Static Code Analysis Tools - catch the mechanical bugs before they ever reach an error tracker
- Best AI Code Review Tools 2026 - the pull request stage, one step earlier in the same pipeline
- OpenTelemetry for Node.js - the instrumentation standard behind the SigNoz option
