Saltar al contenido principal

Supabase vs Firebase en 2026: Mi Experiencia Real en Producción Tras 1 Año

Comparativa honesta entre Supabase y Firebase después de usar ambos en producción. Costes reales, caídas, límites ocultos, vendor lock-in y cuál elegiría hoy para un SaaS.

Fran Cobos 8 min de lectura 1552 palabras

Tabla de contenidos

Voy a ser directo: usé Firebase durante 2 años para un SaaS y lo migré a Supabase. No porque Firebase sea malo — es una herramienta brutal — sino porque me encontré con problemas que la documentación oficial no menciona y que ninguna IA te va a contar porque no ha pasado por la experiencia.

Este artículo no es la típica comparativa de “ambos son buenos dependiendo de tu caso de uso”. Es lo que me pasó a mí, con números reales.

El contexto: Qué construí con cada uno

Con Firebase (2023-2025): Un SaaS de gestión de reuniones con IA. ~2.000 usuarios activos, ~500 reuniones/día, almacenamiento de transcripciones.

Con Supabase (2025-2026): Migré ese mismo SaaS + lancé AtrapaClientes, un CRM con dashboard, webhooks y API pública.

Lo que nadie te cuenta de Firebase

La factura de Firestore es impredecible

Firebase cobra por número de lecturas de documentos, no por volumen de datos. Esto suena razonable hasta que haces una query que lee 500 documentos para mostrar una tabla con paginación.

Mi primer mes en producción real:

ConceptoEstimadoReal
Lecturas Firestore1M4.2M
Escrituras Firestore200K180K
Storage2 GB1.8 GB
Factura~$15~$47

¿Por qué 4x más lecturas de las esperadas? Porque cada vez que un listener de Firestore se reconecta (cambio de pestaña, pérdida de conexión), re-lee todos los documentos del snapshot. Con 500 usuarios activos, eso genera miles de lecturas fantasma que no ves en tu código.

Security Rules son un lenguaje de programación oculto

Las Firebase Security Rules parecen simples:

match /meetings/{meetingId} {
  allow read: if request.auth.uid in resource.data.members;
}

Hasta que necesitas validar datos complejos, hacer joins entre colecciones o verificar roles. Entonces te encuentras escribiendo un lenguaje de programación sin tipado, sin debugging y sin tests unitarios fáciles.

Después de romper producción 2 veces por una Security Rule mal escrita, dejé de confiar en ellas para lógica de negocio.

Vendor lock-in real

Migrar de Firestore no es “exportar un JSON”. El modelo de datos de Firestore (documentos anidados, subcollections, references) no tiene equivalente directo en SQL ni en MongoDB. Tuve que repensar toda la estructura de datos para migrar a PostgreSQL.

// Firestore: datos anidados en subcollections
/users/{userId}/meetings/{meetingId}/transcriptions/{transId}

// PostgreSQL: relaciones con foreign keys
users → meetings (user_id FK) → transcriptions (meeting_id FK)

La migración de datos me llevó 3 semanas. Si lo hubiera empezado con PostgreSQL, habría sido 0.

Lo que nadie te cuenta de Supabase

PostgreSQL es increíble… pero necesitas saber SQL

Con Firebase, haces collection('users').where('role', '==', 'admin').get() y ya. Con Supabase tienes todo el poder de SQL, pero eso significa que necesitas saber SQL.

-- Esto que en Firestore es trivial...
-- collection('meetings').where('date', '>=', today).orderBy('date')

-- En Supabase requiere entender queries:
SELECT m.*, u.name as organizer_name
FROM meetings m
JOIN users u ON m.organizer_id = u.id
WHERE m.date >= CURRENT_DATE
ORDER BY m.date ASC
LIMIT 20 OFFSET 0;

La ventaja: una vez que sabes SQL, puedes hacer cualquier cosa. Joins, aggregations, window functions, CTEs. Firestore no puede hacer un JOIN ni pagando.

Row Level Security (RLS) es mejor… pero más complejo

Las políticas RLS de Supabase son SQL estándar:

CREATE POLICY "Users can see their own meetings"
ON meetings
FOR SELECT
USING (auth.uid() = organizer_id OR auth.uid() = ANY(member_ids));

Ventajas sobre Firebase Security Rules:

  • SQL estándar (no un lenguaje inventado)
  • Se pueden testear con queries normales
  • Soportan joins y subqueries

Desventaja: si te olvidas de activar RLS en una tabla, todos los datos son públicos por defecto. Me pasó en desarrollo (gracias a Dios no en producción) con la tabla de api_keys. Supabase te avisa con un warning, pero si lo ignoras…

El tier gratuito se te queda corto rápido

RecursoFree tierMi uso real (mes 3)
Base de datos500 MB380 MB (bien)
Storage1 GB2.1 GB (superado)
Edge Functions500K invocaciones1.2M (superado)
Bandwidth2 GB4.5 GB (superado)
Coste Pro$0$25 + $12 extras

Con el plan Pro ($25/mes) tienes 8 GB de DB, 100 GB de storage y 2M edge functions. Para un SaaS con <5.000 usuarios es suficiente.

Realtime tiene límites

Supabase Realtime (equivalente a los listeners de Firestore) funciona bien para ~100 conexiones simultáneas. A partir de ahí necesitas el add-on de Realtime ($0.0015/mensaje). Firebase Realtime Database maneja mejor las conexiones masivas out-of-the-box.

Comparativa directa

AspectoFirebaseSupabaseGanador
Setup inicial5 min (consola web)5 min (consola web)Empate
Curva de aprendizajeBaja (NoSQL, SDK sencillo)Media (SQL, RLS)Firebase
Base de datosFirestore (documento)PostgreSQL (relacional)Supabase
AuthExcelente (muchos proveedores)Muy bueno (GoTrue)Firebase (por poco)
StorageGCS integradoS3-compatibleEmpate
RealtimeExcelenteBueno (límites)Firebase
Edge FunctionsCloud Functions (Node)Deno (edge)Depende
Vendor lock-inAltoBajo (SQL estándar)Supabase
Precio predecibleNo (lecturas variables)Sí (plan fijo)Supabase
SQL/JoinsNoSupabase
Self-hostingNoSí (Docker)Supabase
Comunidad/DocsEnorme (10+ años)Grande y creciendoFirebase

Costes reales: Mes a mes para una app con ~2.000 usuarios

Firebase

MesLecturasStorageFunctionsTotal
1$12$1$5$18
3$28$3$12$43
6$47$5$18$70
12$65$8$25$98

El problema: las lecturas crecen exponencialmente con los usuarios porque cada interacción genera más lecturas.

Supabase

MesPlanExtrasTotal
1Free$0$0
3Pro $25$5 (storage)$30
6Pro $25$10$35
12Pro $25$15$40

Supabase escala mejor en coste porque PostgreSQL no cobra por lecturas — cobra por almacenamiento y compute.

¿Cuál elegiría hoy?

Para un MVP que quiero lanzar en 1 semana: Firebase. El SDK es más rápido de integrar y la curva de aprendizaje es menor.

Para cualquier proyecto que vaya a durar más de 3 meses: Supabase. PostgreSQL es una base de datos seria que no te va a limitar cuando necesites hacer queries complejas, y el vendor lock-in es mínimo.

Para un SaaS con suscripciones y facturación: Supabase sin duda. Necesitas JOINs para reportes, transacciones ACID para pagos, y la capacidad de migrar si Supabase cierra o sube precios.

Si quieres ver cómo estructuré un SaaS con PostgreSQL, lee mi caso real de AtrapaClientes con NestJS y React.

Cómo migré de Firebase a Supabase

1. Auth (1 día)

# Exportar usuarios de Firebase
firebase auth:export users.json --format=json

# Script para importar a Supabase (simplificado)
node migrate-auth.js

Firebase permite exportar los hashes de contraseñas, así que los usuarios no tienen que hacer “olvidé mi contraseña” después de la migración.

2. Datos (2 semanas)

// Script de migración Firestore → PostgreSQL
const meetings = await db.collection('meetings').get();

for (const doc of meetings.docs) {
  const data = doc.data();
  
  await supabase.from('meetings').insert({
    id: doc.id,
    title: data.title,
    organizer_id: data.organizerId,
    date: data.date.toDate(),
    // Flatten subcollections into related tables
    member_ids: data.members || [],
  });
  
  // Migrar subcollection de transcripciones
  const transcriptions = await doc.ref.collection('transcriptions').get();
  for (const trans of transcriptions.docs) {
    await supabase.from('transcriptions').insert({
      meeting_id: doc.id,
      content: trans.data().text,
      created_at: trans.data().createdAt.toDate(),
    });
  }
}

3. Storage (3 días)

# Descargar de Firebase Storage
gsutil -m cp -r gs://my-project.appspot.com/ ./backup/

# Subir a Supabase Storage
# (usé un script con el SDK de Supabase)

4. Reescribir queries (1 semana)

De collection().where().get() a queries SQL con el SDK de Supabase. Esta fue la parte más lenta pero también la más satisfactoria — las queries SQL son más claras y potentes.

Conclusión honesta

Firebase es un producto excelente para prototipar rápido. Pero cuando tu app crece, la factura se descontrola, las Security Rules se vuelven inmanejables, y el vendor lock-in te atrapa.

Supabase requiere más conocimiento inicial (SQL, RLS), pero a cambio te da un stack estándar que puedes migrar a cualquier PostgreSQL del mundo si lo necesitas.

Mi regla: si el proyecto va a durar más de un sprint, empieza con Supabase. Tu yo del futuro te lo agradecerá.

Artículos relacionados

Fran Cobos

Fran Cobos

Desarrollador Full Stack especializado en IA aplicada, automatización y desarrollo web. Escribo sobre herramientas, tutoriales y casos reales para programadores.

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.