FirexportAnleitungen
Firestore-Daten als CSV exportieren
Die Firebase Console zeigt Ihre Firestore-Daten, hat aber keinen Button, um sie als CSV herunterzuladen. Es gibt drei praktikable Wege, eine CSV-Datei aus Firestore zu bekommen. Welcher passt, hängt davon ab, wie viele Daten Sie haben und wie viel Einrichtung Sie in Kauf nehmen.
Aktualisiert am 24. September 2026. Firexport, die Erweiterung in Methode 1, ist von uns. Die Methoden 2 und 3 brauchen sie nicht.
Die kurze Antwort
- Die Ergebnisse einer Abfrage, jetzt sofort: in der Console im Abfrage-Builder (Query builder) ausführen und mit einer Browser-Erweiterung exportieren. Methode 1
- Ein wiederholbarer Export oder Spalten nach Ihren Vorstellungen: ein kurzes Admin-SDK-Skript. Methode 2
- Jedes Dokument einer großen Sammlung, oder Sie nutzen bereits BigQuery: verwalteter Export mit gcloud, dann BigQuery nach CSV. Methode 3
| 1. Console + Erweiterung | 2. Admin-SDK-Skript | 3. gcloud + BigQuery | |
|---|---|---|---|
| Einrichtung | Eine Chrome-Erweiterung installieren | Node.js und Google-Cloud-Anmeldedaten | Cloud-Storage-Bucket und BigQuery-Dataset |
| Abrechnung aktiviert | Nicht nötig | Nicht nötig | Erforderlich (Blaze-Tarif) |
| Exportiert | Eine Abfrage aus dem Abfrage-Builder, mit Filtern, Sortierung und Limit | Was Ihr Code abfragt | Ganze Sammlungen |
| Zeitstempel | Wie die Console sie anzeigt (ISO 8601 mit Advanced) | ISO 8601 | BigQuery TIMESTAMP |
| Maps und Arrays | Der Text der Console. Lange Werte können mit „…“ abgeschnitten sein (vollständig mit Advanced) | JSON in einer Zelle | JSON in einer Zelle, nach einer Abfrage zum Abflachen |
1. Mit Firexport aus der Firebase Console exportieren
Die Firestore-Seite der Firebase Console hat einen Abfrage-Builder (Query builder), der eine Abfrage ausführt und die Ergebnisse in einer Tabelle zeigt – aber nichts, womit man sie herunterladen könnte. Firexport ist eine kostenlose Chrome-Erweiterung, die neben diesen Ergebnissen einen Exportieren-Button hinzufügt.
- Installieren Sie Firexport aus dem Chrome Web Store.
- Öffnen Sie in der Firebase Console Firestore Database und wechseln Sie von der Panelansicht (Panel view) zum Abfrage-Builder (Query builder) (oben rechts im Tab „Daten“).
- Wählen Sie die Sammlung unter Abfragebereich (Query scope) und Pfad (Path), fügen Sie bei Bedarf Filter oder ein Limit hinzu und klicken Sie auf Ausführen (Run).
- Klicken Sie über den Ergebnissen auf Exportieren. Firexport geht alle Ergebnisseiten durch und lädt eine CSV-Datei herunter. Für JSON öffnen Sie das Menü ⋮ neben dem Button und wählen Als JSON exportieren.

Was in der Datei landet:
- Eine Spalte Document ID, dann eine Spalte pro Feld, so wie die Tabelle der Console sie zeigt.
- Werte so, wie die Console sie anzeigt. In der kostenlosen Version stehen Zeitstempel im Anzeigeformat der Console (Sprache und Zeitzone Ihres Browsers), Referenzen sind gekürzt, und lange Maps oder Arrays können mit „…“ abgeschnitten sein.
- Firexport Advanced, eine Lizenz zum Einmalkauf, stellt ISO-8601-Zeitstempel, vollständige Referenzpfade, Geopunkte sowie ungekürzte Maps und Arrays aus den Daten wieder her, die die Console bereits geladen hat.
Kein Dienstkontoschlüssel und keine Abrechnung einzurichten: Es läuft in der Console-Sitzung, in der Sie schon angemeldet sind, und die Datei entsteht in Ihrem Browser. Es exportiert eine Abfrage auf einmal, eine Untersammlung kommt also nur mit, wenn Sie sie als Sammlungsgruppe abfragen. Es läuft in Chrome und anderen Chromium-basierten Browsern.
Exportieren Sie Ihre nächste Firestore-Abfrage direkt aus der Console – ohne Skript und ohne Dienstkontoschlüssel.
2. Mit einem Admin-SDK-Skript exportieren
Wenn Sie lieber keine Erweiterung nutzen oder der Export nach Zeitplan laufen muss, erledigt das ein kurzes Node.js-Skript mit dem Firebase Admin SDK. Es braucht ein Konto, das Firestore lesen darf: einen Projekt-Inhaber oder -Bearbeiter oder die Rolle Cloud Datastore-Betrachter.
- SDK installieren:
npm install firebase-admin - Für lokale Anmeldedaten anmelden:
gcloud auth application-default login. Auf einem Server lassen Sie stattdessenGOOGLE_APPLICATION_CREDENTIALSauf einen Dienstkontoschlüssel zeigen. - Speichern Sie das Skript unten als
export-to-csv.mjs, ersetzen Sieyour-project-idund führen Sienode export-to-csv.mjs usersaus.
// Usage: node export-to-csv.mjs users → writes users.csv
import { writeFileSync } from 'node:fs';
import { initializeApp } from 'firebase-admin/app';
import {
getFirestore,
FieldPath,
Timestamp,
GeoPoint,
DocumentReference,
} from 'firebase-admin/firestore';
initializeApp({ projectId: 'your-project-id' });
const db = getFirestore();
const collection = process.argv[2];
if (!collection) throw new Error('Usage: node export-to-csv.mjs <collection>');
// Read the collection 1,000 documents at a time, so large collections don't time out.
const docs = [];
let last;
while (true) {
let query = db.collection(collection).orderBy(FieldPath.documentId()).limit(1000);
if (last) query = query.startAfter(last);
const page = await query.get();
if (page.empty) break;
docs.push(...page.docs);
last = page.docs[page.docs.length - 1];
}
// Firestore types become plain values: timestamps as ISO 8601, references as paths.
function plain(value) {
if (value instanceof Timestamp) return value.toDate().toISOString();
if (value instanceof DocumentReference) return value.path;
if (value instanceof GeoPoint) return { latitude: value.latitude, longitude: value.longitude };
if (value instanceof Uint8Array) return Buffer.from(value).toString('base64');
if (Array.isArray(value)) return value.map(plain);
if (value && typeof value === 'object') {
return Object.fromEntries(Object.entries(value).map(([key, v]) => [key, plain(v)]));
}
return value;
}
// Maps and arrays go in one cell as JSON. Quote any cell with a comma, a quote or a line break.
function cell(value) {
if (value === null || value === undefined) return '';
const text = typeof value === 'object' ? JSON.stringify(value) : String(value);
return /[",\r\n]/.test(text) ? `"${text.replaceAll('"', '""')}"` : text;
}
const rows = docs.map((doc) => ({ documentId: doc.id, ...plain(doc.data()) }));
// Documents in one collection can have different fields, so the columns are all of them.
const columns = [...new Set(rows.flatMap((row) => Object.keys(row)))];
const lines = [columns, ...rows.map((row) => columns.map((column) => row[column]))];
writeFileSync(`${collection}.csv`, lines.map((line) => line.map(cell).join(',')).join('\r\n'));
console.log(`Wrote ${rows.length} documents to ${collection}.csv`);- Um eine Untersammlung über alle übergeordneten Dokumente hinweg zu exportieren, ändern Sie
db.collectionindb.collectionGroup. - Das Skript hält alle Zeilen im Speicher, bevor es die Datei schreibt. Bei Millionen von Dokumenten nehmen Sie Methode 3.
3. Mit gcloud und BigQuery exportieren
Der verwaltete Export von Firestore schreibt eine Sicherung in Cloud Storage – im eigenen Format von Firestore, nicht als CSV. BigQuery kann dieses Format laden und CSV schreiben. Das ist der Weg für große Sammlungen, braucht aber aktivierte Abrechnung (Blaze-Tarif) und die Berechtigung, Exporte auszuführen und in den Bucket zu schreiben. Die Export- und Import-Dokumentation von Google nennt die Rollen.
# 1. Export one collection. BigQuery only loads exports made with --collection-ids.
gcloud firestore export gs://YOUR_BUCKET/users-export --collection-ids=users
# 2. Load it into a BigQuery dataset in the same location as the bucket.
bq --location=US mk --dataset firestore_export
bq load --source_format=DATASTORE_BACKUP firestore_export.users \
gs://YOUR_BUCKET/users-export/all_namespaces/kind_users/all_namespaces_kind_users.export_metadataBigQuery kann verschachtelte Spalten nicht als CSV schreiben, und jede aus einem Firestore-Export geladene Tabelle hat eine: __key__ mit der Dokument-ID. Erstellen Sie deshalb zuerst per Abfrage eine flache Kopie, in der Maps und Arrays zu JSON-Text werden, und extrahieren Sie diese.
# 3. Make a flat copy: maps and arrays become JSON text. List your own fields.
bq query --use_legacy_sql=false --destination_table=firestore_export.users_flat \
'SELECT __key__.name AS documentId, email, createdAt,
TO_JSON_STRING(address) AS address, TO_JSON_STRING(tags) AS tags
FROM firestore_export.users'
# 4. Write it to CSV and download it.
bq extract --destination_format=CSV firestore_export.users_flat gs://YOUR_BUCKET/users.csv
gcloud storage cp gs://YOUR_BUCKET/users.csv .- BigQuery schreibt höchstens 1 GB pro Datei. Für mehr nutzen Sie einen Platzhalter wie
gs://YOUR_BUCKET/users-*.csv. - Der Export wird pro Dokument als ein Dokumentlesevorgang abgerechnet. Löschen Sie den Exportordner danach, damit er keinen Cloud-Storage-Speicher mehr belegt.
FAQ
Kann die Firebase Console Firestore-Daten als CSV exportieren?
Nein. Die Firestore-Seite der Firebase Console hat keinen Download-Button. Der verwaltete Export (die Seite Import/Export in der Google Cloud Console oder gcloud firestore export) schreibt eine Sicherung im eigenen Format von Firestore nach Cloud Storage. Er dient zum Wiederherstellen von Daten, nicht zum Öffnen in einer Tabellenkalkulation.
Kostet der Export von Firestore-Daten Geld?
Jede Methode liest jedes exportierte Dokument mindestens einmal, und Firestore rechnet das als Dokumentlesevorgänge ab. Innerhalb des täglichen kostenlosen Kontingents kostet das nichts. Der verwaltete Export braucht zusätzlich aktivierte Abrechnung im Projekt, und seine Dateien belegen Cloud Storage, bis Sie sie löschen.
Wie exportiere ich eine Untersammlung?
Fragen Sie sie als Sammlungsgruppe ab. In der Console wählen Sie im Abfrage-Builder Sammlungsgruppe (Collection group) als Abfragebereich (Query scope). In einem Skript nutzen Sie db.collectionGroup() statt db.collection(). Bei gcloud übergeben Sie die ID der Untersammlung an --collection-ids.
Kann ich stattdessen nach JSON exportieren?
Ja. Das Exportieren-Menü von Firexport hat Als JSON exportieren. Ein Skript kann JSON.stringify(rows) statt CSV schreiben. Aus BigQuery behält bq extract --destination_format=NEWLINE_DELIMITED_JSON Maps und Arrays verschachtelt.
