A personal version is a spreadsheet grid, a few synced tables and a way to turn cells into a dashboard. An agent can load Stripe and one Postgres database into DuckDB, put a formula grid on top and refresh it on a timer in a weekend. What it can't copy is breadth and trust: Equals leans on Fivetran for connectors like Salesforce and HubSpot, runs the warehouse for you, holds a SOC 2 Type II report according to its docs, and has an analyst build your first reports. One reader and two or three sources is a fair build; a team with many sources is why the product exists.
Before you buildEquals has no free plan and starts at $24,000 a year. For one person's reporting, a free Grist or Metabase install may already do the job, so try those before building.
Build me a local spreadsheet on top of my own business data to replace Equals. Requirements:
- Node.js 22 + TypeScript: a Fastify API and a React UI built with Vite. The sheet is Univer
(`@univerjs/presets`, open-source core with formulas). `npm start` serves http://localhost:5300.
- Storage: DuckDB (`@duckdb/node-api`) in ./data/warehouse.duckdb for synced tables, and
better-sqlite3 in ./data/app.db for workbooks (Univer JSON snapshots), saved queries,
dashboards and sync logs. Secrets stay in .env, never in either database.
- Connectors behind one interface, sync(since) returning rows: Stripe (`stripe`, restricted
read-only key: customers, subscriptions, invoices, charges, incremental on `created`) and
Postgres (`pg`, a read-only role, tables and an optional updated_at cursor listed in
config.yaml). `node-cron` refreshes each connector hourly, with a Refresh button and a status
page showing last run, rows loaded and errors.
- Query to sheet: a SQL editor over the DuckDB tables; "Insert result" writes the rows into the
active sheet at a chosen cell. A saved query re-runs after each sync and rewrites its range, and
formulas that use the range recalculate. Cell values enter a query as bound parameters
(`{{Sheet1!B2}}`), never by string concatenation. Run queries on a read-only connection.
- Dashboards: pick ranges and charts (`recharts`) to build a page at /d/<random-token> that is
read-only and says "as of <last sync>". Clicking a figure in a query range shows its saved
SQL and sync time. A daily post to SLACK_WEBHOOK_URL sends the headline cells and a link.
- XLSX export of a sheet with values and formulas (`exceljs`).
- Single user. No accounts, no telemetry, local-first: only Stripe, your database and Slack are
contacted, and a test checks that the browser makes no other outbound requests (Univer ships
a telemetry package). Dashboard links need a tunnel or VPS, and the README explains the risk.
- Out of scope: Salesforce, HubSpot, NetSuite and other OAuth connectors, writeback to a CRM, an
AI agent, SSO, real-time multi-user editing.
- README: how to create the Stripe restricted key and the read-only Postgres role, where the data
lives, backups, and a warning that Univer's formula coverage is not identical to Excel's.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Equals.
Add a HubSpot connector to the data workbench in this folder. Requirements: - Implement the existing connector interface with a HubSpot private app token from .env, read-only scopes, for companies, contacts and deals. - Incremental sync on `hs_lastmodifieddate` through the search endpoint, paged, with backoff on 429 responses; store raw properties as JSON plus typed columns for amount, stage and close date. - Show the connector on the status page with last run and counts; a failed run keeps the previous data. - Update the README with the exact scopes to grant.
Add a question box to the data workbench in this folder. Requirements: - The LLM (ANTHROPIC_API_KEY, OPENAI_API_KEY or OLLAMA_URL from .env) gets only table and column names and types, never row data, and returns one SELECT statement. - Parse the SQL, reject anything but a single SELECT, show it for me to edit and run on the read-only connection with a row limit of 10,000. - A result can be inserted into the sheet or saved as a query. - Log each question, the SQL and the row count in SQLite. - Update the README with exactly what is sent to the LLM.
Add scheduled email reports to the data workbench in this folder. Requirements: - Per dashboard, choose recipients, a weekday and a time in the timezone from .env. - Render the dashboard to a PDF with Playwright after a fresh sync and attach it, with the headline cells in the email body; send through nodemailer SMTP from .env. - If the last sync failed or is older than 24 hours, send nothing and notify me instead. - A Send now button and a log of every send. - Update the README.
Revenue and finance teams pay so the numbers in a board deck come from one place where every figure links to its formula and source query, and the CRM sync doesn't go stale. The price also includes an analyst to build the first reports, which a DIY spreadsheet does not.
Estimate · Runs on your machine; a $5 VPS or a free tunnel only matters if you share dashboards. Stripe and Postgres reads cost nothing. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Essential | — | $2,000/workspace | Unlimited viewers and editors, 3 connectors, data refresh every 6 hours, BI spreadsheet and dashboards, push to Slack, an AI agent with $250 a month of AI spend included, and an analyst who builds the first reports. |
| Business | — | $3,000/workspace | Everything in Essential plus 5 connectors or a warehouse, hourly refresh, writeback to your CRM, Infinity (no row limits) and $500 a month of AI spend. |
| Enterprise | — | $5,000/workspace | Everything in Business plus unlimited connectors or a warehouse, 15-minute refresh, enterprise SSO and $1,000 a month of AI spend. |
No free plan. A trial is tailored to each customer and arranged through a demo.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Connectors to Salesforce, HubSpot, NetSuite, QuickBooks and others that run on Fivetran, A warehouse that Equals runs for you, refreshed as often as every 15 minutes on the top plan.
About $2,000 a month on the Essential plan, $24,000 a year (checked 2026-10-19).
Connectors to Salesforce, HubSpot, NetSuite, QuickBooks and others that run on Fivetran; A warehouse that Equals runs for you, refreshed as often as every 15 minutes on the top plan; The analyst who builds your first reports, and the AI agent with its MCP server; Writeback of values from the spreadsheet into HubSpot or Salesforce; SOC 2 Type II and SSO for a company's security review. If any of those matter to you, keep paying.
Yes: Grist (open source), Metabase (open source), Evidence (open source).