Supabase Connector

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

EigenschaftWert
PlattformSupabase
KategorieDatabase & Backend
EinrichtungsaufwandEinfach
Offizielle IntegrationJa
Synchronisierte DatenNutzer:innen, Tabellen, Storage, Events
Verfügbare Skills11
API-TypREST (PostgREST) + Realtime WebSocket
Offizielle Docssupabase.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:

  1. Ein Supabase-Projekt (app.supabase.com)
  2. Die API-URL und API-Schlüssel deines Projekts (zu finden unter Settings → API)
  3. 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.

Terminal window
# 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_DATE

Feld-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_items

API-Endpoints

Die Supabase-REST-API wird automatisch aus deinem Datenbankschema unter https://<ref>.supabase.co/rest/v1/ generiert.

EndpointMethodeBeschreibung
/rest/v1/{table}GETZeilen mit Filterung, Sortierung, Pagination abfragen
/rest/v1/{table}POSTZeilen einfügen (unterstützt Bulk und Upsert)
/rest/v1/{table}PATCHZeilen anhand von Filtern aktualisieren
/rest/v1/{table}DELETEZeilen anhand von Filtern löschen
/rest/v1/rpc/{function}POSTPostgres-Funktion aufrufen
/auth/v1/signupPOSTNeue Nutzer:in anlegen
/auth/v1/token?grant_type=passwordPOSTMit Passwort einloggen
/auth/v1/userGETAktuelle Nutzer:in abrufen
/auth/v1/admin/usersGETAlle Nutzer:innen auflisten (service_role)
/storage/v1/object/{bucket}/{path}POSTDatei hochladen
/storage/v1/object/list/{bucket}POSTDateien im Bucket auflisten
/functions/v1/{function_name}POSTEdge Function aufrufen

Filter-Operatoren

OperatorBeschreibungBeispiel
eqGleich?status=eq.active
neqUngleich?status=neq.deleted
gt, gteGrößer als?amount=gt.100
lt, lteKleiner als?created_at=lt.2024-01-01
like, ilikePattern-Match?name=ilike.%john%
inIn Array?status=in.(active,trial)
isNull-Prüfung?deleted_at=is.null

Events

Auth-Events

EventTriggerAnwendungsfall
user.signed_upNeue Nutzer:innen-RegistrierungWelcome-Serie
user.signed_inLoginActivity-Tracking
user.updatedProfiländerungenDaten-Synchronisation
user.deletedAccountlöschungCleanup-Workflows

Datenbank-Events (Realtime)

EventTriggerAnwendungsfall
INSERTNeue Zeile hinzugefügtBenachrichtigungen zu neuen Bestellungen/Kund:innen
UPDATEZeile geändertStatus-Change-Workflows
DELETEZeile entferntChurn-Erkennung

Webhook-Events

EventTriggerAnwendungsfall
auth.user.createdNutzer:innen-Signup via WebhookOnboarding auslösen
storage.object.createdDatei hochgeladenAsset-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 project
await 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 contacts
await 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 triggers
const 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 campaigns
const { 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 targeting
await 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.

TarifRate LimitRealtime-Verbindungen
Free500 Anfr./Min200 gleichzeitig
Pro1.000 Anfr./Sek500 gleichzeitig
Team2.000 Anfr./Sek1.000 gleichzeitig
EnterpriseIndividuellIndividuell

Fehlerbehebung

Häufige Probleme

ProblemUrsacheLösung
401 UnauthorizedUngültiger oder abgelaufener API-SchlüsselAPI-Schlüssel im Supabase Dashboard → Settings → API prüfen
403 ForbiddenRLS-Richtlinie blockiert Zugriffservice_role-Schlüssel für Admin-Operationen nutzen oder RLS-Richtlinien prüfen
Keine Realtime-EventsRealtime nicht für Tabelle aktiviertUnter Database → Replication → Tabelle zur Publication hinzufügen
Leere Query-ErgebnisseRLS filtert alle ZeilenSicherstellen, dass RLS-Richtlinien Lesezugriff für die authentifizierte Rolle erlauben
Storage-Upload schlägt fehlBucket-RichtlinienPrü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: true

Verbindung testen

Terminal window
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

  1. service_role-Schlüssel nur serverseitig nutzen, Lege ihn nie in Client-Code offen
  2. RLS auf allen Tabellen aktivieren, Auch mit service_role: Gestalte mit RLS für Defense in Depth
  3. Realtime für eventgetriebene Synchronisation, Effizienter als Polling auf Änderungen
  4. Operationen bündeln, Nutze Bulk-Inserts und den in-Filter für Operationen mit hohem Volumen
  5. User-Metadaten mappen, Speichere engagement-relevante Felder beim Signup in user_metadata
  6. 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

Verwandte Ressourcen

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI-Assistent

Hallo! Fragen Sie mich alles über die Dokumentation.