New
- Supabase views as Live Export sources. Views and materialized views can now feed a Live Export, not just tables. A view without a trustworthy unique column asks you to pick an id field instead of silently guessing wrong.
Better
- Live Export fidelity sweep. The connector audits kept finding the same classes of bug: dates typed as text, references exported as raw ids or JSON, wrapper objects landing as blobs. This week burned them down across six connectors:
- Linear: issues link to their team, project, cycle, assignee, and parent as real relations; workflow state exports as its name ("Backlog"), dates as real date columns, markdown bodies as long text.
- Framer: images and files export their URL instead of an asset JSON blob, galleries land as a joined URL list, and dates keep their time of day.
- Affinity: dropdowns export their label instead of raw JSON, people and company references become real relations, and location fields get readable columns ("Dealroom Location · City") instead of auto-suffixed ones ("City 3").
- WordPress: timestamps keep their time of day, and featured images and page parents are foreign keys now, so media links and page hierarchy survive export.
- Attio: list entries now include the parent record's fields as columns and are named after the parent record, matching what the Attio UI shows.
- Zoho: tag fields are proper arrays, reference fields extract their id cleanly, and modules that can't be pulled no longer clutter the table list.
- Rate limits, actually handled. One throttled request (a 429) could fail an entire run on Stripe, Intercom, Brevo, Memberstack, or QuickBooks: their declared rate limits were never enforced. All five now pace requests to each vendor's documented limits and retry throttled calls with backoff.
Fixed
- An unset number or boolean at the source published as 0 or false. It now stays empty.
- A nonexistent calendar date at the source (Pipedrive happily returns Feb 29 in a non-leap year) failed the whole record on every run. The field is now skipped with a warning and the rest of the record syncs.
- Affinity sync drafts could not be saved: every custom field errored with "field not found in schema". Fixed, along with Copper and GoHighLevel, which share the field shape.
- Publishing to a connector that normalizes what it stores (Notion rich text, dates, slugs) left the edit marked unpublished forever, re-publishing it on every cycle. Accepted edits now clear when the server confirms the publish.
- Attio multiselect values duplicated on every publish. Fixed.
- A field with a dot in its name ("Dealroom.co URL") generated invalid Postgres/Supabase SQL. Fixed.
- Creating an Airtable table with two links to the same target minted duplicate mirror columns, which made the target table unwritable. Links are now created one at a time so Airtable de-duplicates the names.
- Notion: editing a date to an out-of-range value shipped "Invalid DateTime" into Notion, breaking its filters. The guard now fires on updates, not just creates.
- A WordPress plugin that errors on page 1 of a pull could complete the scan with zero records and eventually mark every synced record deleted. The pull now aborts loudly instead.
Under the hood
- Launch prep for Stripe, QuickBooks, and Wix Blog as Live Export sources: new audit tooling plus a burn-down of view and transform bugs on all three.
- References can now name their target by a field other than its id. Framer references resolve by slug; Postgres foreign keys can point at any unique column.
- Security hardening: the web app enforces a Content-Security-Policy, the desktop app drops an over-permissive Electron IPC bridge and hardens Electron fuses, and the load balancers enforce TLS 1.2+ and standard security headers.
- Background jobs run on BullMQ everywhere now; the USE_JOBS flag is gone.