---
title: "Supabase-connector"
description: "Volledige Supabase-integratiegids voor het synchroniseren van databaserecords, user auth, file storage en realtime events met je engagementplatform."
url: https://tajo.io/nl/docs/connectors/custom/supabase/
markdown: https://tajo.io/nl/docs/connectors/custom/supabase.md
lang: nl-NL
robots: noindex
---

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

# Supabase-connector

Connectorstatus: Gepland Nog niet gebouwd. Tajo draait deze connector vandaag niet.

| Bronveld | Doelveld | Voorbeeldwaarde |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

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

## Overzicht

| Eigenschap | Waarde |
| --- | --- |
| **Platform** | Supabase |
| **Categorie** | Database & Backend |
| **Setupcomplexiteit** | Eenvoudig |
| **Officiële integratie** | Nee |
| **Gesynchroniseerde data** | Gebruikers, Tabellen, Storage, Events |
| **Beschikbare skills** | 11 |
| **API-type** | REST (PostgREST) + Realtime WebSocket |
| **Officiële docs** | [supabase.com/docs](https://supabase.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](https://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.

```bash
# 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

```yaml
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

```yaml
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/`.

| Endpoint | Method | Beschrijving |
| --- | --- | --- |
| `/rest/v1/{table}` | `GET` | Rijen queryen met filtering, ordering, paginering |
| `/rest/v1/{table}` | `POST` | Rijen invoegen (ondersteunt bulk en upsert) |
| `/rest/v1/{table}` | `PATCH` | Rijen bijwerken die aan filters voldoen |
| `/rest/v1/{table}` | `DELETE` | Rijen verwijderen die aan filters voldoen |
| `/rest/v1/rpc/{function}` | `POST` | Een Postgres-functie aanroepen |
| `/auth/v1/signup` | `POST` | Een nieuwe gebruiker aanmaken |
| `/auth/v1/token?grant_type=password` | `POST` | Inloggen met wachtwoord |
| `/auth/v1/user` | `GET` | Huidige gebruiker ophalen |
| `/auth/v1/admin/users` | `GET` | Alle gebruikers opvragen (service\_role) |
| `/storage/v1/object/{bucket}/{path}` | `POST` | Bestand uploaden |
| `/storage/v1/object/list/{bucket}` | `POST` | Bestanden in bucket opvragen |
| `/functions/v1/{function_name}` | `POST` | Edge Function aanroepen |

### Filteringsoperatoren

| Operator | Beschrijving | Voorbeeld |
| --- | --- | --- |
| `eq` | Gelijk aan | `?status=eq.active` |
| `neq` | Niet gelijk aan | `?status=neq.deleted` |
| `gt`, `gte` | Groter dan | `?amount=gt.100` |
| `lt`, `lte` | Kleiner dan | `?created_at=lt.2024-01-01` |
| `like`, `ilike` | Pattern match | `?name=ilike.%john%` |
| `in` | In array | `?status=in.(active,trial)` |
| `is` | Null check | `?deleted_at=is.null` |

## Events

### Auth-events

| Event | Trigger | Use case |
| --- | --- | --- |
| `user.signed_up` | Nieuwe gebruikersregistratie | Welkomstreeks |
| `user.signed_in` | Gebruikerslogin | Activiteitstracking |
| `user.updated` | Profielwijzigingen | Datasynchronisatie |
| `user.deleted` | Account verwijderd | Cleanup-workflows |

### Database-events (Realtime)

| Event | Trigger | Use case |
| --- | --- | --- |
| `INSERT` | Nieuwe rij toegevoegd | Notificaties voor nieuwe order/klant |
| `UPDATE` | Rij gewijzigd | Workflows voor statuswijziging |
| `DELETE` | Rij verwijderd | Churn-detectie |

### Webhook-events

| Event | Trigger | Use case |
| --- | --- | --- |
| `auth.user.created` | Gebruikersregistratie via webhook | Onboarding triggeren |
| `storage.object.created` | Bestand geüpload | Asset-verwerking |

## Codevoorbeelden

### Connector initialiseren

```javascript
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

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

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

```javascript
// 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.

| Plan | Rate Limit | Realtime-verbindingen |
| --- | --- | --- |
| Free | 500 req/min | 200 gelijktijdig |
| Pro | 1.000 req/s | 500 gelijktijdig |
| Team | 2.000 req/s | 1.000 gelijktijdig |
| Enterprise | Custom | Custom |

## Probleemoplossing

### Veelvoorkomende problemen

| Probleem | Oorzaak | Oplossing |
| --- | --- | --- |
| 401 Unauthorized | Ongeldige of verlopen API key | Controleer API keys in Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS-policy blokkeert toegang | Gebruik `service_role`-key voor admin-operaties of controleer RLS-policies |
| Geen realtime events | Realtime niet ingeschakeld voor tabel | Schakel in via Database → Replication → tabel toevoegen aan publication |
| Lege query-resultaten | RLS filtert alle rijen weg | Verifieer dat RLS-policies de geauthenticeerde rol leestoegang geven |
| Storage-upload mislukt | Bucket-policies | Controleer of Storage-bucket publiek is of correcte RLS-policies heeft |

### Debugmodus

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

### Verbinding testen

```bash
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

- [Shopify-connector](https://tajo.io/nl/docs/connectors/ecommerce/shopify)
- [Stripe-connector](https://tajo.io/nl/docs/connectors/ecommerce/stripe)
- [Auth0-connector](https://tajo.io/nl/docs/connectors/custom/auth0)
- [Supabase Official Docs](https://supabase.com/docs)
- [Supabase REST API Guide](https://supabase.com/docs/guides/api)
- [Supabase Auth Guide](https://supabase.com/docs/guides/auth)
