Supabase-connector

Verbind je Supabase-project om databaserecords, gebruikersauthenticatiedata, file storage-events en realtime wijzigingen te synchroniseren voor automatisering van klantbetrokkenheid.

Overzicht

EigenschapWaarde
PlatformSupabase
CategorieDatabase & Backend
SetupcomplexiteitEenvoudig
Officiële integratieJa
Gesynchroniseerde dataGebruikers, Tabellen, Storage, Events
Beschikbare skills11
API-typeREST (PostgREST) + Realtime WebSocket
Officiële docssupabase.com/docs

Functies

  • Auto-gegenereerde REST API, CRUD-operaties op elke Postgres-tabel via PostgREST, geen code nodig
  • Auth-gebruikersynchronisatie, Synchroniseer Supabase Auth-gebruikers (email, telefoon, social logins) naar je engagementplatform
  • Realtime subscriptions, Luister realtime naar INSERT-, UPDATE- en DELETE-events op elke tabel
  • Row Level Security, Alle API-toegang respecteert Postgres RLS-policies voor veilige multi-tenant data
  • Storage-integratie, Volg file uploads en beheer assets in Storage-buckets
  • Edge Functions, Roep serverless Deno-functies aan voor custom logic en webhooks
  • Full-text search, Maak gebruik van Postgres full-text search via de API

Vereisten

Voordat je begint, zorg dat je beschikt over:

  1. Een Supabase-project (app.supabase.com)
  2. De API URL en API keys van je project (te vinden in Settings → API)
  3. Een Tajo-account met API-toegang

API Keys

Supabase biedt twee keys: anon (publiek, respecteert RLS) en service_role (omzeilt RLS, admin-toegang). Gebruik service_role voor server-side integraties en anon voor client-side.

Authenticatie

Supabase gebruikt API key-authenticatie. Elke request vereist de apikey-header en optioneel een Authorization bearer token voor user-scoped toegang.

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>"

Configuratie

Basisinstelling

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

Veldmapping

Map Supabase-tabelkolommen naar attributen van het engagementplatform:

Standaard gebruikersmappings

Parameter Type Description
email required
string

Gebruikers-e-mail uit Supabase Auth (unieke identifier)

phone optional
string

Telefoonnummer voor SMS/WhatsApp-engagement

user_metadata.full_name optional
string

Displaynaam uit Auth user metadata

user_metadata.avatar_url optional
string

URL van profielafbeelding

created_at optional
timestamp

Tijdstempel van account-aanmaak

last_sign_in_at optional
timestamp

Meest recente login voor engagement-scoring

app_metadata.provider optional
string

Auth-provider (email, google, github, etc.)

confirmed_at optional
timestamp

Tijdstempel van e-mailbevestiging

Custom tabelmapping

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

De Supabase REST API wordt automatisch gegenereerd vanuit je databaseschema op https://<ref>.supabase.co/rest/v1/.

EndpointMethodBeschrijving
/rest/v1/{table}GETRijen queryen met filtering, ordering, paginering
/rest/v1/{table}POSTRijen invoegen (ondersteunt bulk en upsert)
/rest/v1/{table}PATCHRijen bijwerken die aan filters voldoen
/rest/v1/{table}DELETERijen verwijderen die aan filters voldoen
/rest/v1/rpc/{function}POSTEen Postgres-functie aanroepen
/auth/v1/signupPOSTEen nieuwe gebruiker aanmaken
/auth/v1/token?grant_type=passwordPOSTInloggen met wachtwoord
/auth/v1/userGETHuidige gebruiker ophalen
/auth/v1/admin/usersGETAlle gebruikers opvragen (service_role)
/storage/v1/object/{bucket}/{path}POSTBestand uploaden
/storage/v1/object/list/{bucket}POSTBestanden in bucket opvragen
/functions/v1/{function_name}POSTEdge Function aanroepen

Filteringsoperatoren

OperatorBeschrijvingVoorbeeld
eqGelijk aan?status=eq.active
neqNiet gelijk aan?status=neq.deleted
gt, gteGroter dan?amount=gt.100
lt, lteKleiner dan?created_at=lt.2024-01-01
like, ilikePattern match?name=ilike.%john%
inIn array?status=in.(active,trial)
isNull check?deleted_at=is.null

Events

Auth-events

EventTriggerUse case
user.signed_upNieuwe gebruikersregistratieWelkomstreeks
user.signed_inGebruikersloginActiviteitstracking
user.updatedProfielwijzigingenDatasynchronisatie
user.deletedAccount verwijderdCleanup-workflows

Database-events (Realtime)

EventTriggerUse case
INSERTNieuwe rij toegevoegdNotificaties voor nieuwe order/klant
UPDATERij gewijzigdWorkflows voor statuswijziging
DELETERij verwijderdChurn-detectie

Webhook-events

EventTriggerUse case
auth.user.createdGebruikersregistratie via webhookOnboarding triggeren
storage.object.createdBestand geüploadAsset-verwerking

Codevoorbeelden

Connector initialiseren

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,
});

Gebruikers synchroniseren naar contacten

// 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',
});

Realtime wijzigingen beluisteren

// 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();

Queryen en segmenteren

// 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

Supabase-rate limits hangen af van je plan. Free tier: 500 requests/minuut. Pro: 1.000 requests/seconde. Neem contact op met Supabase voor Enterprise-limieten.

PlanRate LimitRealtime-verbindingen
Free500 req/min200 gelijktijdig
Pro1.000 req/s500 gelijktijdig
Team2.000 req/s1.000 gelijktijdig
EnterpriseCustomCustom

Probleemoplossing

Veelvoorkomende problemen

ProbleemOorzaakOplossing
401 UnauthorizedOngeldige of verlopen API keyControleer API keys in Supabase Dashboard → Settings → API
403 ForbiddenRLS-policy blokkeert toegangGebruik service_role-key voor admin-operaties of controleer RLS-policies
Geen realtime eventsRealtime niet ingeschakeld voor tabelSchakel in via Database → Replication → tabel toevoegen aan publication
Lege query-resultatenRLS filtert alle rijen wegVerifieer dat RLS-policies de geauthenticeerde rol leestoegang geven
Storage-upload misluktBucket-policiesControleer of Storage-bucket publiek is of correcte RLS-policies heeft

Debugmodus

connectors:
supabase:
debug: true
log_level: verbose
log_queries: true
log_realtime: true

Verbinding 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. Gebruik service_role-key alleen server-side, Stel deze nooit bloot in client-code
  2. Schakel RLS in op alle tabellen, Ontwerp ook met service_role volgens RLS voor defense in depth
  3. Gebruik Realtime voor event-gedreven sync, Efficiënter dan pollen voor wijzigingen
  4. Batch-operaties, Gebruik bulk inserts en de in-filter voor operaties met hoog volume
  5. Map user metadata, Sla engagement-relevante velden op in user_metadata tijdens signup
  6. Gebruik Edge Functions voor webhooks, Verwerk binnenkomende webhooks met Supabase Edge Functions voor lage latency

Beveiliging

  • API key-authenticatie, Alle requests vereisen geldige API keys
  • Row Level Security (RLS), Postgres-native toegangscontrole per rij
  • JWT-verificatie, Auth-tokens zijn gesigneerde JWT’s, geverifieerd bij elke request
  • SSL/TLS, Alle verbindingen versleuteld tijdens transport
  • SOC 2 Type II, Supabase is SOC 2-compliant
  • Netwerkrestricties, Optionele IP-allowlisting op betaalde plannen

Gerelateerde bronnen

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hallo! Stel me vragen over de documentatie.