Connect Firebase Crashlytics
Connect Crashlytics through its BigQuery export so Adduce reads your app's crash and freeze groups as evidence.
Adduce reads your app's crashes and freezes from the Crashlytics BigQuery export, and records the groups that are hurting the most people.
Beta
This connector works, but it has not been proven against a real customer account yet, so Adduce badges it Beta wherever it appears. Tell us at hello@adducehq.com if what you see does not match this page.
Before you begin
- Role: project Editor or Lead. A workspace Admin is a lead on every project.
- In Firebase: the Crashlytics BigQuery export switched on, and its first daily batch landed. It can take up to 48 hours.
- In Google Cloud: permission to create a service account, grant it two roles, and download a JSON key.
- To hand: the Google Cloud project ID, the JSON key, and the dataset name only if you moved the export out of its default one.
- Time: twenty minutes, most of it in Firebase and Google Cloud.
What Adduce reads
| Surface | What it becomes |
|---|---|
| Crash groups | Evidence naming the crash, how many people it hit, and where it happened |
| ANR groups — freezes on Android | The same, described as a freeze rather than a crash |
Every item is a pain point, and every one links back to the Firebase console. The window is the trailing thirty days, refreshed in place each day, so a crash that stops happening fades out of the picture rather than lingering as history.
Permissions the service account needs
| Role | Where | Why |
|---|---|---|
roles/bigquery.dataViewer | on the Crashlytics dataset | read the exported crash tables |
roles/bigquery.jobUser | on the project | run the query that aggregates them |
Nothing is written. Adduce reads BigQuery and nothing else in your Google account.
Steps
In the Firebase console, open Integrations → BigQuery and switch the Crashlytics export on. The first daily batch can take up to 48 hours to appear; there is nothing to connect until it has.
In Google Cloud, create a service account, grant it roles/bigquery.dataViewer on the firebase_crashlytics dataset and roles/bigquery.jobUser on the project, then create a JSON key for it and download the file.
Copy your Google Cloud project ID from the Firebase console under Project settings → General.
In Adduce, open the project, choose Sources, then Add source, and choose the Firebase Crashlytics tile.
On Connection details, name the source and paste the project ID. Leave BigQuery dataset empty unless you moved the export out of firebase_crashlytics.
Paste the whole downloaded key file into Service account key (JSON).
Choose Continue. Adduce mints a token from the key and lists the dataset's tables, which proves the project ID, the dataset, the read grant and that the export has actually run — all in one call.
First sync and cadence
Every sync reads the trailing thirty days across each of your app's exported tables, and refreshes what it already holds rather than adding to it. There is no separate backfill: the first sync and the hundredth read the same window. Adduce syncs once a day at 03:00 UTC, and Sync now runs one immediately.
Disconnect or replace credentials
Delete the source from its page and type its name to confirm. Deleting removes the evidence it produced. To rotate the key, delete the source and add it again; the next sync reads the same thirty-day window, so nothing is lost.
If it did not work
Why does it say the export is not enabled?
Adduce reached BigQuery and read the dataset, but found no Crashlytics table in it. Either the export was switched on very recently — the first daily batch can take 48 hours — or it writes to a different dataset, which you should name in BigQuery dataset.
Why was access denied?
The service account is missing one of the two roles. Only dataViewer can be proved at the connection test; a missing jobUser passes the test and then fails the first sync, so grant both.
Why was the dataset not found?
The project ID and the dataset do not go together. Check the project ID in the Firebase console under Project settings → General, and leave the dataset empty unless you deliberately moved the export.