Skein reads the records your business already has and writes the page you would have written yourself. On your own machine. No AI service called, nothing sent anywhere.
No install · no account · the demo runs in this browser
15,699,911 source rows indexed on one laptop in 2.2 minutes, then re-indexed in 0.12 seconds. How
At scale, measured
Every number below came off a run you can repeat from a command in the repository. Nothing here is a projection.
| Source | 15.7M rows, 2,124 MB |
| Graph built | 900,000 nodes, 800,000 edges |
| First import, start to finish | 2.2 minutes |
| Peak memory while doing it | 278 MB |
| Re-index when nothing changed | 0.12 seconds |
| Rolled up rather than copied | 5M invoices, 10M events |
| Search on the finished graph | 63 ms median |
| Assembling one brief | 0.4 ms median |
Fifteen million of those rows cost three seconds. Invoices and events are summarised per customer inside your database and never travel. The import is paid for by the 700,000 rows that become entities, and by nothing else. Seventeen source rows became one node.
Four sizes, one process, nothing else running on the machine.
| entity rows | nodes | rows/s | peak memory | wall clock |
|---|---|---|---|---|
| 250,000 | 650,000 | 5,618 | 190 MB | 1.5 min |
| 1,000,000 | 1,400,000 | 5,144 | 192 MB | 4.0 min |
| 2,000,000 | 2,400,000 | 4,144 | 194 MB | 8.8 min |
| 4,000,000 | 4,400,000 | 3,989 | 194 MB | 17.4 min |
Memory is flat. 190 MB at a quarter of a million rows and 194 MB at four million, because the importer streams rather than holding your result set. Throughput falls 8.2% per doubling, which is index maintenance getting deeper. A slope, not a wall: sixteen times the rows costs 1.4 times the seconds per row.
A one-off import is a snapshot. It is right on the day it runs and wrong every day after, and a graph that is quietly wrong is worse than no graph, because somebody trusts it.
We run this on ourselves. Our own graph reads 1,367 documents off a second machine on an hourly timer: a full read takes 2.7 seconds, and a run where nothing changed takes 0.3 seconds and opens no files at all.
The software
Three screenshots of the running application, taken from the demo corpus. Not mockups: this is the window that opens when you double click it.
Or skip the pictures. The same software, running on a million records, in your browser.
The software itself
Not a dashboard to learn. Three things down the left, a search box across the top, and a document in the middle. Everything below is real output from the demo corpus.
That page is the product. Everything else exists to keep it true.
Getting your data in
The database flow, as a customer sees it. A folder, a mailbox export or a spreadsheet is the same shape with fewer boxes.
Nobody outside this trade can write postgresql://user:pass@host:5432/db. The six values are on one page of whatever hosts the database, and Skein assembles the string, encoding the password properly.
Skein reads the schema and tells you what it intends to do with every table, and why. Nothing has touched your graph yet.
Read only, paced if you ask, and it checkpoints as it goes so a interruption resumes rather than restarts.
Where two records might be the same client, Skein asks instead of deciding. A few minutes once, and it is the difference between a graph you trust and one you do not.
Connecting needs nothing installed. The PostgreSQL and MySQL drivers ship inside the download.
What comes out
Name a client. Get what you charge them and what that replaced, the figures on record, what is open and what is late, who is involved, and what the graph does not know.
Every other product in this category opens on a search box or a diagram of dots. Both serve the person who already knew what they were looking for, which is the person who did not need a graph.
What is underneath
This is a real neighbourhood from the demo corpus, drawn live. Every connection carries whether it was read out of the data or worked out by us.
Nobody else in this category shows a buyer that difference. It is the honest version of "99% accurate", and it is why the entity review queue exists: where Skein cannot be confident, it asks you instead of guessing.
How it works
The reason a 15.7 million row database takes two minutes rather than an afternoon.
What the category does
Ten million invoices become ten million nodes. The import runs for hours, the graph is stale the moment it finishes, and refreshing it costs an afternoon nobody spends.
What Skein does
Ten million invoices become one summary per customer and a pointer back to the rows. Totals are real, computed over every row. The rows never move, so re-indexing takes a tenth of a second.
What you get
A folder, a mail export, a spreadsheet, or a live PostgreSQL or MySQL database. Drivers ship inside, so connecting needs nothing installed.
Search the whole business, then open any subject and drill from a line on the brief back to the exact source row it came from.
When the retainer moves, the old figure is not overwritten. The brief says $4,200 a month, and $3,600 until May.
No model is called and no data is sent. A test fails the build if any module that could open a socket becomes reachable from the importer.
Where two records might be the same client, it puts the name in a queue for you. Measured more accurate than deciding automatically.
Every brief is a page, a PDF, or a mail draft ready to send. For the person who will never open the software.
The objection your DBA will raise
"You are not running a full scan against my production server." Fair. So Skein is built to be told to take longer on purpose.
Turn on gently and the import pauses between batches so the source stays responsive for everyone else. An import that takes four times as long and nobody notices beats one that is refused.
Each table carries a watermark. Re-indexing a source where nothing has changed takes 0.12 seconds, not another full read. A refresh you will actually run twice.
It checkpoints inside a table, not just between them. Killed thirty minutes into a long import, it resumes from where it stopped rather than starting again. Tested by killing it.
The connection is read only where the driver allows it. Skein cannot write to your database even if it were asked to, and nothing is imported until you have seen the plan and approved it.
Rows stream in batches rather than arriving all at once. 190 MB at 250,000 rows and 194 MB at four million, so a table larger than your RAM is a longer import, not a failed one.
Ten million invoices become one summary per customer and a pointer back. Fifteen million of the fifteen point seven million rows in our largest run cost three seconds between them.
Ten minutes and nothing installed. Press play and take over whenever you like.
Measured, not claimed
A live PostgreSQL holding 15,699,911 rows across 2,124 MB, imported on one laptop.
1,009,300 records and 1,239,467 connections, searched in your browser in 5 ms with a brief assembled in 21 ms.
The same thing at a size that loads instantly, including on a phone.
The largest migration, per table, with the scaling curve and the three defects we found while measuring it.
The sheet we send a beta tester: how to sign in to the running application, what to try in it, what we measured, and the four questions we actually want answered.
Every claim with its measurement and the command that would disprove it. Two are marked open on purpose.
No SOC 2 and no HIPAA agreement. For an install where your data never leaves your own machine the security question is about your building rather than ours. That is an argument, not a certificate, and if your industry needs the certificate we are not ready for you yet.
Matching names is genuinely hard. Everyone in this field claims to have solved it and nobody has. We ask you instead.
Price