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.
Guest work saves in this browser;
add an email any time to keep it.
Project management, accounting, forms, apps,
automations and documents are in the base
product — not sold back to you as modules.
Linked tables
Relations, lookups and rollups built into the grid — not bolted on with a lookup column.
02Forms & apps
Publish a form or a permissioned app so people outside the base can put data in, safely.
03Automations & scripts
React to how a value changed, and compute what a formula can't in a sandboxed script.
04Documents
Merge linked records into a real Word or PDF document — by hand, or automatically when a row changes.
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| Account | Tier | Open | Linked |
|---|---|---|---|
| Halvorsen Millwork | Enterprise | 2 | $134,000 |
| Cordell Freight | Enterprise | 3 | $188,500 |
| Ardent Diagnostics | Team | 1 | $72,000 |
| Peakline Utilities | Team | 2 | $89,500 |
| Verrow Studios | Starter | 1 | $14,750 |
| Brightsill Foods | Team | 2 | $49,750 |
Open = COUNT(Projects → Account) where Status ≠ Delivered
Linked = SUM(Invoices → Account, Amount)
Projects
2 of 12| Project | Account | Status |
|---|---|---|
| Plant floor rollout | Halvorsen Millwork | Active |
| Finishing line retool | Halvorsen Millwork | Planning |
| Depot network audit | Cordell Freight | Active |
| Driver intake redesign | Cordell Freight | Blocked |
| Lab sample tracking | Ardent Diagnostics | Active |
| Accreditation evidence | Ardent Diagnostics | Delivered |
| Outage response drill | Peakline Utilities | Active |
| Meter data migration | Peakline Utilities | Planning |
| Post house scheduling | Verrow Studios | Active |
| Cold chain compliance | Brightsill Foods | Blocked |
| Depot 4 fit-out | Cordell Freight | Planning |
| Supplier scorecards | Brightsill Foods | Active |
Invoices
3 of 13| Number | Issued | Amount |
|---|---|---|
| INV-000118 | May 1 | $62,000 |
| INV-000126 | Jul 1 | $48,000 |
| INV-000131 | Jul 18 | $24,000 |
| INV-000104 | Apr 2 | $96,000 |
| INV-000122 | Jun 12 | $74,000 |
| INV-000129 | Jul 9 | $18,500 |
| INV-000115 | Jun 20 | $34,000 |
| INV-000109 | May 30 | $38,000 |
| INV-000124 | Jun 28 | $58,500 |
| INV-000133 | Jul 21 | $31,000 |
| INV-000128 | Jul 5 | $14,750 |
| INV-000120 | Jun 8 | $27,500 |
| INV-000134 | Jul 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.
A spreadsheet nobody may sort, because three tabs reference its row order.
In another tool, with the same project names typed again — and one of them is misspelled.
Downloaded monthly, reconciled by hand, out of date by the meeting.
Writes to a third place. Someone copies it across on Fridays.
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| Project | Account | Nothing to compute from | |
|---|---|---|---|
| Plant floor rollout | Halvorsen Millwork | — | |
| Finishing line retool | Halvorsen Millwork | — | |
| Depot network audit | Cordell Freight | — | |
| Driver intake redesign | Cordell Freight | — | |
| Lab sample tracking | Ardent Diagnostics | — | |
| Accreditation evidence | Ardent 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.
Requests · inside the base
0 rows| Summary | Account | Amount |
|---|---|---|
| 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.
All nine ship. The four picked out are live below.
| Project | Account | Lead | Due | Budget |
|---|---|---|---|---|
| Plant floor rollout | → Halvorsen Millwork | A. Rivera | Aug 28 | $148,000 |
| Finishing line retool | → Halvorsen Millwork | M. Chen | Nov 20 | $96,000 |
| Depot network audit | → Cordell Freight | J. Okafor | Sep 30 | $210,000 |
| Driver intake redesign | → Cordell Freight | D. Adeyemi | Aug 14 | $54,000 |
| Lab sample tracking | → Ardent Diagnostics | M. Chen | Oct 9 | $82,000 |
| Accreditation evidence | → Ardent Diagnostics | S. Kowalski | May 29 | $38,000 |
| Outage response drill | → Peakline Utilities | T. Bergström | Sep 11 | $127,500 |
| Meter data migration | → Peakline Utilities | A. Rivera | Jan 15 | $164,000 |
| Post house scheduling | → Verrow Studios | D. Adeyemi | Sep 4 | $29,500 |
| Cold chain compliance | → Brightsill Foods | S. Kowalski | Aug 21 | $73,000 |
| Depot 4 fit-out | → Cordell Freight | T. Bergström | Feb 26 | $188,000 |
| Supplier scorecards | → Brightsill Foods | J. Okafor | Oct 30 | $44,500 |
Grid view. The same 12 project records — no data was copied or moved.
Bring your formulas
241 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 · Number | B · Account | C · Amount | D · Status | |
|---|---|---|---|---|
| 1 | INV-000118 | Halvorsen Millwork | $62,000 | Paid |
| 2 | INV-000126 | Halvorsen Millwork | $48,000 | Sent |
| 3 | INV-000131 | Halvorsen Millwork | $24,000 | Draft |
| 4 | INV-000104 | Cordell Freight | $96,000 | Paid |
| 5 | INV-000122 | Cordell Freight | $74,000 | Sent |
| rows 1–13 · a second sheet, Projects, is referenceable by name | ||||
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 76 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| Invoices → Peakline Utilities | Project | Amount |
|---|---|---|
| INV-000124 | → Outage response drill | $58,500 |
| INV-000133 | → Outage 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 or PDF, 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.
Template
editableCordell Freight · generated
merged liveDear 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.
241 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.
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.
66 solution templates across 8 families, 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 Production
- Insurance Claims Management
- Nonprofit Grants
- General ledger & bookkeeping
- Field Service & Work Orders
- Recruiting Pipeline
- IT Assets & Tickets
- Freight forwarding & logistics
- Property & Leases
- Veterinary Clinic
- Podcast Production
+ 54 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, within the limits printed on it.
Free
For individuals and small trials.
- The whole product — relations, all nine views, formulas, forms, apps, automations, documents
- Sheet, row and column permissions with conditional rules — on every plan, enforced in Postgres
- Import CSV, Excel, JSON or SQL DDL
- Export views to CSV, Excel or JSON; documents to Word (.docx) or PDF — the PDF draws with the standard PDF fonts, which cover Western European text
- 1 workspace
- 10 tables per workspace
- 5,000 rows per workspace
- 1 automation
- 1 licensed member — just you
- No view-only or contribute-only collaborators
- No API keys
Pro
For one person who has outgrown the free workspace.
- Everything in Free
- Editing is yours alone — the moment a colleague needs to edit too, that is Team
- Share with people who view, comment or contribute — none of them takes a seat
- Realtime collaboration & sharing
- REST API & webhooks
- 5 workspaces
- 100 tables per workspace
- 1,000,000 rows per workspace
- 20 automations
- 1 licensed member — just you
- Unlimited view-only, comment-only & contribute-only collaborators
- 5 API keys
Team
Drops to $10 per seat at 10+ seats
For teams building a shared source of truth.
- Everything in Pro
- Multiple licensed editors, priced by volume
- Roles, groups & audit trail
- Unlimited workspaces
- Unlimited tables
- 10,000,000 rows per workspace
- 100 automations
- 500 licensed members
- Unlimited view-only & contribute-only collaborators
- 25 API keys
Business
For governed, cross-department deployments.
- Everything in Team
- No ceiling on rows, automations, members or API keys
- Priority support & onboarding
- Unlimited workspaces
- Unlimited tables
- Unlimited rows
- Unlimited automations
- Unlimited licensed members
- Unlimited view-only & contribute-only collaborators
- Unlimited API keys
These are real limits, in force today. Every plan still carries the whole product. See what a plan buys →
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. You can start on the free workspace, which carries real limits on tables, rows, automations and people — they are listed on every card above, they apply now, and Pro or Team lifts them.
Do my spreadsheet formulas still work?
Largely. 241 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 JSON at any time. Documents go out as real Word (.docx) or as PDF — the PDF uses the standard PDF fonts, so text outside Western European scripts prints as a question mark and is reported before the file is written.
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 — open the editor with no account at all and you get a real workspace with a base already in it. What you do there is saved and is still waiting when you come back, but it is held in that browser only: add an email whenever you like and the same workspace becomes your account, with nothing to move across. From there, 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 views back out to CSV, Excel or JSON, and documents as Word or PDF, whenever you like — it is your data.