Relationsheet

Your data already has relationships. Your spreadsheet doesn’t know about them.

Relationsheet keeps the grid your team can already use and puts a real relational database underneath it. Then it gives that base four ways out — forms and apps for the people outside it, automations and scripts for the work nobody wants, and documents written from the records themselves.

No card. No trial clock.
Project management, accounting, forms, apps,
automations and documents are in the base
product — not sold back to you as modules.

Built in, not bolted on

Pick an account. The last two columns were never stored.

They are a count and a sum computed across the relations at the moment you select a row. That is the difference between a lookup column and a relational database: you stop maintaining the totals, because nothing is maintaining them now.

One base · three tables · pick an account and the relations drawsynthetic data

Accounts

6 records
AccountTierOpenLinked
Halvorsen MillworkEnterprise2$134,000
Cordell FreightEnterprise3$188,500
Ardent DiagnosticsTeam1$72,000
Peakline UtilitiesTeam2$89,500
Verrow StudiosStarter1$14,750
Brightsill FoodsTeam2$49,750

Open = COUNT(Projects → Account) where Status ≠ Delivered
Linked = SUM(Invoices → Account, Amount)

Projects

2 of 12
ProjectAccountStatus
Plant floor rolloutHalvorsen MillworkActive
Finishing line retoolHalvorsen MillworkPlanning
Depot network auditCordell FreightActive
Driver intake redesignCordell FreightBlocked
Lab sample trackingArdent DiagnosticsActive
Accreditation evidenceArdent DiagnosticsDelivered
Outage response drillPeakline UtilitiesActive
Meter data migrationPeakline UtilitiesPlanning
Post house schedulingVerrow StudiosActive
Cold chain complianceBrightsill FoodsBlocked
Depot 4 fit-outCordell FreightPlanning
Supplier scorecardsBrightsill FoodsActive

Invoices

3 of 13
NumberIssuedAmount
INV-000118May 1$62,000
INV-000126Jul 1$48,000
INV-000131Jul 18$24,000
INV-000104Apr 2$96,000
INV-000122Jun 12$74,000
INV-000129Jul 9$18,500
INV-000115Jun 20$34,000
INV-000109May 30$38,000
INV-000124Jun 28$58,500
INV-000133Jul 21$31,000
INV-000128Jul 5$14,750
INV-000120Jun 8$27,500
INV-000134Jul 22$22,250

Halvorsen Millwork: 2 open projects, $134,000 linked across 3 invoices.

What this replaces.

Nobody chose to run operations across five tools. It arrived one reasonable decision at a time, and now reconciling it is a standing item on somebody’s Friday.

The master tracker

A spreadsheet nobody may sort, because three tabs reference its row order.

The plan

In another tool, with the same project names typed again — and one of them is misspelled.

The finance export

Downloaded monthly, reconciled by hand, out of date by the meeting.

The intake form

Writes to a third place. Someone copies it across on Fridays.

The status thread

Where the actual truth lives, unsearchable, in chat.

A column that points instead of repeats.

This is the move everything else rests on, and it takes one click. A text column holding a retyped account name becomes a relation. Nothing about the grid changes — but a lookup can now pull the tier through, and a rollup can total every invoice on the other side of the link. Those columns were impossible a second ago.

Projects

Account · text
ProjectAccountNothing to compute from
Plant floor rolloutHalvorsen Millwork
Finishing line retoolHalvorsen Millwork
Depot network auditCordell Freight
Driver intake redesignCordell Freight
Lab sample trackingArdent Diagnostics
Accreditation evidenceArdent Diagnostics

The account name is retyped on every row. Rename one and the rest drift out of sync.

Account is a plain text column. No derived columns are available.

The part your customers touch

Let the outside world in, without letting it in.

A base is only useful if the people who generate the data can reach it. Publish any view as a public form — conditional logic, file uploads, calculated fields, save-and-resume — and a submission writes a typed, correctly-linked row, with a parent and its children in one transaction. The person filling it in has no account and never sees the base.

When a form is not enough, build an app: a published surface over the same base with its own users, its own roles, and a canvas you lay out yourself. Contractors see their jobs, clients see their tickets, and nobody sees a spreadsheet.

Published form · no sign-in

relationsheet.app/form/…

Four fields, because four is what this form was published with. The person filling it in has no account and cannot see the base, the other rows, or any column they were not given.

Requests · inside the base

0 rows
SummaryAccountAmount
Nothing yet. Submit the form and the row arrives here with its relation already set.

A submission can write a parent row and its children in one transaction, so a request that arrives with five line items lands as one linked record, not five loose ones.

Nine readings of the same rows.

A view is a way of looking, not a copy. The analyst keeps the grid, delivery gets a board, the plan becomes a timeline with dependencies and critical path. Switch below — the twelve project records never move.

GridBoardTimelineCalendarGalleryFormPivotDashboardReport

All nine ship. The four picked out are live below.

ProjectAccountLeadDueBudget
Plant floor rolloutHalvorsen MillworkA. RiveraAug 28$148,000
Finishing line retoolHalvorsen MillworkM. ChenNov 20$96,000
Depot network auditCordell FreightJ. OkaforSep 30$210,000
Driver intake redesignCordell FreightD. AdeyemiAug 14$54,000
Lab sample trackingArdent DiagnosticsM. ChenOct 9$82,000
Accreditation evidenceArdent DiagnosticsS. KowalskiMay 29$38,000
Outage response drillPeakline UtilitiesT. BergströmSep 11$127,500
Meter data migrationPeakline UtilitiesA. RiveraJan 15$164,000
Post house schedulingVerrow StudiosD. AdeyemiSep 4$29,500
Cold chain complianceBrightsill FoodsS. KowalskiAug 21$73,000
Depot 4 fit-outCordell FreightT. BergströmFeb 26$188,000
Supplier scorecardsBrightsill FoodsJ. OkaforOct 30$44,500

Grid view. The same 12 project records — no data was copied or moved.

Bring your formulas

211 functions, and they cross sheets.

Math, statistics, text, logic, date, financial and the lookup family — VLOOKUP, XLOOKUP, INDEX/MATCH, IFS, TEXTJOIN — with references that reach another sheet by name. Type into the cell. It runs the product’s own engine, so what comes back is what Relationsheet gives back, error codes included.

A · NumberB · AccountC · AmountD · Status
1INV-000118Halvorsen Millwork$62,000Paid
2INV-000126Halvorsen Millwork$48,000Sent
3INV-000131Halvorsen Millwork$24,000Draft
4INV-000104Cordell Freight$96,000Paid
5INV-000122Cordell Freight$74,000Sent
rows 1–13 · a second sheet, Projects, is referenceable by name
C14$548,500.00

The work nobody wants

It reacts to how a value changed, not just that it did.

Crossed a threshold, became empty, moved from one status to another — 13 trigger kinds and 38 node kinds on one canvas, with branches, loops, approvals and per-node retries. A won deal creates the invoice; a delivered project bills itself.

And where a formula runs out, there is scripting: a sandboxed language with 71 documented builtins and a step budget — no network, no DOM, no eval. It runs as a column type, from the console, or as a step inside an automation, and what it is allowed to write is enforced on the server rather than by the editor.

When a project is delivered

waiting
Row changed on ProjectsTrigger · Status changedTo “Delivered”
Budget over $50,000Branch · true → bill on completion
Create row in InvoicesAction · Account and Project relations set from the trigger row
Notify the account ownerAction · in-app + email
Invoices → Peakline UtilitiesProjectAmount
INV-000124Outage response drill$58,500
INV-000133Outage response drill$31,000
rollup · SUM(Amount)$89,500

Paperwork, from the records

The document is the data, laid out.

Write a template once with tokens, conditionals and a repeat block over a relation, and every record can produce its own statement, quote, work order or contract — with the linked rows already in it. Documents export to Word, carry drawn signatures through an approval, and an automation can generate one the moment a row changes.

Edit the template on the left. The letter re-renders through the product’s own merge engine, the same one the document builder uses.

One template · every record

Template

editable

Cordell Freight · generated

merged live
Dear J. Okafor,

Re: account Cordell Freight (Enterprise)

Our records show 3 open project(s) against your account and a
linked balance of $188,500.

Of that, $92,500 is still outstanding across the invoices below.


  INV-000104   Apr 2   $96,000   Paid

  INV-000122   Jun 12   $74,000   Sent

  INV-000129   Jul 9   $18,500   Sent

Yours,
Accounts, Relationsheet

Every value in that letter came from the linked rows — the balance is a rollup, the invoice lines are the relation, and the outstanding paragraph appears only because a condition in the template was met. Pick a different account and the same template writes a different document. Generated documents export to Word, carry drawn signatures through an approval, and an automation can produce one the moment a row changes.

No modules, no upsell path

Everything on this list is one product.

Elsewhere the project layer is an add-on, the reporting layer is an add-on, and the form builder is priced per response. Splitting them apart was always a pricing decision, never a technical one.

A relational core

Relation columns with one-to-one, one-to-many and many-to-many cardinality; lookups that pull a field through a link; rollups that aggregate across one. An ER view shows how the tables connect.

Nine ways to read the same rows

Grid, board, timeline with dependencies and critical path, calendar, gallery, form, pivot, dashboard and report — switching a view moves nothing and copies nothing.

211 functions, including across sheets

Math, statistics, text, logic, date, financial and the lookup family. References reach other sheets by name: =SUM(Projects!E1:E12).

Project management

Dependencies, critical path, boards with swimlanes and WIP limits, and a timeline you can drag to reschedule — all reading the same records the rest of the base uses.

Accounting and ledger

Currency columns, typed money, cross-sheet totals, and invoices that roll up to the account and the project that own them — with the ledger reading the same rows as the plan.

Forms that write straight in

Publish a view as a public form, or build one in the studio with conditional logic, file uploads, calculated fields and save-and-resume. A submission can write a parent row and its children in one transaction.

Automations and approvals

13 trigger kinds and 38 node kinds on a visual canvas, with transition conditions that fire on how a value changed. Sequential and parallel approvals with quorum and drawn signatures.

Governance below the UI

Sheet, row and column grants for people or groups, with conditional rules on a cell's value. Enforced by Postgres row-level security, not hidden in the client, with a tamper-evident audit trail.

26column types
9view kinds
211formula functions
38automation nodes
71script builtins
45templates
14themes

Hiding a column is not what protects it.

Access is decided in Postgres, below the interface, by row-level security. Grants apply to a whole sheet, to specific rows, or to specific columns, for a person or a group — and a rule can depend on the value in a cell, so somebody gets exactly the rows for their own region and nothing else. Columns can be hidden outright or returned redacted, and every change is recorded with a per-cell diff in a tamper-evident log.

It is the same machinery that makes the forms and apps above safe to hand out: published surfaces are not trusted clients, they are constrained ones.

Or start from a base someone already wired.

45 solution templates across 17 categories, each arriving with its tables linked, its lookups and rollups computing, and enough seed rows to see how it is meant to work. You can capture one of your own bases as a template too.

  • Construction punch list
  • Brewery batch production
  • Insurance claims
  • Grant tracker
  • AP & AR ledger
  • Field service dispatch
  • Recruiting pipeline
  • IT asset register
  • Manufacturing work orders
  • Property management
  • Veterinary clinic
  • Podcast production

+ 33 more, from OKRs and grant tracking to restaurant reservations and fleet maintenance.

No layer here is a separate purchase.

Elsewhere the project module, the reporting module and the form builder are separate purchases stacked on top of the seat. Here they are one product. A plan buys collaboration, administrative control and scale — and paid plans are opening shortly, so today everything runs in the free workspace.

Free

$0 / forever

For individuals and small trials.

  • One workspace
  • The whole product — relations, all nine views, formulas, forms, apps, automations, documents
  • Import CSV, Excel, JSON or SQL DDL
  • Export to CSV, Excel or Word
Start free

Team

$12 / user · mo

For teams building a shared source of truth.

  • Everything in Free
  • Realtime collaboration & sharing
  • Roles, groups & audit trail
  • REST API & webhooks
Start free

Business

Let's talk

For governed, cross-department deployments.

  • Everything in Team
  • Row & column permissions
  • Conditional / attribute-based access
  • Priority support & onboarding
Book a demo

Reasonable objections.

Is this actually a database, or a spreadsheet with a lookup column?

A database. Rows are records with typed columns, links are stored in their own table, and access is decided in Postgres by row-level security rather than by the interface. The grid is how you work with it, not what it is.

What do I have to buy separately?

No layer on this page is its own product. Elsewhere the project module, the reporting module and the form builder are separate purchases stacked on top of the seat; here they are one thing. Plans differ by collaboration, administrative control and scale — and paid plans are opening shortly, so today everything runs in the free workspace.

Do my spreadsheet formulas still work?

Largely. 211 functions ship across math, statistics, text, logic, date, financial and lookup families, including VLOOKUP, XLOOKUP, INDEX/MATCH, IFS and TEXTJOIN — plus references that cross sheets by name.

How do I get my existing data in?

Import CSV, Excel or JSON, or point the SQL importer at existing DDL and it will plan the tables and relations for you. Export any view back out to CSV, Excel or Word at any time.

Can people see only their own rows?

Yes. Grants apply to a whole sheet, specific rows or specific columns, for a person or a group, and a rule can depend on the value in a cell — for example, only rows in a member's own region. Columns can be hidden or redacted.

Can I try it without setting anything up?

Yes. Start free, with no card. Bring a CSV and it becomes a typed table you can start linking, point the SQL importer at existing DDL and it plans the tables and relations for you, or open one of the pre-wired templates and work backwards from a finished base.

Enter the value once. Let the links do the rest.

Free forever for one workspace. Import CSV, Excel, JSON, or point it at SQL DDL.
Export back out to CSV, Excel or Word whenever you like — it is your data.

The accounts, projects and figures demonstrated above are synthetic. Everything they are worked with — the formula engine, the merge engine, the relations — is the product’s own.