Open app

September 15, 2026

Profiles now sync from a mapped database on a schedule; map a data source's table to profiles, compute properties from your own database with a live preview, and define the whole profile on one settings page.

Profiles sync from your database

Admin

A mapped source is now read on a schedule and its rows become profiles. The first sync reads every row of the backing table; after that the source's cursor verdict decides how changes are picked up — every fifteen minutes when the cursor is trustworthy or usable, hourly when it is unindexed, and new rows every fifteen minutes in snapshot mode. A full re-read runs nightly. Values computed from related tables (joined, first row, aggregate, list) are recomputed for every profile on their own Refresh derived values cadence, since a new user on an account changes the account's counts without touching the account row.

Each source's page gains a Sync card: the schedule, the refresh cadence, Sync now, the recent runs with what each read, created, updated and deleted, and the issues the latest run reported with the row's key in your table. The first Sync now reads its first thousand rows before the page comes back and continues in the background. The profiles list says Data as of the last successful run. Every run is recorded in the workspace event log.

The whole profile definition on one page

Admin

Everything that says what a profile is now lives together under Settings → Profiles: its name, its Backing table (which source, which table, which column is the key, how changes are detected, and the row filter), and its properties with how each is computed. The per-source mapping page under Data sources is gone. A workspace with more than one source picks which one to map from a Source selector, with the primary selected by default.

Settings → Data → Data sources keeps only the connection and its schema. Connecting a database now reads the schema automatically; the source's page shows when it was read, offers Refresh schema, and opens the whole capture — every table, column, key and reference — in a View schema dialog.

Built-in fields are computed like any property

Admin

Display name, email, domain and signed up are no longer column pickers on the backing table. They sit at the top of the property list as locked rows, and Compute on any of them opens the same expression dialog a declared property uses — every shape, the five-row preview, the cost verdict. An account's email can now be the email of its first user, through the users table, instead of a column the accounts table happens to have. Opening the dialog on an unmapped field prefills the obvious column; Clear unmaps it. They save with Save properties, and a workspace with an additional source lists each mapped source on the row.

Admin

A fifth expression shape, First related row, reads a column off the first of the rows that point back at the backing row — the email of the earliest user on an account, the amount of the most recent invoice. Choose the related table, the column, the order that decides which row is first, and optionally a filter. It is the reverse direction of Joined value, for the case where there may be several related rows and one has to be picked.

Map a data source to profiles

Admin

Every connected PostgreSQL source can now be mapped to profiles. Read the database schema, choose the table whose rows become profiles and the column that identifies a row, and compute the built-in fields — display name, email, domain, signed-up date — from it. A row filter keeps test accounts and internal staff out of the workspace entirely.

Before saving, Preview shows the five most recent rows the mapping would produce alongside two verdicts:

  • Cursor grades the column changes are detected by — trustworthy, usable, unindexed, or snapshot mode — and offers a ready-to-run index recipe when one would speed things up.
  • Cost is the database planner's own estimate of the statement Uptend will run at sync time, so an expensive mapping is visible before it is scheduled.

Compute properties from your database

Admin

Properties on Settings → Profiles can now be computed rather than filled by hand. Click Compute on a property to choose one of four shapes: a column on the backing table, a value on a joined row, an aggregate over related rows (optionally windowed to the last N days and filtered), or a bounded list of related rows for a JSON property. Every expression runs read-only in your own database, is checked against the captured schema, and previews on five real profiles with the planner's cost verdict before you save.

The built-in fields (source key, display name, email, domain, signed up) appear at the top of the property list as locked rows, showing how each one is computed.

On this page