> ## Documentation Index
> Fetch the complete documentation index at: https://jobo.world/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Supabase

> Sync job data straight into your Supabase Postgres database.

Supabase is hosted PostgreSQL, so this destination writes over the standard
Postgres wire protocol — the same canonical table, upsert semantics, and sync
behavior as the [PostgreSQL](/docs/data-platform/outbound-feed/postgresql)
destination.

## Connection Configuration

| Field                 | Type    | Required | Description                                                                    |
| --------------------- | ------- | -------- | ------------------------------------------------------------------------------ |
| `host`                | string  | ✅        | Session pooler host, e.g. `aws-0-eu-central-1.pooler.supabase.com`             |
| `port`                | number  | ✅        | `5432` for the session pooler (recommended), `6543` for the transaction pooler |
| `database`            | string  | ✅        | Database name (default: `postgres`)                                            |
| `schema`              | string  | —        | Target schema, must already exist (default: `public`)                          |
| `table`               | string  | —        | Target table, created automatically (default: `jobs`)                          |
| `username`            | string  | ✅        | `postgres.<project-ref>` through the pooler, plain `postgres` for direct       |
| `password`            | string  | ✅        | Database password from Project Settings → Database                             |
| `ssl_mode`            | enum    | —        | `require` (default), `verify-ca`, `verify-full`                                |
| `delete_expired_jobs` | boolean | —        | Delete expired jobs (default: `true`). When `false`, they keep an `expired_at` |

## Example Configuration

```json theme={null}
{
  "host": "aws-0-eu-central-1.pooler.supabase.com",
  "port": 5432,
  "database": "postgres",
  "schema": "public",
  "table": "jobs",
  "username": "postgres.your-project-ref",
  "password": "••••••••",
  "ssl_mode": "require",
  "delete_expired_jobs": true
}
```

## Setup Requirements

<Steps>
  <Step title="Copy the pooler connection details">
    In the Supabase dashboard, open **Connect → Session pooler**. Copy the host,
    port, database, and username from there.

    Prefer the pooler host over the direct `db.<ref>.supabase.co` host — the
    direct host is IPv6-only and will fail to resolve from most networks.
  </Step>

  <Step title="Get the database password">
    Your database password lives under **Project Settings → Database**. Reset it
    there if you no longer have it.
  </Step>

  <Step title="Keep SSL on">
    Leave `ssl_mode` at `require` or higher. Supabase terminates TLS on the
    pooler, so this costs nothing and keeps data encrypted in transit.
  </Step>
</Steps>

<Tip>
  The target table is created automatically on first sync if it doesn't exist,
  and Jobo upserts on job ID to deduplicate. Use a dedicated table rather than
  one your app writes to itself — **Force resync** drops and recreates it.
</Tip>

Credentials are encrypted at rest with AES-256. See
[Security](/docs/data-platform/outbound-feed/security) for details, and
[Sync behavior](/docs/data-platform/outbound-feed/sync-behavior) for how incremental
pushes, full resyncs, and expiry are handled.
