FAQ
Which Supabase connection string should I use?
Use the Session pooler string. In your Supabase dashboard, click Connect and choose Session pooler:
Host
aws-[region].pooler.supabase.com
Port
5432
Database
postgres
User
postgres.[project-ref]
Password
Your database password (not your Supabase account password)
Coupler.io connects over IPv4. Supabase's direct connection (db.[project-ref].supabase.co) is IPv6-only unless your project has the paid IPv4 add-on, so it usually won't work. The shared pooler is IPv4 on every plan tier.
Don't use the Transaction pooler (port 6543). Transaction mode doesn't support prepared statements or session-level settings, which leads to intermittent, hard-to-diagnose run failures.
Can I load data into a Supabase table that doesn't exist yet?
Yes. Enter any table name and Coupler.io creates it on the first successful run — the same as with any PostgreSQL destination. You can also specify a schema that doesn't exist yet and Coupler.io will create it.
The default postgres role has enough privileges for this. If you connect with a custom, limited role, grant it CREATE on the database and schema first.
Should I load data into the public schema?
Prefer a dedicated schema (for example, coupler or analytics).
Anything in public is exposed through Supabase's Data API, and tables Coupler.io creates have Row Level Security disabled — so they'd be readable by anyone holding your anon key, and Supabase's Security Advisor will flag them. A separate schema stays out of the Data API unless you explicitly add it to Project Settings → API → Exposed schemas.
If you do need tables in public, enable RLS on them after the first run. RLS doesn't block Coupler.io's writes, since the role it connects as bypasses RLS.
How does Coupler.io determine column types?
Coupler.io detects types from your source data and enforces them when writing — numeric fields land as numbers, dates as date types, and so on, rather than everything becoming text. There's no schema auto-detection setting to configure, unlike the BigQuery destination.
If a table already exists with different column types, you may hit type mismatch errors. Letting Coupler.io create the table from scratch is the cleanest way to get properly typed columns.
What's the best write mode for my use case?
Replace — deletes all existing rows and loads fresh data on every run. Best for dashboards and reports that should always reflect the current state of your source.
Append — adds new rows below the existing data without touching what's already there. Best for historical logs and tracking change over time.
If you're unsure, start with Replace and switch to Append once your pipeline is stable.
What are the rules for column names in Supabase?
Standard PostgreSQL rules apply — Supabase doesn't change them. The one that trips people up is the 63-character limit on identifiers. Sources like Facebook (Meta) Ads and Stripe sometimes produce longer field names, which fails the run.
Use the Transformations step to rename affected columns to something shorter before they reach Supabase.
Unlike BigQuery, PostgreSQL does allow spaces and mixed case in column names — but they then require double quotes in every query, so renaming them in Coupler.io is still worth doing.
Can multiple sources send data to the same Supabase project?
Yes, in two ways:
One data flow, multiple sources — use Append, Join, or Aggregate transformations to combine sources before the data lands in Supabase
Multiple data flows — each pointing at the same database but writing to different tables or schemas
Will my data flow fill up my Supabase project?
Worth watching, particularly in Append mode and particularly on the Free plan:
Free plan projects go read-only once the database exceeds 500 MB, which fails subsequent runs
Paid plans autoscale disk as you approach capacity, so this is rarely an issue
To keep size in check, filter or aggregate at the source level, use Replace mode where you don't need history, or periodically archive old rows out of append-only tables.
Will Coupler.io keep my Free plan project from being paused?
Usually, yes. Supabase pauses Free plan projects after roughly 7 days of low activity, and a scheduled Coupler.io data flow counts as database activity — a daily run is generally enough to keep the project awake.
A paused project accepts no connections at all, so if you pause your data flow for a while, restore the project from the Supabase dashboard before resuming it.
Do I need to allowlist Coupler.io's IP addresses?
Only if you've enabled Supabase's Network Restrictions (Project Settings → Database). It uses CIDR notation, so add:
34.123.243.115/3234.170.96.92/32
Restrictions are enforced on pooled and direct connections alike, so switching connection route isn't a workaround.
If you manage restrictions via the Supabase CLI, an update replaces the entire allowlist unless you pass --append. Adding Coupler.io's IPs without it can silently remove your own.
Why did my connection start failing right after I fixed the password?
Supabase temporarily bans client IPs after repeated failed authentication attempts — sometimes as few as two wrong passwords in a row. The ban clears after about 30 minutes, or you can lift it immediately with Unban IP in Project Settings → Database.
Avoid re-running a failing data flow repeatedly, since each attempt can extend the ban.
My data flow times out. Can I extend the limit?
Yes. Supabase caps statements at 2 minutes by default for the postgres role. Raise it from the SQL Editor:
Also consider splitting large flows into smaller sources or filtering at the source level. Note that the Supabase dashboard and client libraries cap out at 60 seconds regardless — that limit doesn't apply to Coupler.io's connection.
Last updated
Was this helpful?
