Get Started

Migrate from Airbrake

Move a Rails app from Airbrake to errorgap in about five minutes: swap the gem, run both during cutover, report deploys, and verify.

errorgap groups errors the way you're used to, and adds incidents, logs, uptime and an MCP server your AI assistant can query. Expect about 5 minutes for a Rails app.

Ruby · Rails·~5 min·Updated Oct 2026

01Concept map

Most of what you set up in Airbrake has a direct equivalent.

Airbrakeerrorgap
Project ID + project keyProject slug + API keyBoth are on the project's setup page.
Error groupsError groupsGrouped by fingerprint, the way you're used to.
Deploys airbrake:deployReleasesShown as markers on charts and incident timelines.
Filters add_filterRedaction rulesConfigured per project, applied before storage.
EnvironmentsEnvironments
“Resolved”ResolvedWith regression detection: a resolved group that recurs reopens.

02Swap the gem

Add errorgap. Keep the Airbrake gem for now; you'll remove it after cutover.

Gemfile+1−0
gem "rails", "~> 7.2"
gem "airbrake", "~> 13.0"
Added: gem "errorgap"

Then add an initializer next to the Airbrake one. Your endpoint, project slug and API key are on the project's setup page.

config/initializers/errorgap.rb (new)+5−0
Added: Errorgap.configure do |config|
Added: config.endpoint = ENV.fetch("ERRORGAP_ENDPOINT")
Added: config.project_slug = ENV.fetch("ERRORGAP_PROJECT_SLUG")
Added: config.api_key = ENV.fetch("ERRORGAP_API_KEY")
Added: end

The gem hooks into Rails through a railtie and reports unhandled exceptions from every environment. To skip some, set config.ignore_environments = %w[test development].

If you used add_filter to drop or scrub params, recreate those as redaction rules in Project settings → Privacy. They run on our side before anything is stored.

03Run both during cutover

Leave Airbrake reporting for about a week. Both notifiers hook into Rails independently, so every error goes to both. Once the error groups in errorgap match what you see in Airbrake, delete config/initializers/airbrake.rb and the gem.
Gemfile (after cutover)+0−1
gem "rails", "~> 7.2"
Removed: gem "airbrake", "~> 13.0"
gem "errorgap"

04Report deploys

Replace the airbrake:deploy task in your deploy script with one request. Send sha and environment so errors are attributed to the release that introduced them.

bin/deploy+4−2
Removed: bundle exec rake airbrake:deploy \
Removed: ENVIRONMENT=production REVISION=$GIT_SHA
Added: curl -X POST "$ERRORGAP_ENDPOINT/api/projects/$ERRORGAP_PROJECT_SLUG/releases" \
Added: -H "X-Errorgap-Project-Key: $ERRORGAP_API_KEY" \
Added: -H "content-type: application/json" \
Added: -d "{\"sha\": \"$GIT_SHA\", \"environment\": \"production\"}"

05Verify

  1. Deploy, or restart your app locally with the new initializer.
  2. Send a test error from rails console. Errors raised inside a request are reported automatically; from the console, notify explicitly:
Errorgap.notify(StandardError.new("Errorgap test error"))
  1. Open the project in errorgap. The error appears on the Overview within a few seconds, with the release you reported attached.

06What you get that you didn't have