FAQ
Answers for founders integrating ImportFlow.
Short answers to reduce setup uncertainty before you wire the widget into a real app.
Do I need a real Supabase project to try ImportFlow?
No for the playground. Yes for a real integration. The playground stays browser-local; production widgets require a verified dashboard project.
What is a Project?
A Project represents one connected Supabase app. It stores the Supabase URL and service-role key as an encrypted write-only credential used server-side.
What is an Import Kit?
An Import Kit is a template-specific widget configuration with a destination table, field config, and public embed token.
Is the embed token a secret?
No. It is a public, widget-scoped token. ImportFlow validates it server-side on every widget request, and it never grants dashboard access.
Do failed rows count toward billing?
No. Only inserted rows count toward account usage.
Can I use custom templates?
No. ImportFlow supports CRM Leads, HR Employees, and SaaS Users so the product stays predictable and supportable.
What file size and row limits should I expect?
The production widget uses the current `IMPORT_FILE_LIMITS` values: CSV, XLS, and XLSX files up to 10 MB and 5,000 parsed data rows for one import run. The playground uses its own tighter demo caps: 1 MB and 100 rows. The browser parses the selected file, extracts headers, maps columns, validates rows for review, and builds the upload rows. The server then receives mapped rows in batches, stages them in the connected Supabase project, re-validates them, and promotes valid rows. Very large spreadsheets should be split before import.
What happens if the network drops during an import?
There is no resumable end-user upload flow in the current MVP. If the network drops during job creation, batch upload, staging, finalize, or status polling, the widget surfaces an import failure or status-loading failure. If a job was already created, it may remain non-terminal until it expires or is reconciled from the dashboard. If the drop happens after finalize begins, the server may still finish promotion; check dashboard import history for the final job state. Duplicate batch handling exists server-side, but the UI should not be treated as resumable.
Can ImportFlow map custom enums or foreign-key relations?
Not in the MVP template model. ImportFlow maps file columns to enabled fields from one of the canonical templates and validates those field types, including template-defined enum values. It does not run lookup logic such as turning `company_name` into `company_id`, and it does not fan rows out across related tables. Teams that need lookup or transform logic today should pre-normalize the file before import, import into a compatible flat destination table, or run their own post-import workflow in their app.
Does ImportFlow support non-standard CSV delimiters or odd encodings?
CSV parsing uses the current browser-side parser path, with no delimiter selector or encoding selector in the product UI. Standard CSV files should work; unusual delimiters may produce unexpected columns or mapping failures. XLS and XLSX files are parsed client-side from the first worksheet in the workbook. If a file uses an unusual encoding or spreadsheet export format, convert it to a normal UTF-8 CSV or XLSX before importing.
What is `public._importflow_staging_rows`, and how is it cleaned up?
`public._importflow_staging_rows` is the shared staging table installed in the connected customer Supabase project. It stores per-job staging metadata, row indexes, row payloads, validation errors, row status, and `expires_at` while an import is active. The finalize path attempts best-effort cleanup after it writes a terminal job outcome, and dashboard stale-import reconciliation can also attempt cleanup for expired or reconstructable stale jobs. Treat cleanup as best-effort operational behavior, not a guarantee that every interrupted import removes staging rows immediately.
What does ImportFlow store, and how is customer data handled?
ImportFlow stores account, project, import kit, import job, usage, billing, audit, and webhook metadata in its control plane. It stores customer Supabase credentials encrypted at rest and uses them server-side for configured import operations. Uploaded file retention is not a product feature, and ImportFlow should not permanently store imported row payloads in its control plane after the job lifecycle. Customer destination data is staged and written into the connected customer Supabase project. Billing and subscription management are handled separately through Lemon Squeezy.
What happens if webhook delivery fails?
The import remains completed or failed according to the lifecycle. The delivery row is marked failed, and owners can retry manually from the dashboard.
Ready for the real setup path?
Start in the dashboard, connect Supabase, create a kit, and copy the exact snippet.