Supabase Connector
Connector-Status: Geplant Noch nicht gebaut. Tajo betreibt diesen Connector heute nicht.
Illustration · Beispieldaten
Sync-Beispiel
Quelle
Supabase
Connector-Status: Geplant
Ziel
Ihr anderes Tool
Connector-Status: Eigenes Tool
Feldzuordnung
| Quellfeld | Zielfeld | Beispielwert |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Entwerfen
- Einen Datensatz prüfen
- Diese Version freigeben
Der Status gilt für einzelne Connectoren und garantiert nicht, dass dieser Sync bereit ist. Felder zur Veranschaulichung. Prüfen Sie vor dem Sync das tatsächliche Schema und die Berechtigungen.
Verbinde dein Supabase-Projekt, um Datenbank-Datensätze, Nutzer:innen-Authentifizierungsdaten, File-Storage-Events und Echtzeit-Änderungen für die Automation deines Customer Engagements zu synchronisieren.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | Supabase |
| Kategorie | Database & Backend |
| Einrichtungsaufwand | Einfach |
| Offizielle Integration | Nein |
| Synchronisierte Daten | Nutzer:innen, Tabellen, Storage, Events |
| Verfügbare Skills | 11 |
| API-Typ | REST (PostgREST) + Realtime WebSocket |
| Offizielle Docs | supabase.com/docs |
Funktionen
- Automatisch generierte REST-API, CRUD-Operationen auf jeder Postgres-Tabelle via PostgREST, kein Code erforderlich
- Auth-User-Synchronisation, Synchronisiere Supabase-Auth-Nutzer:innen (E-Mail, Telefon, Social Logins) mit deiner Engagement-Plattform
- Echtzeit-Subscriptions, Lausche in Echtzeit auf INSERT-, UPDATE-, DELETE-Events auf jeder Tabelle
- Row Level Security, Jeglicher API-Zugriff respektiert Postgres-RLS-Richtlinien für sichere Multi-Tenant-Daten
- Storage-Integration, Tracke File-Uploads und verwalte Assets über Storage Buckets
- Edge Functions, Rufe serverlose Deno-Funktionen für Custom-Logik und Webhooks auf
- Full-Text Search, Nutze die Volltextsuche-Funktionen von Postgres über die API
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Ein Supabase-Projekt (app.supabase.com)
- Die API-URL und API-Schlüssel deines Projekts (zu finden unter Settings → API)
- Ein Tajo-Konto mit API-Zugriff
API-Schlüssel
Supabase stellt zwei Schlüssel bereit: anon (öffentlich, respektiert RLS) und service_role (umgeht RLS, Admin-Zugriff). Nutze service_role für serverseitige Integrationen und anon für den Client.
Authentifizierung
Supabase nutzt API-Schlüssel-Authentifizierung. Jede Anfrage erfordert den apikey-Header und optional einen Authorization-Bearer-Token für nutzerspezifischen Zugriff.
# Using anon key (respects RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_ANON_KEY>" \ -H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Using service_role key (bypasses RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \ -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"Konfiguration
Grundeinrichtung
connectors: supabase: enabled: true project_url: "https://xyzcompany.supabase.co" api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Data sync options sync: users: true tables: - customers - orders - products storage: true realtime: true
# Map Supabase Auth users to contacts user_mapping: email: email phone: SMS user_metadata.full_name: FIRSTNAME created_at: SIGNUP_DATEFeld-Mapping
Mappe Supabase-Tabellenspalten auf Engagement-Plattform-Attribute:
Standard-Nutzer:innen-Mappings
| Parameter | Type | Description |
|---|---|---|
email required | string | Nutzer:innen-E-Mail aus Supabase Auth (eindeutiger Identifier) |
phone optional | string | Telefonnummer fürs SMS-/WhatsApp-Engagement |
user_metadata.full_name optional | string | Anzeigename aus den Auth-User-Metadaten |
user_metadata.avatar_url optional | string | URL des Profilbilds |
created_at optional | timestamp | Zeitstempel der Account-Erstellung |
last_sign_in_at optional | timestamp | Letzter Login fürs Engagement-Scoring |
app_metadata.provider optional | string | Auth-Provider (email, google, github, etc.) |
confirmed_at optional | timestamp | Zeitstempel der E-Mail-Bestätigung |
Custom-Tabellen-Mapping
table_mapping: customers: # Column → Attribute mapping email: email full_name: FIRSTNAME company: COMPANY plan: SUBSCRIPTION_PLAN mrr: MONTHLY_REVENUE created_at: SIGNUP_DATE
orders: # Track as events sync_as: events event_name: "order_placed" properties: total: amount status: order_status items: line_itemsAPI-Endpoints
Die Supabase-REST-API wird automatisch aus deinem Datenbankschema unter https://<ref>.supabase.co/rest/v1/ generiert.
| Endpoint | Methode | Beschreibung |
|---|---|---|
/rest/v1/{table} | GET | Zeilen mit Filterung, Sortierung, Pagination abfragen |
/rest/v1/{table} | POST | Zeilen einfügen (unterstützt Bulk und Upsert) |
/rest/v1/{table} | PATCH | Zeilen anhand von Filtern aktualisieren |
/rest/v1/{table} | DELETE | Zeilen anhand von Filtern löschen |
/rest/v1/rpc/{function} | POST | Postgres-Funktion aufrufen |
/auth/v1/signup | POST | Neue Nutzer:in anlegen |
/auth/v1/token?grant_type=password | POST | Mit Passwort einloggen |
/auth/v1/user | GET | Aktuelle Nutzer:in abrufen |
/auth/v1/admin/users | GET | Alle Nutzer:innen auflisten (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Datei hochladen |
/storage/v1/object/list/{bucket} | POST | Dateien im Bucket auflisten |
/functions/v1/{function_name} | POST | Edge Function aufrufen |
Filter-Operatoren
| Operator | Beschreibung | Beispiel |
|---|---|---|
eq | Gleich | ?status=eq.active |
neq | Ungleich | ?status=neq.deleted |
gt, gte | Größer als | ?amount=gt.100 |
lt, lte | Kleiner als | ?created_at=lt.2024-01-01 |
like, ilike | Pattern-Match | ?name=ilike.%john% |
in | In Array | ?status=in.(active,trial) |
is | Null-Prüfung | ?deleted_at=is.null |
Events
Auth-Events
| Event | Trigger | Anwendungsfall |
|---|---|---|
user.signed_up | Neue Nutzer:innen-Registrierung | Welcome-Serie |
user.signed_in | Login | Activity-Tracking |
user.updated | Profiländerungen | Daten-Synchronisation |
user.deleted | Accountlöschung | Cleanup-Workflows |
Datenbank-Events (Realtime)
| Event | Trigger | Anwendungsfall |
|---|---|---|
INSERT | Neue Zeile hinzugefügt | Benachrichtigungen zu neuen Bestellungen/Kund:innen |
UPDATE | Zeile geändert | Status-Change-Workflows |
DELETE | Zeile entfernt | Churn-Erkennung |
Webhook-Events
| Event | Trigger | Anwendungsfall |
|---|---|---|
auth.user.created | Nutzer:innen-Signup via Webhook | Onboarding auslösen |
storage.object.created | Datei hochgeladen | Asset-Verarbeitung |
Code-Beispiele
Connector initialisieren
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Connect Supabase projectawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Nutzer:innen mit Kontakten synchronisieren
// Sync all Supabase Auth users as contactsawait tajo.connectors.sync('supabase', { type: 'full', resources: ['users'],});
// Incremental sync (new/changed users only)await tajo.connectors.sync('supabase', { type: 'incremental', resources: ['users'], since: '2024-01-01T00:00:00Z',});Auf Echtzeit-Änderungen lauschen
// Subscribe to new orders for engagement triggersconst supabase = createClient( process.env.SUPABASE_URL, process.env.SUPABASE_SERVICE_ROLE_KEY);
supabase .channel('orders') .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'orders' }, async (payload) => { // Forward to Tajo as an event await tajo.events.track({ email: payload.new.customer_email, event: 'order_placed', properties: { order_id: payload.new.id, total: payload.new.total, items: payload.new.line_items, }, }); } ) .subscribe();Abfragen und segmentieren
// Query customers by plan for targeted campaignsconst { data: proUsers } = await supabase .from('customers') .select('email, full_name, plan, mrr') .eq('plan', 'pro') .gt('mrr', 100) .order('mrr', { ascending: false });
// Sync to a Brevo list for campaign targetingawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Rate Limits
API-Rate-Limits
Die Rate Limits von Supabase hängen von deinem Tarif ab. Free: 500 Anfragen/Minute. Pro: 1.000 Anfragen/Sekunde. Für Enterprise-Limits wende dich an Supabase.
| Tarif | Rate Limit | Realtime-Verbindungen |
|---|---|---|
| Free | 500 Anfr./Min | 200 gleichzeitig |
| Pro | 1.000 Anfr./Sek | 500 gleichzeitig |
| Team | 2.000 Anfr./Sek | 1.000 gleichzeitig |
| Enterprise | Individuell | Individuell |
Fehlerbehebung
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| 401 Unauthorized | Ungültiger oder abgelaufener API-Schlüssel | API-Schlüssel im Supabase Dashboard → Settings → API prüfen |
| 403 Forbidden | RLS-Richtlinie blockiert Zugriff | service_role-Schlüssel für Admin-Operationen nutzen oder RLS-Richtlinien prüfen |
| Keine Realtime-Events | Realtime nicht für Tabelle aktiviert | Unter Database → Replication → Tabelle zur Publication hinzufügen |
| Leere Query-Ergebnisse | RLS filtert alle Zeilen | Sicherstellen, dass RLS-Richtlinien Lesezugriff für die authentifizierte Rolle erlauben |
| Storage-Upload schlägt fehl | Bucket-Richtlinien | Prüfen, ob Storage-Bucket öffentlich ist oder korrekte RLS-Richtlinien hat |
Debug-Modus
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueVerbindung testen
tajo connectors test supabase# ✓ API connection successful# ✓ Auth endpoint accessible# ✓ Tables readable (12 tables found)# ✓ Storage accessible (3 buckets)# ✓ Realtime connection established# ✓ Edge Functions available (4 functions)Best Practices
- service_role-Schlüssel nur serverseitig nutzen, Lege ihn nie in Client-Code offen
- RLS auf allen Tabellen aktivieren, Auch mit service_role: Gestalte mit RLS für Defense in Depth
- Realtime für eventgetriebene Synchronisation, Effizienter als Polling auf Änderungen
- Operationen bündeln, Nutze Bulk-Inserts und den
in-Filter für Operationen mit hohem Volumen - User-Metadaten mappen, Speichere engagement-relevante Felder beim Signup in
user_metadata - Edge Functions für Webhooks nutzen, Verarbeite eingehende Webhooks mit Supabase Edge Functions für niedrige Latenz
Sicherheit
- API-Schlüssel-Authentifizierung, Alle Anfragen erfordern gültige API-Schlüssel
- Row Level Security (RLS), Postgres-nativer Zugriffsschutz pro Zeile
- JWT-Verifikation, Auth-Tokens sind signierte JWTs und werden bei jeder Anfrage verifiziert
- SSL/TLS, Alle Verbindungen während der Übertragung verschlüsselt
- SOC 2 Type II, Supabase ist SOC-2-konform
- Network Restrictions, Optionales IP-Allowlisting in kostenpflichtigen Tarifen