FirexportAnleitungen
Firestore-Daten als JSON exportieren
Realtime Database hat in der Firebase Console einen Button „JSON exportieren“. Firestore nicht. Es gibt drei praktikable Wege, Firestore-Dokumente als JSON herauszubekommen – von den Ergebnissen einer Abfrage bis zur ganzen Sammlung mit ihren Untersammlungen.
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
- Eine Sammlung mit ihren Untersammlungen oder ein wiederholbarer Export: 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 JSON. 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) |
| Datei | Ein JSON-Array | Ein JSON-Array | Zeilengetrenntes JSON, ein Dokument pro Zeile |
| Untersammlungen | Getrennt, als Sammlungsgruppen-Abfrage | Unter jedem Dokument verschachtelt (optional) | Getrennt, eine Tabelle pro Sammlungs-ID |
| Zeitstempel | Wie die Console sie anzeigt (ISO 8601 mit Advanced) | ISO 8601 | BigQuery-Zeitstempeltext |
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).
- Öffnen Sie das Menü ⋮ neben dem Button Exportieren und wählen Sie Als JSON exportieren. Firexport geht alle Ergebnisseiten durch und lädt eine JSON-Datei herunter. (Der Exportieren-Button selbst speichert CSV.)

Die Datei ist ein JSON-Array mit einem Objekt pro Dokument: ein Schlüssel Document ID, dann die Felder des Dokuments. Zahlen, Booleans und null behalten ihre JSON-Typen, Maps und Arrays kommen verschachtelt heraus. Der Unterschied zwischen der kostenlosen Version und Advanced liegt bei den Werten, die die Console nur als Text anzeigt:
Kostenlos – Zeitstempel, Geopunkte und Referenzen so, wie die Console sie anzeigt:
[
{
"Document ID": "2PomjkgoCISvwnlGrypP",
"name": "firexport",
"count": 1,
"tags": ["dev", "export"],
"settings": { "theme": "dark", "beta": true },
"createdAt": "August 24, 2026 at 1:16:09 PM UTC+9",
"location": "[37.5665° N, 126.978° E]",
"owner": "/users/u1"
}
]Advanced (Lizenz zum Einmalkauf) – dieselben Werte, wiederhergestellt aus den Daten, die die Console bereits geladen hat:
[
{
"Document ID": "2PomjkgoCISvwnlGrypP",
"name": "firexport",
"count": 1,
"tags": ["dev", "export"],
"settings": { "theme": "dark", "beta": true },
"createdAt": "2026-08-24T04:16:09.012207Z",
"location": { "latitude": 37.5665, "longitude": 126.978 },
"owner": "projects/my-app/databases/(default)/documents/users/u1"
}
]In der kostenlosen Version bleibt eine Map oder ein Array, deren Console-Text sich nicht als JSON zurücklesen lässt (etwa eine, die die Console mit „…“ abgeschnitten hat), ein String. Advanced schreibt sie vollständig. So oder so gibt es keinen 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 läuft in Chrome und anderen Chromium-basierten Browsern.
Exportieren Sie Ihre nächste Firestore-Abfrage als JSON direkt aus der Console – ohne Skript und ohne Dienstkontoschlüssel.
2. Mit einem Admin-SDK-Skript exportieren
Ein kurzes Node.js-Skript mit dem Firebase Admin SDK kann eine ganze Sammlung exportieren und in Untersammlungen hinabsteigen – das kann keine der beiden anderen Methoden. 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-json.mjs, ersetzen Sieyour-project-idund führen Sienode export-to-json.mjs usersaus. Mit--subcollectionskommen die Untersammlungen jedes Dokuments mit.
// Usage: node export-to-json.mjs users [--subcollections] → writes users.json
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, flag] = process.argv.slice(2);
if (!collection) throw new Error('Usage: node export-to-json.mjs <collection> [--subcollections]');
const withSubcollections = flag === '--subcollections';
// Firestore types become JSON 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;
}
// Read a collection 1,000 documents at a time. With --subcollections, each document also gets its
// subcollections under "__collections__", read the same way.
async function readCollection(ref) {
const docs = [];
let last;
while (true) {
let query = ref.orderBy(FieldPath.documentId()).limit(1000);
if (last) query = query.startAfter(last);
const page = await query.get();
if (page.empty) break;
for (const doc of page.docs) {
const row = { documentId: doc.id, ...plain(doc.data()) };
if (withSubcollections) {
for (const sub of await doc.ref.listCollections()) {
row.__collections__ ??= {};
row.__collections__[sub.id] = await readCollection(sub);
}
}
docs.push(row);
}
last = page.docs[page.docs.length - 1];
}
return docs;
}
const docs = await readCollection(db.collection(collection));
writeFileSync(`${collection}.json`, JSON.stringify(docs, null, 2));
console.log(`Wrote ${docs.length} documents to ${collection}.json`);- Mit
--subcollectionsbekommt jedes Dokument, das Untersammlungen hat, einen Schlüssel__collections__, der sie enthält – so tief verschachtelt, wie sie reichen. Sie zu finden kostet eine zusätzliche Anfrage pro Dokument, große Sammlungen dauern also länger. - Untersammlungen unter einem Dokument, das selbst nicht existiert (die Console zeigt seine ID kursiv), sind von der übergeordneten Sammlung aus nicht erreichbar. Exportieren Sie diese als Sammlungsgruppe.
- Das Skript hält alles 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 JSON. BigQuery kann dieses Format laden und wieder als JSON ausgeben. 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_metadata
# 3. Write it out as newline-delimited JSON and download it.
bq extract --destination_format=NEWLINE_DELIMITED_JSON firestore_export.users gs://YOUR_BUCKET/users.json
gcloud storage cp gs://YOUR_BUCKET/users.json .- Die Datei ist zeilengetrenntes JSON: ein Dokument pro Zeile, kein Array. Um ein Array daraus zu machen, führen Sie
jq -s . users.json > users-array.jsonaus. - Maps und Arrays bleiben verschachtelt. Jede Zeile hat außerdem ein Objekt
__key__aus dem Export, das die Dokument-ID enthält. - BigQuery schreibt höchstens 1 GB pro Datei. Für mehr nutzen Sie einen Platzhalter wie
gs://YOUR_BUCKET/users-*.json. - 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 JSON exportieren?
Nein. Realtime Database hat „JSON exportieren“ im Menü seiner Datenansicht, aber der Tab „Daten“ von Firestore hat keinen Download. 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, kein JSON.
Warum liefert die Firestore-REST-API Werte wie {"stringValue": "..."}?
Die REST-API verpackt jedes Feld in seinen Typ: stringValue, integerValue, timestampValue, mapValue und so weiter. Das ist JSON, aber nicht die Form Ihrer Dokumente. Das Admin SDK (Methode 2) packt diese Typen für Sie aus.
Kann ich das JSON wieder in Firestore importieren?
Nicht direkt. gcloud firestore import liest nur verwaltete Exporte, und keine dieser JSON-Dateien ist einer. Um eine JSON-Datei zu laden, schreiben Sie sie mit einem Skript zurück (der BulkWriter des Admin SDK bewältigt große Stapel). Wenn es ums Wiederherstellen von Daten geht, nehmen Sie den verwalteten Export und Import statt JSON.
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.
