FirexportGuias

Como exportar dados do Firestore para CSV

O Console do Firebase mostra seus dados do Firestore, mas não tem botão para baixá-los como CSV. Há três formas práticas de tirar um arquivo CSV do Firestore. Qual delas serve depende de quantos dados você tem e de quanta configuração quer fazer.

Atualizado em 24 de setembro de 2026. O Firexport, a extensão do método 1, é nosso. Os métodos 2 e 3 não precisam dele.

A resposta curta

  • Os resultados de uma consulta, agora: execute-a no criador de consultas (Query builder) do console e exporte com uma extensão do navegador. Método 1
  • Uma exportação repetível, ou colunas do seu jeito: um script curto com o Admin SDK. Método 2
  • Todos os documentos de uma coleção grande, ou você já usa o BigQuery: exportação gerenciada com gcloud e depois BigQuery para CSV. Método 3
1. Console + extensão2. Script com Admin SDK3. gcloud + BigQuery
ConfiguraçãoInstalar uma extensão do ChromeNode.js e credenciais do Google CloudBucket do Cloud Storage e conjunto de dados do BigQuery
Faturamento ativadoNão precisaNão precisaObrigatório (plano Blaze)
ExportaUma consulta do criador de consultas, com filtros, ordenação e limiteO que seu código consultarColeções inteiras
TimestampsComo o console mostra (ISO 8601 com o Advanced)ISO 8601TIMESTAMP do BigQuery
Mapas e arraysO texto do console. Valores longos podem ficar cortados com “…” (completos com o Advanced)JSON em uma célulaJSON em uma célula, após uma consulta de achatamento

1. Exportar do Console do Firebase com o Firexport

A página do Firestore no Console do Firebase tem um criador de consultas (Query builder) que executa uma consulta e mostra os resultados em uma tabela, mas nada para baixá-los. O Firexport é uma extensão gratuita do Chrome que adiciona um botão Exportar ao lado desses resultados.

  1. Instale o Firexport pela Chrome Web Store.
  2. No Console do Firebase, abra Firestore Database e mude de visualização em painel (Panel view) para criador de consultas (Query builder) (canto superior direito da guia Dados).
  3. Escolha a coleção em Escopo da consulta (Query scope) e Caminho (Path), adicione filtros ou um limite se quiser e clique em Executar (Run).
  4. Clique em Exportar acima dos resultados. O Firexport percorre todas as páginas dos resultados e baixa um único arquivo CSV. Para JSON, abra o menu ⋮ ao lado do botão e escolha Exportar para JSON.
O criador de consultas do Firestore no Console do Firebase, com o botão Exportar que o Firexport adiciona acima dos resultados da consulta
O botão Exportar fica acima dos resultados do criador de consultas.

O que vai para o arquivo:

  • Uma coluna Document ID e depois uma coluna por campo, como a tabela do console mostra.
  • Os valores como o console os exibe. Na versão gratuita, os timestamps ficam no formato de exibição do console (o idioma e o fuso horário do seu navegador), as referências são encurtadas e mapas ou arrays longos podem ficar cortados com “…”.
  • O Firexport Advanced, uma licença de compra única, restaura timestamps ISO 8601, caminhos de referência completos, geopoints e mapas e arrays sem truncar a partir dos dados que o console já carregou.

Não há chave de conta de serviço nem faturamento para configurar: funciona na sessão do console em que você já está conectado, e o arquivo é montado no seu navegador. Ele exporta uma consulta por vez, então uma subcoleção só vem junto se você a consultar como grupo de coleções. Funciona no Chrome e em outros navegadores baseados no Chromium.

Exporte sua próxima consulta do Firestore direto do console, sem script nem chave de conta de serviço.

Adicionar ao Chrome — grátis

2. Exportar com um script do Admin SDK

Se preferir não usar uma extensão, ou se a exportação precisa rodar de forma agendada, um script curto em Node.js com o Firebase Admin SDK dá conta. Ele precisa de uma conta que possa ler o Firestore: um Proprietário ou Editor do projeto, ou o papel Leitor do Cloud Datastore.

  1. Instale o SDK: npm install firebase-admin
  2. Faça login para obter credenciais locais: gcloud auth application-default login. Em um servidor, aponte GOOGLE_APPLICATION_CREDENTIALS para uma chave de conta de serviço.
  3. Salve o script abaixo como export-to-csv.mjs, substitua your-project-id e execute 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`);
  • Para exportar uma subcoleção de todos os documentos pais, troque db.collection por db.collectionGroup.
  • O script mantém todas as linhas na memória antes de gravar o arquivo. Para milhões de documentos, use o método 3.

3. Exportar com gcloud e BigQuery

A exportação gerenciada do Firestore grava um backup no Cloud Storage no formato próprio do Firestore, não em CSV. O BigQuery consegue carregar esse formato e gravar CSV. É o caminho para coleções grandes, mas precisa do faturamento ativado (plano Blaze) e de permissão para executar exportações e gravar no bucket. A documentação de exportação e importação do Google lista os papéis.

# 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

O BigQuery não consegue gravar colunas aninhadas em CSV, e toda tabela carregada de uma exportação do Firestore tem uma: __key__, que guarda o ID do documento. Então primeiro faça uma cópia plana com uma consulta, transformando mapas e arrays em texto JSON, e extraia essa cópia.

# 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 .
  • O BigQuery grava no máximo 1 GB por arquivo. Para mais, use um curinga como gs://YOUR_BUCKET/users-*.csv.
  • A exportação é cobrada como uma leitura de documento por documento. Apague a pasta de exportação quando terminar, para que ela pare de ocupar o Cloud Storage.

Perguntas frequentes

O Console do Firebase consegue exportar dados do Firestore para CSV?

Não. A página do Firestore no Console do Firebase não tem botão de download. A exportação gerenciada (a página Importar/Exportar do console do Google Cloud, ou gcloud firestore export) grava um backup no formato próprio do Firestore no Cloud Storage. Ela serve para restaurar dados, não para abrir em uma planilha.

Exportar dados do Firestore custa dinheiro?

Todos os métodos leem cada documento exportado pelo menos uma vez, e o Firestore cobra isso como leituras de documento. Dentro da cota gratuita diária, não custa nada. A exportação gerenciada também exige faturamento ativado no projeto, e seus arquivos ocupam o Cloud Storage até você apagá-los.

Como exporto uma subcoleção?

Consulte-a como grupo de coleções. No console, escolha Grupo de coleções (Collection group) como Escopo da consulta (Query scope) no criador de consultas. Em um script, use db.collectionGroup() em vez de db.collection(). Com o gcloud, passe o ID da subcoleção em --collection-ids.

Posso exportar para JSON em vez disso?

Sim. O menu Exportar do Firexport tem Exportar para JSON. Um script pode gravar JSON.stringify(rows) em vez de CSV. No BigQuery, bq extract --destination_format=NEWLINE_DELIMITED_JSON mantém mapas e arrays aninhados.