My test storefront throws the same ApiError for four different failed requests. Honeybadger put all four in one group, while Raygun split just one of them into four groups, one per book ID in the URL. Neither tool was broken. They simply read errors in different ways, and that difference shows up again and again in this comparison.
Beyond grouping, the two products are built around different ideas. Raygun combines crash reporting with real user monitoring and application performance monitoring, while Honeybadger brings error tracking, logs, uptime monitoring, and status pages into one platform.
To see how those differences affect debugging, I connected both tools to the same Node.js bookstore application. I introduced backend exceptions, browser errors, failing API requests, and performance problems, then tested how each platform handled them across three releases.
Honeybadger caught every error I introduced, including an unhandled promise rejection that Raygun missed in my setup. Its Insights logs also helped me identify a slow database query after a bad deployment. Raygun performed better at measuring page performance and recording when previously resolved errors returned.
Neither tool handled error grouping perfectly, as the opening example shows. Raygun also created extra issues for the same error when payment amounts changed.
This comparison walks through those results using screenshots from my tests in October 2026. You'll see how the tools compare on setup, error capture, debugging, grouping, real user monitoring, performance, release tracking, AI capabilities, and pricing.
Raygun vs Honeybadger: Results at a glance
The table below summarizes what I observed during testing. These verdicts reflect my Node.js application and configuration, rather than every framework or deployment scenario.
Area
Better in my test
Why
Setup
Honeybadger
One project for frontend and backend, with simpler onboarding
Error capture
Honeybadger
Captured the unhandled promise rejection Raygun missed
Debugging
Honeybadger, narrowly
Easier source-map uploads on the trial and clearer user context
Error grouping
Neither
Honeybadger merged different failures; Raygun split identical bugs
Real user monitoring
Raygun
Page timing, request timing, and Core Web Vitals
Session replay
Neither
Neither provided video replay in this test
Release tracking
Raygun, narrowly
Clearer regression history and release-specific information
Performance troubleshooting
Mixed
Raygun measured performance; Honeybadger's logs exposed the slow query
Logs and events
Honeybadger
Insights and BadgerQL for querying application data
Uptime and status pages
Honeybadger on availability
Included in its plans, but not tested
AI-assisted debugging
Not compared
Neither AI feature was tested
Starting price
Honeybadger
Free plan and a less expensive entry-level subscription
How I tested Raygun and Honeybadger
I built a small online bookstore called monitoring-lab using Express 5, SQLite, and a Vite frontend. The application includes a deliberately unreliable price service and a background reporting job that fails every minute.
Rather than testing each platform with unrelated sample errors, I connected both to the same application code and introduced failures whose causes I already knew.
The test covered several types of problems:
Backend errors: An invalid coupon causing a TypeError, a missing book, an out-of-stock exception, a failing price service, an unhandled promise rejection, and a failing background job.
Frontend errors: A broken wishlist button and API requests that fail with different HTTP status codes.
Performance problems: Slow database queries, slow pages and endpoints, and a missing cover image.
Release management: Previously resolved errors returning after deployment and new errors introduced by a faulty release.
A traffic script simulated three users, alice, bob, and carol, shopping through the API and in headless Chromium.
The three releases
I deployed three versions of the application to see how each tool behaved as the code changed.
Release
What I tested
1.0.0
Initial setup, browser and backend error capture, source maps, breadcrumbs, context, and page monitoring
1.1.0
A previously resolved coupon error returning in a new release
1.2.0
A faulty deployment introducing a slow checkout query and a payment error affecting approximately one in five payments
The final release was particularly useful because it introduced two different problems.
One produced a new exception that error trackers could capture. The other made checkout dramatically slower, without necessarily generating an exception.
This allowed me to investigate whether the platforms could identify both problems and help explain their causes.
SDKs and test limitations
I used the following integrations:
Platform
SDKs
Raygun
raygun 2.2.10 and raygun4js 3.1.4
Raygun APM
raygun-apm and its monitoring agent
Honeybadger
@honeybadger-io/js 6.17.0 on the frontend and backend
A few details matter when interpreting the results:
Both platforms ran on trials. Raygun's trial restricted the Personal Access Token needed for some API operations, so source-map uploads and deployments required manual steps.
The traffic runs were separate. Both tools monitored the same failure scenarios, but their event totals aren't directly comparable.
The frontend reported production while the backend reported development. This affected environment-specific deployment settings.
Only Node.js and Express were tested. Error grouping, instrumentation, and APM capabilities can behave differently in other frameworks.
Some features weren't tested. I didn't evaluate Honeybadger's uptime monitoring, check-ins, or status pages, either platform's alert delivery, or their AI debugging features.
Setup and onboarding
Getting both tools running exposed one of the first practical differences.
Honeybadger allowed me to use a single project and API key for the browser and backend. Raygun required a separate application for each side.
Honeybadger: One project, one API key
Honeybadger's setup page displayed the project key directly in the installation snippet and waited for the first error.
I used the same project to collect frontend and backend errors, which meant both appeared in one error list.
There was one configuration detail that initially prevented backend errors from arriving.
Honeybadger skips reporting from the development environment by default. Because my Express server ran in that environment, I needed to explicitly enable reporting:
reportData: true
Once configured, the backend began reporting errors normally.
Raygun: Separate applications and a browser initialization issue
Raygun organizes monitoring around applications, each with its own API key, settings, and error list.
I created one application for the Express API and another for the storefront.
The creation form also controls notification defaults. New-error notifications, daily summaries, and weekly Real User Monitoring emails were enabled by default.
Onboarding proceeded one product at a time, waiting for an initial event before moving forward:
Crash Reporting already has a green check here, while Real User Monitoring is still waiting for its first data. You can't leave this step until something arrives, so I sent a test error with curl to move on.
The browser integration required additional work.
In my storefront, the monitoring code loaded after the window's load event. The raygun4js initialization path I used waited for that event, so the SDK never completed initialization.
I fixed this by queuing calls using the approach shown in Raygun's CDN snippet and importing the library after the page had loaded.
Once I made that change, browser errors started arriving.
This was specific to my application's loading order, but it was an unexpected obstacle that Honeybadger didn't present.
Setup comparison
Area
Raygun
Honeybadger
Project structure
Separate applications for frontend and backend
One project for both
API keys
One per application
One shared project key
Backend setup
Worked after configuration
Required reportData: true in development
Browser setup
Required a load-order workaround in my app
Worked without the same issue
Onboarding
Product-by-product setup
Single project setup
Overall experience
More configuration required
Simpler
Verdict: Honeybadger. Its single-project setup was simpler for an application with both a frontend and backend. Raygun required separate applications and an initialization workaround in my configuration.
Error capture
Both tools successfully reported errors from the browser and server, but they didn't capture exactly the same set of failures.
Honeybadger caught every deliberately introduced error in my test. Raygun missed one unhandled promise rejection.
Honeybadger: All seeded errors arrived
Honeybadger's error list contained eight groups covering the browser and backend.
Each row provides an occurrence count, a small activity chart, an assignment control, and an option to resolve the issue.
The combined list made it easy to see failures across both parts of the application without switching projects.
More importantly, Honeybadger captured the unhandled promise rejection from the recommendation engine.
After Honeybadger reported the rejection, my Express application attempted to send another response and logged ERR_HTTP_HEADERS_SENT.
The server continued running, but the additional error suggests that the interaction between the reporting handler and the application's error-handling flow needs attention.
Raygun: One error missing
Raygun's API application showed five error groups.
It captured the other backend failures, but the unhandled promise rejection containing the message "Recommendation engine timed out" never appeared.
I had enabled uncaught exception reporting, but that didn't resolve the problem in my configuration.
This doesn't establish that Raygun cannot capture unhandled promise rejections in Node.js generally. It does mean the error wasn't captured by the integration I tested.
Error capture comparison
Test
Raygun
Honeybadger
Browser JavaScript errors
Captured
Captured
Backend exceptions
Captured
Captured
Handled errors
Captured
Captured
Unhandled promise rejection
Missed in my setup
Captured
Browser and backend error list
Separate applications
Combined
Integration side effects
None observed during initial capture
Additional ERR_HTTP_HEADERS_SENT log
Verdict: Honeybadger. Both captured the main browser and backend exceptions, but Honeybadger caught one additional failure and displayed errors from both sides in a single project.
Debugging an error
Capturing an exception is only the beginning. The more useful question is whether the platform gives you enough information to understand why it happened.
I compared source maps, user context, request details, and breadcrumbs in both tools.
Source maps
Production JavaScript is commonly bundled and minified, which makes raw stack traces difficult to read.
Source maps translate those stack traces back to the original source files and line numbers.
Both platforms supported source maps, and both eventually identified the correct lines in my storefront.
The difference was how much work it took to upload them.
Honeybadger's source-map API accepted the ordinary project key, the same key used for reporting errors.
After uploading the maps, the wishlist and API errors pointed to their original source locations with surrounding code:
src/api.js:29:28 is highlighted among its neighbouring lines, with the calling frame in pages.js below it, so you can read the failure without opening your editor.
Raygun's source-map API required a Personal Access Token that wasn't available on my trial.
Until the maps were in place, Raygun's storefront errors pointed into minified code:
A frame like index-tWfydWxy.js:2:2762 tells you nothing about where the bug lives. To fix that, I uploaded each source map manually through the JavaScript Source Map Center. Every upload starts without a label:
Each row reads "Please enter resource URL here", so you type the full URL of every file by hand. Once labelled, the center looks like this:
Each entry pairs a generated JavaScript file with the URL from which the browser loads it.
Because my build filenames changed between releases, I needed to repeat this process after each build.
I also accidentally swapped two file labels during testing, which made troubleshooting more difficult.
Once the mappings were correct and I reprocessed the error, Raygun displayed the original browser source locations as accurately as Honeybadger:
The frame now reads pages.js:122, with lines 119 to 125 shown and the failing line highlighted.
Neither platform showed inline source code for the backend frames in this test. Raygun provided locations such as server.js:150, while Honeybadger provided more precise coordinates such as server.js:150:45.
Understanding who encountered the error
Honeybadger's error page separates user information and request parameters into clearly labeled sections.
In this example, user_email and user_id identified carol as the affected user.
The Params section contained the checkout request body, so I could see what she submitted when the error occurred.
Honeybadger also provided an "Email user" action directly from the error page.
Raygun displayed similar information, but organized it differently.
Its header showed the total number of error instances, affected users, and first and last occurrence times.
Additional information appeared under tabs for HTTP requests, environment details, custom data, and breadcrumbs.
Raygun also linked affected users to its Customers view, where you could investigate their activity across sessions.
Both approaches were useful, although Honeybadger made the relevant request and user fields easier to read together.
Breadcrumbs and request context
Breadcrumbs record the events leading up to an error.
They can show navigation, clicks, API requests, and application events that help explain what happened before an exception.
Both tools automatically captured useful browser activity. Raygun's storefront breadcrumbs recorded clicks, route changes and every request opening and finishing:
Honeybadger's browser breadcrumbs covered the same ground, with selectors on clicks and URLs on requests:
Both also kept server breadcrumbs mostly scoped to the request being investigated.
Here is Honeybadger's server view for a failed checkout:
The breadcrumbs show the checkout starting and the book being found before the failure.
That is useful because it narrows down where the request stopped progressing.
Raygun's server breadcrumbs for the same kind of request were cleanly scoped too:
POST /checkout, "checkout started" and "book found" appear with nothing from other shoppers. In Honeybadger, I observed one case where a breadcrumb from 51 seconds earlier appeared on a later error.
This was unusual in my test, but it means Honeybadger's request-level context wasn't completely isolated in every case.
Connecting frontend and backend errors
I also wanted to know whether either platform could connect a failed browser request to the backend exception responsible for it.
Neither did. In Raygun, browser and backend errors appeared in separate applications.
Honeybadger kept them in the same project, but the corresponding frontend and backend errors remained independent entries.
Having both errors visible in one list is convenient, but it isn't the same as having a distributed trace linking them.
Debugging comparison
Capability
Raygun
Honeybadger
Browser source maps
Accurate after manual upload
Accurate after API upload
Source-map automation on trial
Restricted by Personal Access Token
Available with project key
Server stack locations
File and line
File, line, and column
User information
Customers view and error tabs
Labeled user fields
Request context
HTTP request and custom data tabs
Labeled Params and context
Browser breadcrumbs
Captured
Captured
Server breadcrumbs
Request-scoped in my test
Mostly scoped, with one stray entry
Frontend-to-backend error linking
Not observed
Not observed
Verdict: Honeybadger, narrowly. Its source maps were easier to upload during the trial, and its labeled user context was convenient. Raygun provided comparable browser stack traces and useful breadcrumbs once configured. Neither connected frontend failures directly to their backend causes.
Error grouping
Error grouping determines how many issues appear in your dashboard.
Ideally, repeated occurrences of the same underlying bug should appear together, while unrelated failures should remain separate.
Grouping can fail in two directions:
Over-grouping: Different problems are combined into one issue, hiding distinct causes.
Over-splitting: One underlying bug produces several issues, cluttering the dashboard.
My tests exposed both problems, but in different platforms.
Honeybadger merged four different failures
The storefront used a shared API helper that threw ApiError for failed requests.
I introduced four distinct failures:
Request
Failure
Order tracking
HTTP 404
Checkout
HTTP 500
Broken book lookup
HTTP 500
Price lookup
HTTP 502
All four failures came from the same helper function, but they represented different problems in the application.
Honeybadger combined them into one group.
The group title showed "GET /orders/tracking", but the same issue contained failed checkout, book, and price requests.
The displayed title also changed depending on the most recent occurrence.
This happened because the failures shared an error type and throwing location, which were important factors in Honeybadger's default grouping behavior in my setup.
The consequence is significant: one issue in the dashboard didn't necessarily represent one underlying bug.
A developer could resolve or deprioritize the group without realizing it contained unrelated failures.
Raygun split one failure into four groups
Raygun behaved differently.
Instead of merging the broken book requests, it created a separate error group for each book ID.
The same underlying failure appeared separately for requests involving:
/books/0
/books/404
/books/99
/books/1234
These weren't four different bugs. They were occurrences of the same broken request pattern with different identifiers.
The changing URL appeared in the error message, and the grouping behavior suggests that message content contributed to the split.
However, there was an important inconsistency: an order-tracking error also contained a changing identifier in its URL, yet Raygun kept those occurrences together.
That means I can't attribute all its grouping decisions to message text alone.
What happened after the code changed?
Release 1.2.0 introduced a new payment failure and changed some existing stack traces.
This gave me another opportunity to examine grouping consistency.
Error after release 1.2.0
Honeybadger
Raygun
New payment error
One group across different amounts
Two groups based on payment amounts
Coupon error
Original group reopened
Original group plus one new group
Out-of-stock error
Original group reopened
Original group plus two new groups
Raygun's payment grouping illustrates the problem.
"Payment gateway rejected charge of 44 USD" and "Payment gateway rejected charge of 35.5 USD" appeared as separate issues, despite sharing the same exception class and underlying cause.
Raygun also created additional groups for existing errors after the stack traces changed.
Honeybadger handled those changes more consistently. Its new payment error stayed in one group across every amount:
All 7 notices share one group, linked "after deploy 1.2.0", and the returning errors came back in their original groups with no duplicates.
Which grouping approach is better?
Neither default worked perfectly for my application.
Honeybadger was more stable across releases, but its tendency to combine errors from a shared helper could hide unrelated problems.
Raygun separated some distinct failures more effectively, but dynamic message values and code changes produced duplicate issues.
Both products provide ways to manage grouping. Honeybadger supports merging issues, while Raygun offers custom grouping controls.
The important point is that neither default should be accepted without testing how your application constructs errors.
Error grouping comparison
Test
Raygun
Honeybadger
Four failures from one API helper
Kept distinct failure types apart
Merged all four
Same book error with changing IDs
Split into four groups
Kept in shared ApiError group
Payment error with different amounts
Split into two groups
One group
Existing coupon error after code change
Created an additional group
Reopened original group
Existing out-of-stock error after code change
Created two additional groups
Reopened original group
Main weakness
Duplicate groups for the same bug
Unrelated failures grouped together
Grouping controls
Custom grouping
Merge action
Verdict: Neither wins outright. Honeybadger handled returning errors more consistently, while Raygun separated different failures from the shared API helper. Each platform made grouping mistakes that could complicate an investigation.
I also tested the same release scenario in Better Stack to see how its error grouping behaved.
The new payment failure stayed in one error group containing 10 exceptions, despite the changing payment amounts.
Better Stack also showed the failing source code directly on the error page.
In the release view, the faulty version contained two newly reported errors, while the coupon error remained grouped across releases.
That was a cleaner result for this particular release, although grouping behavior can differ with other error types and frameworks.
Raygun offers a separate Real User Monitoring (RUM) product that measures how your application performs for actual visitors.
Honeybadger doesn't provide an equivalent RUM product.
Raygun: Detailed browser performance monitoring
Raygun RUM collects page-load times, request performance, and Core Web Vitals.
Its dashboard charts metrics including:
Page load time
First paint
Largest Contentful Paint (LCP)
Interaction to Next Paint (INP)
Cumulative Layout Shift (CLS)
Here is the RUM dashboard from my test application:
Raygun also ranked pages and requests by their performance:
The bookstore's slower paths appeared near the top, including book pages at approximately 1.58 seconds, /search requests at 1.49 seconds, and /prices requests at 2.63 seconds.
These were deliberately slow areas of the application, so seeing them surfaced was a useful result.
Tracking individual users
Raygun's Customers view connects errors and activity to individual users.
In my test, alice appeared with 10 sessions and 5 errors.
Opening a session displayed a timeline of visited pages and how long the user remained on each page:
The page shows page views, time on page, error counts and an "Experience" label for the visit.
This gives you useful behavioral context when investigating user-reported issues.
However, the session timeline isn't a video replay.
It doesn't show a visual recording of the user's actions in the way a dedicated session replay product does.
Honeybadger: Error context without RUM
Honeybadger's browser SDK captures errors and breadcrumbs, but it doesn't provide comparable page performance monitoring or session replay.
You can investigate the activity immediately surrounding an error, but you won't get Raygun's page-speed charts, Core Web Vitals, or session-level navigation analysis.
Real user monitoring comparison
Capability
Raygun
Honeybadger
Page-load performance
Yes
No
Request performance
Yes
No native RUM
Core Web Vitals
Yes
No
Performance by route
Yes
No
User session timeline
Yes
No equivalent
Affected-user tracking
Customers view
Error context
Browser breadcrumbs
Yes
Yes
Video session replay
Not observed
Not offered
Verdict: Raygun. Its real user monitoring provides useful visibility into frontend performance that Honeybadger doesn't offer.
For additional context, I also tested session replay in Better Stack.
Unlike Raygun's navigation timeline, Better Stack recorded the session visually and displayed the associated events beside the player.
The event list included requests with status codes, clicks, custom events such as "added to cart", and handled errors with their stack traces.
The same session timeline also contained backend spans for the corresponding requests.
That made it possible to move from a user's interaction to the server activity behind it without manually matching separate error records.
Release tracking helps you answer two common debugging questions:
Did a new deployment introduce this problem?
Has an error that was previously fixed returned?
Both Raygun and Honeybadger supported deployment tracking, but they handled regressions differently.
Recording deployments
Honeybadger accepted deployment information through a single API request using the project key.
Its deployment history listed releases by revision and provided a Compare link for examining changes:
Compare opens a GitHub diff between two revisions, which only works if your repository has matching tags.
Raygun's deployment API required a Personal Access Token, which wasn't available on my trial.
I used the manual deployment form instead.
The form allows you to provide a release version, deployment time, author, email address, commit identifier, and release notes.
My first attempt failed with a Raygun 500 error page after selecting the date through its picker:
I retried with only the version number, and the deployment was recorded successfully.
Honeybadger's deployment API was easier to work with under the trial conditions.
What happens when a resolved error returns?
I used the coupon error to test regressions.
First, I marked the error as resolved. I then deployed release 1.1.0 without actually fixing the underlying problem.
When the error occurred again, a useful monitoring tool should recognize that the supposedly fixed issue has returned.
Both platforms reopened the coupon error.
The difference was how they recorded that event.
Raygun's resolve dialog included an option to resolve the issue in the next version.
Choosing that option opens a dialog with an extra checkbox:
"Discard future occurrences until a newer version is released" is ticked by default, which stops late traffic on the older version from reopening the issue.
Honeybadger used a simpler status control without the same version-specific resolution option:
The toggle reads "Resolved. We'll alert you if this error happens again."
Raygun: A clearer regression history
When the coupon error returned, Raygun marked it active again.
More importantly, the error's activity feed explicitly recorded the reoccurrence.
The feed included "Error reoccurred" and displayed the distribution of occurrences across versions.
Raygun's deployment view also listed the returning coupon error under Regressions:
The coupon error is marked "Resolved in 1.0.0" and active again, which separates a returning bug from a new one.
Honeybadger: The error reopened, but the history was incomplete
Honeybadger also returned the coupon error to Unresolved after release 1.1.0:
The location line says "after deploy 1.1.0", and the row in the list carried no reopened label.
However, its History tab didn't explicitly record the reopening.
The history showed the original occurrence, the resolution, and the previous deployment, but no separate event marking when the error returned.
You could work out what happened from the timestamps and deployment information, but Raygun made the regression easier to identify.
Honeybadger's resolve-on-deploy feature
Honeybadger also offers a setting called "Resolve errors on deploy".
When enabled, a new deployment automatically marks existing open errors as resolved.
Errors that happen again can then return to the active list.
I enabled this setting for the backend environment during the faulty release.
The backend errors cleared immediately.
The browser errors remained because the storefront reported a different environment. A second deployment call cleared those entries as well. Once traffic resumed, everything that still happened came back:
Old errors return as Unresolved next to the new payment error, and none of the rows shows which ones came back and which one is new.
This feature can be useful when you want each release to begin with a clean error list.
However, it also means unresolved problems can temporarily disappear until they occur again. A rarely triggered bug might remain hidden for some time after deployment.
I didn't find an equivalent setting in Raygun during testing.
Release tracking comparison
Capability
Raygun
Honeybadger
Register deployments
Manual on my trial
API with project key
Resolve for the next version
Yes
Not observed
Ignore older-version occurrences
Yes
Not observed
Reopen resolved errors
Yes
Yes
Explicit reoccurrence in error history
Yes
Missing in my test
Regressions in deployment view
Yes
Not observed
Resolve all errors on deploy
Not found
Yes, per environment
Deployment setup difficulty
More manual work on trial
Simpler
Verdict: Raygun, narrowly. Both detected the returning coupon error, but Raygun recorded the regression more clearly in its activity feed and deployment history. Honeybadger offered easier deployment automation during the trial and a useful resolve-on-deploy option.
Performance monitoring
Not every bad deployment generates an exception.
Sometimes your application continues working, but requests become dramatically slower.
I tested this by introducing a slow database operation into checkout in release 1.2.0.
The resulting performance regression was substantial, but the two platforms exposed different parts of it.
Raygun: Page monitoring didn't reveal the checkout regression
Raygun's RUM product includes release comparisons, allowing you to examine performance changes across versions.
I compared releases 1.1.0 and 1.2.0 after introducing the slow checkout operation.
Raygun reported that release 1.2.0 was 34.8% faster than 1.1.0 in median page-load time.
This wasn't necessarily a measurement error.
The page loads hadn't become slower. The regression affected the checkout API request, which wasn't represented by that particular page-load comparison.
The result illustrates why you need to examine the metric behind a performance headline.
A release can improve page-loading metrics while introducing serious problems in backend requests.
Raygun APM: Limited visibility into the slow query
I also tested Raygun's application performance monitoring, during the first release, before the faulty deployment. Its Node.js integration used a profiler package and a monitoring agent running alongside the application:
The overview gave an Apdex of 0.94 and ranked POST /checkout, the price lookups and the search among the slowest requests. The tables underneath were thin:
"Slowest methods" and "Slowest queries" are both empty, and the only external call recorded is Raygun's own error upload. Opening a single trace didn't explain where the time was being spent in my application either.
The call tree mostly contained garbage collection, idle time, and Node.js internals rather than my application functions.
Raygun's Node.js APM also doesn't support the SQLite database used in this test, so it couldn't have shown the slow checkout query in any release.
There was an additional integration issue.
After installing raygun-apm, Crash Reporting began receiving native errors labeled "Unknown error", without useful messages or stack traces:
The coupon and missing-book crashes merged into this one empty group, even with the profiler switched off. Removing the APM package, or setting RAYGUN_APM_CRASH_REPORTING_INTEGRATION=false, restored normal error reporting, which is why I ran the faulty release without APM.
This conflict occurred with the versions and configuration I tested. It shouldn't be assumed to affect every Node.js application, but it is worth testing before enabling both integrations in production.
Honeybadger: Application logs revealed the problem
Honeybadger doesn't provide native distributed tracing or the same request performance monitoring as Raygun APM.
However, its Insights feature can store application logs and events.
My application was already configured to write warnings whenever a database query or payment operation became unusually slow.
I queried those logs using BadgerQL and grouped the results by release.
The results showed:
44 warnings for slow query: SELECT book for checkout
36 warnings for payment gateway slow to respond
Both sets of warnings appeared on release 1.2.0.
That gave me a useful explanation for why checkout performance had deteriorated.
The breadcrumbs attached to the new payment error supported the same finding:
"checkout started" came 2.96 seconds before the error and "book found" 0.55 seconds before, leaving a roughly 2.4-second gap around the book lookup.
Honeybadger identified the problem because my application had already logged it.
Without those warnings, Honeybadger wouldn't have independently measured the slow database operation.
Performance comparison
Test
Raygun
Honeybadger
Browser page performance
RUM measures page speeds and Web Vitals
No equivalent
Checkout request slowdown
Not visible: RUM Compare covers page loads, APM was off
Existing application logs exposed slow operations
Release comparison
Page-load metric reported 34.8% faster
Logs identified warnings only on 1.2.0
Slow SQLite query
Not visible through tested APM integration
Identified through application-written warnings
Request-level tracing
APM available, limited in this setup
No native tracing
Extra instrumentation
APM package and agent
Application logs needed
Integration issue observed
APM disrupted Crash Reporting
No comparable APM integration tested
What this means for performance troubleshooting
Raygun offers actual browser performance monitoring and an APM product, while Honeybadger primarily relies on information your application sends to Insights.
In my test, Raygun's RUM missed the checkout slowdown, and its APM couldn't have exposed the SQLite query responsible.
Honeybadger's logs revealed the problematic operation, but only because the application was already instrumented to report slow queries.
Verdict: Mixed. Raygun offers broader performance measurement, especially in the browser. Honeybadger provided more useful evidence about the specific slow query in this test. Neither delivered a complete request-level investigation with my configuration.
I also investigated the faulty checkout in Better Stack.
The backend used the Sentry SDK configured to send telemetry to Better Stack, without adding a separate Raygun-style APM agent.
The resulting trace waterfall showed the slow book query inside the checkout request.
From the associated error, the "View logs" action opened Live tail filtered to the same request.
The slow-query warning appeared alongside the failure.
This provided both a measurement of where the request spent its time and the corresponding application logs, rather than relying on either source alone.
Honeybadger includes a feature called Insights for storing and querying logs, error notices, and custom events.
Raygun doesn't provide a comparable general-purpose log management product.
Honeybadger Insights
Insights uses BadgerQL, Honeybadger's query language, to analyze collected data. Its event view lists everything that arrived, from log lines to error notices:
App logs and the SDK's own console captures appear side by side here, which is also where the duplicate lines mentioned below come from.
I first used it to investigate the slow database queries from release 1.2.0.
I also tested it with custom business events from the bookstore.
The query returned 55 orders and 1026.76 in checkout revenue, alongside the application's report revenue.
That demonstrated a use case beyond error tracking: querying operational and business events from the same monitoring platform.
I did encounter two usability issues.
First, the BadgerQL editor automatically closed brackets and quotes while I typed, which occasionally interrupted editing.
Second, enabling console capture resulted in each log line being stored twice in my test.
Neither prevented me from analyzing the data, but duplicate ingestion is worth investigating before relying on logs for accurate counts.
Raygun: No general-purpose log store
Raygun provides error context, breadcrumbs, and performance information through its individual products.
However, it doesn't offer an equivalent general-purpose logging and event-query product.
To perform the same log analysis, you would need a separate logging system.
Logs and events comparison
Capability
Raygun
Honeybadger
General-purpose log storage
Not offered
Insights
Query language for logs
Not applicable
BadgerQL
Custom event analysis
No equivalent tested
Supported
Slow-query investigation
Requires another logging tool or supported APM instrumentation
Possible through application logs
Business metrics from events
No equivalent tested
Queried orders and revenue
Duplicate log issue
Not applicable
Console lines duplicated in my test
Verdict: Honeybadger. Insights added meaningful debugging and event-analysis capabilities to the error tracker, although the duplicate console entries need attention.
Uptime monitoring, status pages, and alerts
Honeybadger includes several operational monitoring capabilities that Raygun doesn't offer as equivalent built-in products.
These include uptime checks, check-ins for scheduled jobs, and status pages.
Even Honeybadger's free Developer plan includes an uptime monitor and a status page, according to the pricing information reviewed for this comparison.
That can be useful for a small team that wants to monitor both application errors and service availability without buying separate products.
Raygun focuses on crash reporting, real user monitoring, and application performance monitoring instead.
I didn't test Honeybadger's uptime checks, check-ins, or status page functionality. I also didn't evaluate alert delivery, notification reliability, or escalation workflows in either product.
Operational monitoring comparison
Capability
Raygun
Honeybadger
Uptime monitoring
No equivalent built-in product
Included, not tested
Scheduled job check-ins
No equivalent built-in product
Available, not tested
Status pages
No equivalent built-in product
Included, not tested
Free uptime allowance
None
One monitor
Free status page
None
One
Alert delivery
Not tested
Not tested
Verdict: Honeybadger has the feature-availability advantage. Its implementation and reliability would need separate testing before making a stronger recommendation.
AI-assisted debugging
Both platforms provide ways to investigate errors using AI, but they approach the workflow differently.
I didn't run either platform's AI functionality, so this section covers feature availability rather than firsthand results.
Raygun AI Error Resolution
Raygun offers AI Error Resolution, which lets you send error information to an AI model from within the error interface.
According to its documentation, you need to provide your own OpenAI or Azure OpenAI API key.
That means the workflow is integrated into Raygun, but model usage is associated with your own credentials and provider billing.
Honeybadger and external AI assistants
Honeybadger takes a different approach.
Its "Copy for LLM" feature prepares error information that you can paste into an external AI assistant.
It also provides an MCP server that allows compatible AI assistants to access Honeybadger errors and Insights data.
Raygun also offers an MCP server for integration with external AI tools.
The distinction is primarily where the investigation happens.
Raygun provides an in-product AI entry point, while Honeybadger emphasizes using your own assistant with the monitoring data.
AI capabilities comparison
Capability
Raygun
Honeybadger
In-product AI analysis
AI Error Resolution
No equivalent tested
Model credentials
Your OpenAI or Azure OpenAI key
Your external assistant
Copy error information for AI
Not evaluated
Copy for LLM
MCP server
Available
Available
Root cause accuracy
Not tested
Not tested
Suggested fixes
Not tested
Not tested
Verdict: No winner. Neither AI workflow was tested, so I can't compare the quality of root cause explanations, suggested fixes, or investigation accuracy.
As a separate test, I used Better Stack's AI SRE to investigate the faulty release without giving it access to my repository.
The investigation identified two separate problems.
The first was a slow checkout query, whose median duration increased from approximately 0.13 milliseconds to 2.6 seconds.
The second was the new payment operation, which failed 10 out of 48 times in the faulty release.
AI SRE connected those findings to the release and recommended disabling the problematic change or rolling back.
The investigation took approximately four minutes and displayed a cost of $0.49.
Because I didn't run Raygun's or Honeybadger's AI workflows, this result isn't evidence that Better Stack's AI is universally more accurate. It demonstrates what AI SRE found in this particular test.
Raygun and Honeybadger use substantially different pricing structures.
Raygun charges separately for its core monitoring products, while Honeybadger bundles several capabilities into its plans.
The figures below reflect pricing information collected from the vendors' sites on October 23 and 26, 2026. Plans, quotas, and prices can change, so confirm the current terms before purchasing.
Free plans and trials
Feature
Raygun
Honeybadger
Permanent free plan
No
Developer plan
Free-plan users
Not applicable
1
Free-plan errors
Not applicable
5,000
Free-plan logs
Not applicable
Insights, 50 MB per day
Free uptime monitoring
Not applicable
1 monitor
Free status page
Not applicable
1 status page
Trial
14 days
30-day trial on paid plans
API access during trial
Personal Access Token restricted
Project key usable for source maps and deploys in my test
Honeybadger's free plan makes it easier to start monitoring a small application without committing to a paid subscription.
Raygun provides a trial, but some automation workflows were harder to test because of the Personal Access Token restriction.
Entry-level paid plans
Feature
Raygun Crash Reporting
Raygun RUM
Raygun APM
Honeybadger Team
Monthly billing
$60/month
$120/month
$120/month
$26/month
Annual billing
$40/month equivalent
$80/month equivalent
$80/month equivalent
$286/year
Included usage
100,000 errors
100,000 sessions
100,000 traces
50,000 errors
Users
Unlimited
Unlimited
Unlimited
Unlimited
Error retention
180 days
Not published
Not published
90 days
Logs
Not offered
Not offered
Not offered
Insights, 100 MB/day
Uptime monitoring
Not offered
Not offered
Not offered
5 monitors, checked every 2 minutes
Raygun's Crash Reporting plan also includes an allowance of 5,000 RUM sessions and 5,000 APM traces in the pricing snapshot I reviewed.
Additional crash-reporting errors were listed at $0.001 each.
Honeybadger's Business plan was listed at $80 per month, with 180-day error retention. Additional Insights capacity was available through an add-on.
Comparing the actual cost
For basic error tracking, Honeybadger has a significantly lower starting price.
Its Team plan includes error tracking, Insights, and operational monitoring features in the same subscription.
Raygun's Crash Reporting product is more expensive at its entry tier, but it also includes more error occurrences and longer error retention.
The comparison changes when you need RUM or APM.
Raygun offers dedicated products for these tasks, while Honeybadger doesn't provide native equivalents.
That means Raygun can justify the additional cost for teams that specifically need browser performance measurements and application profiling.
However, you should compare the total monitoring stack rather than the error-tracking subscription alone.
A low-cost error tracker may still require separate products for performance monitoring, logs, or other operational needs.
Verdict: Honeybadger for lower-cost error tracking and bundled operational features. Raygun becomes more compelling when real user monitoring is a requirement and you're willing to pay for its separate products.
Full feature comparison
The following table combines the capabilities and limitations observed during my tests.
Feature
Raygun
Honeybadger
Browser and backend errors in one project
Separate applications
One project
Unhandled Node.js promise rejection
Missed in my setup
Captured
Browser source maps
Supported; manual upload on trial
API upload with project key
Inline server source code
Not observed
Not observed
User identification
Customers view and error context
Labeled user fields and Email user
Request-scoped server breadcrumbs
Supported
Supported, with one stray entry observed
Direct frontend-to-backend error link
Not observed
Not observed
Default grouping in this test
Split some errors by dynamic values
Merged failures sharing type and location
Group stability after code changes
Additional groups appeared
No duplicate groups observed
Real user monitoring
Page and request performance
Not offered
Core Web Vitals
Supported
Not offered
Video session replay
Not observed
Not offered
Deployment registration
Manual form on trial
API available with project key
Resolve in a future release
Supported
Not observed
Explicit regression history
Activity feed and Regressions tab
Reopened, but missing from History tab
Resolve errors on deploy
Not found during testing
Supported per environment
Server APM
Separate product and agent
No native equivalent
SQLite query visibility in test
Not supported by tested integration
Available through application-written logs
General-purpose log queries
Not offered
Insights and BadgerQL
Uptime monitoring
No equivalent built-in product
Included, untested
Status pages
No equivalent built-in product
Included, untested
AI-assisted analysis
AI Error Resolution, untested
External LLM workflow and MCP, untested
Permanent free plan
No
Yes
Which should you choose?
Your decision depends on whether you primarily need to manage application errors or also need detailed information about frontend performance.
Choose Raygun if you need real user monitoring
Raygun is the better fit when understanding browser performance is a major requirement.
Its RUM product measures page loads, requests, and Core Web Vitals. The Customers view also provides useful information about affected users and their navigation history.
Its regression tracking was another strength. When the coupon error returned after a deployment, Raygun explicitly recorded the event in its activity feed and release history.
However, there are trade-offs.
You need separate applications for the frontend and backend, its major monitoring capabilities are sold as separate products, and my Node.js APM test didn't expose the SQLite query responsible for the checkout slowdown.
I also encountered a conflict between the tested APM integration and Crash Reporting, so I'd validate both together before adopting that setup.
Our Rollbar vs Raygun comparison examines how its error-tracking capabilities compare with another specialized error tracker.
Choose Honeybadger if you want error tracking with logs in one subscription
Honeybadger makes more sense when you want error tracking, application logs, uptime checks, and status pages without managing several separate subscriptions.
It was easier to set up in my test, captured every deliberately introduced error, and kept existing error groups stable after application changes.
Insights was particularly useful. The ability to query application logs and custom events helped me identify the slow checkout query without leaving the platform.
Its biggest limitations are the lack of native RUM, session replay, and distributed tracing.
Grouping also needs attention when multiple failures come from a shared helper function, and regression history was less informative than Raygun's.
Our Sentry vs Honeybadger comparison explores how Honeybadger performs against a platform with built-in distributed tracing and performance monitoring.
Final thoughts
The real decision is which blind spot you can live with. Raygun measures how your pages feel to visitors, but it called the faulty release faster and its APM agent couldn't see my database. Honeybadger found the slow query and caught the error Raygun missed, but only because my code wrote warnings it could read.
If your app already logs the things that go wrong, Honeybadger turns those logs into answers for a fraction of Raygun's price. If you need to know how fast your app is for people you'll never hear from, Raygun's RUM is worth paying for, as long as you don't trust its release comparison on its own.
My faulty release slowed checkout by more than a thousand times, and only one of these tools pointed at the query that did it.