The always-on data agent
Analytics that build themselves.
Tell Otto where your data lives. It builds your data warehouse, then keeps improving it from the questions your team asks.
A demo with data from Acme Inc. Ada Kim signs in for the first time. Otto asks where the data lives, and Ada picks PostgreSQL, Stripe and HubSpot. Otto copies 41 tables, builds pipelines into lake.finance.revenue and defines 12 metrics. Ada asks "Which region drove the rise in Q3 revenue?" Otto shows the read-only SQL it ran and answers: Eastmeredrove 66% of the Q3 rise. Its revenue grew 31% to $1.42M, while the company grew 11.5% to $4.98M. Ada asks Otto for a Q3 review dashboard; Otto builds it and shares it with Ed Ortiz, who joins and comments "Can we see churn by plan?" Ada sets an alert on weekly orders, and it fires: "Orders fell 18% last week, from 1,284 to 1,050." In Otto's weekly update, Otto has added plan to the churn metric because 18 questions asked for it, and suggests connecting Google Ads.
Permissions
Sharing never grants data access
Dana and Lee open the same dashboard. Each sees what their role allows. Grants, row filters and column masks apply to every chart, every answer and every agent.
-
Grant. Both can read
lake.finance. -
Row filter. Sales people see their own region:
region = 'Eastmere'. -
Column mask.
customer_emailcarries thepiitag, masked outside Finance.
Q3 review
Viewing as Dana ReyesRevenue, Q3
$4.98M$1.42M
All regionsEastmere only, by row filter
Largest orders, Q3
lake.finance.revenue 1 row filter · 1 column mask
What did we spend on payroll in Q3?
Otto
You do not have access to the payroll schema. Ask an admin to add it to your role.
- Grants on catalogs, schemas and tables
- Governed tags, row filters and column masks
- Agents act with the person's permissions, never more
- Sharing a dashboard never grants data access
- Secrets never reach the model
- Every change is written to the audit log
Agents
Agents can do what you can, and no more
Otto is the assistant in every page (⌘J). It answers questions, builds charts and dashboards, and does admin work for people who may do it. Connect Claude or any MCP client. It signs in as you and sees only what you may see.
- You
Add the Eastmere chart to Q3 review and send me the PDF.
insignal.find_chartsquery: "Eastmere"1 chart · Eastmere added $336K of the $512K Q3 rise
insignal.add_dashboard_carddashboard: "Q3 review"Add 1 card to Q3 review? Dana, Lee and Ed will see it.
DenyApproveApproved by Dana Reyes · card added
insignal.export_pdfdashboard: "Q3 review"Q3 review.pdf · 2 pages
- Assistant
Done. The Eastmere chart is on Q3 review, and the PDF is attached.
Audit log
- 05:38:51Saved chart “Eastmere added $336K…”Dana Reyes in the app
- 05:41:09Added card to Q3 reviewDana Reyes via MCP · approved
- 05:41:10Exported Q3 review.pdfDana Reyes via MCP
Same entries whether the action came from the app, Otto or an MCP client.
-
Every action is an operation
The same operations sit behind the UI, Otto and MCP. One permission check covers all three.
-
Risky actions ask first
Destructive actions always ask first. Over MCP, the client shows the same confirmation.
-
Agents never use a seat
Agents and MCP connections never use a seat. Seats are for people.
-
Your own model keys
Bring your own model keys for Anthropic or OpenAI. We add no spend caps and no markup.
Sources
Ask across every source at once
One SQL dialect across every source. Answers can join a database, a bucket of Parquet files and a SaaS app in one query.
Databases
Read live
- PostgreSQL
- MySQL and MariaDB
- Amazon Redshift
- Iceberg tables
Files
Parquet, CSV, JSON, Delta
- Files on S3
- Files on Google Cloud Storage
- Files on Azure Blob Storage
- CSV and Excel in chat
SaaS apps
Through connectors · examples
- Salesforce
- HubSpot
- Stripe
- Shopify
- Zendesk
- Jira
- Google Sheets
- Notion
One catalog
Grants, tags and a semantic layer over every source. One SQL dialect.
SELECT o.region, sum(r.amount) AS refunds FROM shop_db.sales.orders o JOIN lake.finance.refunds r USING (order_id) GROUP BY o.region;
PostgreSQL + Parquet on S3, one query
Otto and the app
- Answers with their SQL
- Charts, 15 types
- Live dashboards
- PDF reports
- MCP tools
No warehouse needed
No warehouse? Insignal builds you a lakehouse: connectors copy your SaaS apps in, and dbt models shape them.
One meaning for each metric
A semantic layer (Cube) holds your metric definitions, so “revenue” means one thing in every answer.
Read-only, always
Insignal never writes to your sources. The query guard allows reads only, and sources attach read-only underneath it.
Self-host
Runs on one Linux VM you own
Install Insignal in your own cloud account, next to your data. You hold the credentials, the model keys and the audit log.
- One Linux VM. Signed images from GitHub Container Registry.
- Install, upgrade, roll back, back up and restore with the insignal CLI.
- Backups stream to your own S3 bucket.
- A signed license file sets your seats. Seats are for people; agents never use one.
- Your data stays on your server. Otto sends the question and the rows it needs only to the model provider you choose, with your key.
$ insignal install --license ./acme.lic✓ Checked license: Acme Inc · 40 seats✓ Pulled insignal-server image, signature verified✓ Started insignal-server on :443✓ Backups streaming to s3://acme-backups/insignalOpen https://insignal.acme.internal and sign in.
Questions
What teams ask before a pilot
Does Insignal write to our databases?
No. The query guard allows read statements only, such as SELECT, WITH and DESCRIBE, and refuses everything else with a plain message. Sources also attach read-only underneath the guard.
Where does our data go?
It stays on your server. To answer a question, Otto sends the question and the rows it needs to the model provider you choose, using your own key.
Which models does Otto use?
Anthropic and OpenAI models, with your own API keys. We add no spend caps and no markup.
Can Claude or other AI tools use Insignal?
Yes, over MCP. Connect Claude or any MCP client. It signs in as you and sees only what you may see. Destructive actions always ask first. Over MCP, the client shows the same confirmation.
Do agents need seats?
No. Seats count people with an enabled account. Otto, MCP connections and other agents never use one.
What happens when a source is down?
Charts that read it show their last result with the time it was read, and say the source could not be reached.
How do we install and upgrade it?
On one Linux VM, with the insignal CLI. It pulls signed images, and handles upgrade, rollback, backup and restore. We onboard each customer with them.
Ask your own data a question
Join the waitlist. We'll email you when Insignal is ready for your team.
Ed Ortiz Can we see churn by plan?