Database

Bolt job data feed

Ship a job board on Bolt without writing a scraper.

Bolt Cloud databases are Supabase-backed PostgreSQL, so Jobo writes to them over the standard Postgres wire protocol — the same canonical table, upsert semantics, and 15-minute incremental sync as any other Postgres destination. Build the front end in Bolt, point the feed at its database, and the jobs table stays current on its own.

Sync
Incremental, every 15 min
Deduplication
Upsert on job ID
Pipelines
Not supported
Credentials
AES-256 at rest

Connection configuration

The fields Jobo collects to reach your Bolt instance.

hoststringrequired

Session pooler host from Supabase (Connect → Session pooler) once your Bolt database is claimed.

portnumberrequired

5432 for the session pooler (recommended), 6543 for the transaction pooler.

databasestringrequired

Target database name. Defaults to "postgres".

schemastring

Target schema, must already exist. Defaults to "public".

tablestring

Target table, created automatically. Defaults to "jobs".

usernamestringrequired

postgres.<project-ref> when connecting through the pooler.

passwordstringrequired

Database password from Project Settings → Database. Encrypted at rest with AES-256.

ssl_modeselect

SSL mode: require (default), verify-ca, verify-full.

delete_expired_jobsboolean

Delete expired jobs (default). Disable to keep them with an expired_at timestamp.

Bolt config
{
  "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
}

How to sync jobs to Bolt

One-time setup. After this, the feed maintains itself.

  1. 1

    Claim your Bolt database in Supabase

    Bolt does not expose a connection string for a database it still manages for you. In your Bolt project open Database → Advanced and choose 'claim your database in Supabase'. This hands the underlying Postgres instance to a Supabase project you control, which is what gives you external credentials. Alternatively, connect a Supabase project you already own — do this before your app holds data you care about, since Bolt warns it replaces the current connection.

  2. 2

    Copy the session pooler credentials

    In the Supabase dashboard open Connect → Session pooler and copy the host, port, database, and username. The password lives under Project Settings → Database. Prefer the pooler host — the direct db.<ref>.supabase.co host is IPv6-only.

    json
    {
      "host": "aws-0-eu-central-1.pooler.supabase.com",
      "port": 5432,
      "database": "postgres",
      "username": "postgres.your-project-ref"
    }
  3. 3

    Point the feed at a dedicated table

    Use a table your Bolt app only reads from, such as public.jobs. Jobo creates it on first sync and upserts on job ID, so re-running a push updates rows in place. Force resync drops and recreates this table, so it must not be one your app writes to itself.

  4. 4

    Read it from your Bolt app

    Once the first push completes it is an ordinary Postgres table in your project. Query it through the Supabase client your Bolt app already uses, or over the REST API Supabase generates for it.

    javascript
    const { data } = await supabase
      .from('jobs')
      .select('title, company, locations, apply_url')
      .order('date_posted', { ascending: false })
      .limit(20)

Common issues

What actually goes wrong when connecting Bolt, and the fix.

high

There is no connection string anywhere in the Bolt database settings.

That is expected while Bolt still manages the database for you. Claim it in Supabase (Database → Advanced) or connect your own Supabase project — either one produces the pooler credentials this destination needs.

high

Connection times out or the host fails to resolve.

You are probably using the direct db.<ref>.supabase.co host, which is IPv6-only. Switch to the session pooler host on port 5432.

medium

Authentication fails with an otherwise correct password.

Through the pooler the username is postgres.<project-ref>, not plain postgres. Copy it verbatim from Connect → Session pooler.

medium

The table your Bolt app wrote to keeps getting wiped.

Force resync drops and recreates the configured table by design. Point the feed at a dedicated table and have your app read from it rather than share one.

Best practices

  • Claim the database in Supabase before building on top of it — migrating later risks data loss.
  • Give the feed its own table and let your Bolt app read from it, never share a table your app writes to.
  • Keep ssl_mode at require or higher; the pooler terminates TLS so it costs nothing.
  • Use location and source filters on the feed so you sync only the jobs your app renders.
  • Index the columns you sort and filter on — the feed creates the table, not your query plan.

Start syncing jobs to Bolt

Connect the destination, pick your filters, and let the feed run.