FirexportGuides

Comment exporter des données Firestore en CSV

La console Firebase affiche vos données Firestore, mais n’a aucun bouton pour les télécharger en CSV. Il existe trois façons pratiques d’obtenir un fichier CSV depuis Firestore. Celle qui convient dépend de la quantité de données et de la mise en place que vous acceptez de faire.

Mis à jour le 24 septembre 2026. Firexport, l’extension de la méthode 1, est la nôtre. Les méthodes 2 et 3 n’en ont pas besoin.

La réponse courte

  • Les résultats d’une requête, tout de suite: exécutez-la dans le générateur de requêtes (Query builder) de la console et exportez-la avec une extension de navigateur. Méthode 1
  • Un export répétable, ou des colonnes à votre façon: un court script Admin SDK. Méthode 2
  • Tous les documents d’une grande collection, ou vous utilisez déjà BigQuery: export géré avec gcloud, puis BigQuery vers CSV. Méthode 3
1. Console + extension2. Script Admin SDK3. gcloud + BigQuery
Mise en placeInstaller une extension ChromeNode.js et des identifiants Google CloudUn bucket Cloud Storage et un ensemble de données BigQuery
Facturation activéeInutileInutileObligatoire (formule Blaze)
ExporteUne requête du générateur de requêtes, avec ses filtres, son tri et sa limiteCe que votre code interrogeDes collections entières
HorodatagesTels que la console les affiche (ISO 8601 avec Advanced)ISO 8601TIMESTAMP BigQuery
Maps et tableauxLe texte de la console. Les valeurs longues peuvent être coupées par « … » (complètes avec Advanced)Du JSON dans une celluleDu JSON dans une cellule, après une requête d’aplatissement

1. Exporter depuis la console Firebase avec Firexport

La page Firestore de la console Firebase a un générateur de requêtes (Query builder) qui exécute une requête et affiche les résultats dans un tableau, mais rien pour les télécharger. Firexport est une extension Chrome gratuite qui ajoute un bouton Exporter à côté de ces résultats.

  1. Installez Firexport depuis le Chrome Web Store.
  2. Dans la console Firebase, ouvrez Firestore Database et passez de la vue en panneaux (Panel view) au générateur de requêtes (Query builder) (en haut à droite de l’onglet Données).
  3. Choisissez la collection sous Portée de la requête (Query scope) et Chemin (Path), ajoutez des filtres ou une limite si vous voulez, et cliquez sur Exécuter (Run).
  4. Cliquez sur Exporter au-dessus des résultats. Firexport parcourt toutes les pages de résultats et télécharge un seul fichier CSV. Pour du JSON, ouvrez le menu ⋮ à côté du bouton et choisissez Exporter en JSON.
Le générateur de requêtes Firestore dans la console Firebase, avec le bouton Exporter que Firexport ajoute au-dessus des résultats
Le bouton Exporter se trouve au-dessus des résultats du générateur de requêtes.

Ce qui se retrouve dans le fichier :

  • Une colonne Document ID, puis une colonne par champ, telles que le tableau de la console les affiche.
  • Les valeurs telles que la console les affiche. Dans la version gratuite, les horodatages sont au format d’affichage de la console (langue et fuseau horaire de votre navigateur), les références sont raccourcies et les maps ou tableaux longs peuvent être coupés par « … ».
  • Firexport Advanced, une licence à paiement unique, restaure les horodatages ISO 8601, les chemins de référence complets, les geopoints et les maps et tableaux non tronqués à partir des données que la console a déjà chargées.

Aucune clé de compte de service ni facturation à configurer : cela fonctionne dans la session de console où vous êtes déjà connecté, et le fichier est construit dans votre navigateur. Une requête est exportée à la fois, donc une sous-collection n’est incluse que si vous l’interrogez en tant que groupe de collections. Cela fonctionne dans Chrome et les autres navigateurs basés sur Chromium.

Exportez votre prochaine requête Firestore depuis la console, sans script ni clé de compte de service.

Ajouter à Chrome — gratuit

2. Exporter avec un script Admin SDK

Si vous préférez éviter une extension, ou si l’export doit s’exécuter selon un planning, un court script Node.js avec le SDK Admin Firebase fait l’affaire. Il lui faut un compte qui peut lire Firestore : un Propriétaire ou un Éditeur du projet, ou le rôle Lecteur Cloud Datastore.

  1. Installez le SDK : npm install firebase-admin
  2. Connectez-vous pour obtenir des identifiants locaux : gcloud auth application-default login. Sur un serveur, faites plutôt pointer GOOGLE_APPLICATION_CREDENTIALS vers une clé de compte de service.
  3. Enregistrez le script ci-dessous sous export-to-csv.mjs, remplacez your-project-id et exécutez node export-to-csv.mjs users.
// 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`);
  • Pour exporter une sous-collection sous tous les parents, remplacez db.collection par db.collectionGroup.
  • Le script garde toutes les lignes en mémoire avant d’écrire le fichier. Pour des millions de documents, utilisez la méthode 3.

3. Exporter avec gcloud et BigQuery

L’export géré de Firestore écrit une sauvegarde dans Cloud Storage au format propre de Firestore, pas en CSV. BigQuery peut charger ce format et écrire du CSV. C’est la voie pour les grandes collections, mais elle exige la facturation activée (formule Blaze) et l’autorisation d’exécuter des exports et d’écrire dans le bucket. La documentation d’export et d’import de Google liste les rôles.

# 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

BigQuery ne peut pas écrire de colonnes imbriquées en CSV, et toute table chargée depuis un export Firestore en a une : __key__, qui contient l’ID du document. Faites donc d’abord une copie plate avec une requête, en transformant les maps et les tableaux en texte JSON, puis extrayez-la.

# 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 écrit au plus 1 Go par fichier. Au-delà, utilisez un joker comme gs://YOUR_BUCKET/users-*.csv.
  • L’export est facturé une lecture de document par document. Supprimez le dossier d’export une fois terminé pour qu’il cesse d’occuper Cloud Storage.

FAQ

La console Firebase peut-elle exporter des données Firestore en CSV ?

Non. La page Firestore de la console Firebase n’a pas de bouton de téléchargement. L’export géré (la page Importer/Exporter de la console Google Cloud, ou gcloud firestore export) écrit une sauvegarde au format propre de Firestore dans Cloud Storage. Il sert à restaurer des données, pas à les ouvrir dans un tableur.

Exporter des données Firestore coûte-t-il de l’argent ?

Chaque méthode lit chaque document exporté au moins une fois, et Firestore facture ces lectures de documents. Dans le quota gratuit quotidien, cela ne coûte rien. L’export géré exige en plus la facturation activée sur le projet, et ses fichiers occupent Cloud Storage jusqu’à ce que vous les supprimiez.

Comment exporter une sous-collection ?

Interrogez-la en tant que groupe de collections. Dans la console, choisissez Groupe de collections (Collection group) comme Portée de la requête (Query scope) dans le générateur de requêtes. Dans un script, utilisez db.collectionGroup() au lieu de db.collection(). Avec gcloud, passez l’ID de la sous-collection à --collection-ids.

Puis-je exporter en JSON à la place ?

Oui. Le menu Exporter de Firexport propose Exporter en JSON. Un script peut écrire JSON.stringify(rows) au lieu de CSV. Depuis BigQuery, bq extract --destination_format=NEWLINE_DELIMITED_JSON garde les maps et les tableaux imbriqués.