Supabase integration

Your leads are scattered across a builder, a CRM and a few CSVs, and none of it joins to your spend. Send every lead into your own Postgres table on Supabase instead, the moment the form is sent.

  • Webhook
  • Landing pages, Quiz funnels, Workflows (beta, by HTTP Request)

Why connect it

Why Supabase and LanderLab

  • Your leads in your own Postgres

    Each lead is a row in a table you own, with your schema and your column types, not a record locked inside someone else's tool.

  • No server to build or host

    Supabase exposes every table through its REST API, so the webhook writes straight to the database. There's no endpoint to code, deploy or watch.

  • An insert-only key, by design

    Row Level Security can limit the webhook's key to adding rows, so it can't read, change or delete a single lead.

  • SQL on lead quality

    With UTMs, click IDs and the A/B variant in columns, one query gives leads by campaign and variant, and a join with your outcomes shows which ones became sales.

  • Ready for your own apps

    A buyer portal or a rep app built on the same project reads the table through its own policies, so a lead your page captured shows up there right away.

Supabase on your landing pages

Serious lead gen operators end up wanting the raw data in a database they control: to join leads with spend, to run SQL on lead quality, to feed a buyer portal or a rep app. Building the endpoint that receives the leads is the part that usually stalls, because someone has to write it and keep it running.

Supabase removes that part. Every table already has a REST endpoint, and LanderLab's webhook posts each lead to it as a flat set of column names and values. Postgres inserts the row, Row Level Security decides what the request may do, and the lead is in your database with the campaign and the variant on it.

A Postgres row per lead, in your schema

The request body is flat, one key per column, so each lead becomes a row with typed columns, a created_at timestamp from the column's default and an id your other systems can reference. Keys that match no column are rejected, which keeps stray data out of the table.

Because it's Postgres, the row is ready for anything SQL does: a view of leads per campaign per day, a join with your cost table, a unique index on email if you'd rather turn away repeat submits than store them twice.

Locked down with Row Level Security

The webhook writes with your project's publishable key, and Row Level Security decides what that key may do. Allow inserts on the leads table and nothing else, and the key can add leads but never read, change or delete them, so lead data stays out of reach even though the key isn't secret.

The secret key, which bypasses Row Level Security, never has to leave your own backend: a lead form doesn't need it.

Your own source of truth for lead quality

Builders, CRMs and trackers each hold part of the story. A Supabase table with every lead and its utm_campaign, click ID, landing page and variant is the part you control. Load daily spend into a second table and a SQL view gives cost per lead by campaign and variant; add the outcomes your buyers or reps record and it gives cost per sale.

That's the honest way to settle a split test: not which variant got more form fills, but which one's leads turned into money.

Leads that survive a failed insert

Every lead is also kept in LanderLab's Leads tab, filterable by date and variant and exportable as CSV on Grow and up, unless Lead Compliance Delivery is on. If an insert ever fails, say after a column was renamed, the lead isn't gone: fix the table and backfill from the export. Send through LanderLab Workflows (beta) instead and the Runs view shows exactly which lead's request failed.

Use cases

Ways to use Supabase on paid traffic

  • 01

    A Medicare lead ledger across every page

    Every Medicare and final expense page inserts into one leads table with the ZIP, plan interest, source and variant. One query shows leads per campaign per day across all of them.

  • 02

    Cost per sale by campaign, in SQL

    Daily spend goes into a spend table and buyer outcomes into another. A view joins all three and ranks campaigns and variants by cost per sold lead, not cost per form fill.

  • 03

    A buyer portal on the same project

    Buyers sign in to a small app on your Supabase project and see only their own leads through Row Level Security, delivered the moment the page inserts them.

FAQ

Supabase integration FAQ

Anything not here, ask us.

Supabase and LanderLab

When is Supabase worth connecting to my landing pages?

When you want your leads in a database you own and can query with SQL: you get a row per lead with the campaign and variant, without building or hosting an endpoint.

Does LanderLab integrate with Supabase?

Yes, through the page's Webhook integration: it posts each lead to your table's REST endpoint.

Do I need a server or Zapier to send leads to Supabase?

No. Supabase's REST API is the endpoint and the webhook writes to it directly.

Is it safe to send leads with a Supabase key?

Yes, with Supabase's publishable key and Row Level Security set to allow inserts only: the key can add leads but can't read or change anything.

Can I send quiz answers, UTMs and click IDs?

Yes. Every quiz answer and every hidden field, like utm_campaign or gclid, can go to its own column, alongside LanderLab's page URL and variant ID.

Other integrations

Plug in the rest of your stack.

Connect Supabase and launch your next page.

Build the page, switch Supabase on and send your ads to it. Free to start, no card.

From one prompt to qualified leads

Watch one prompt become a live solar quote funnel, every lead routed to your buyer, and the leaks flagged before they eat your budget.

0:00
0:59