Ad-Hoc Data Queries in Slack
Use a Slack slash command to query your database in plain English.
Connect the databases Opulent can query
Connect at least one database (Snowflake, Supabase, or through Metabase) so Opulent can answer questions from real data. Use a read-only user or a connection with restricted permissions for production.
Verify the connection with a quick test: ask Opulent to list tables or run a one-line count. If it returns the schema, the query path is live.
Supported connections: - Snowflake: account, warehouse, database, schema, role. - Supabase: connection string with read-only privileges. - Metabase: saved questions and models Opulent can reference. Test: "List all tables in the analytics schema that contain the word 'user' or 'account'."
Start with a read-only connection string. A query run that cannot accidentally write protects production while you test the workflow.
Ask your first question in Slack
Open any Slack channel where Opulent is installed and type the question. Opulent writes the SQL, runs it against the connected database, and replies in the same thread.
For deeper questions, ask for an investigation rather than a single number. Opulent can run multiple queries, compare periods, and synthesize the findings in one thread.
The sharp edge: vague questions ('tell me about users') return noisy answers. Ask for a metric, a time window, and a breakdown, and the SQL will match.
/opulent What were our top 10 customers by revenue last quarter? /opulent Conduct a deep investigation on our user growth over the past month. Which segments and use cases can the growth be attributed to? Break it down by acquisition channel and plan tier and highlight any notable changes compared to the prior month.
Teach Opulent your schema and conventions
Opulent gets better when it knows your column meanings, enum values, timezone rules, and business definitions. Give corrections directly in the thread and ask it to remember them for next time.
Each remembered fact becomes part of the context for future runs, so the number of follow-up questions shrinks as the model learns your stack.
Examples to remember: - "'Active user' means at least one event in analytics.events in the past 30 days." - "All timestamps are stored in UTC. Always convert to America/New_York for display." - "The plan column values are free, pro, and enterprise, not basic/premium." - "MRR is in cents, not dollars. Divide by 100 when showing revenue."
Ask Opulent to list what it remembers before a big analysis. Catching a stale definition in advance is cheaper than re-running a wrong query.
Ask follow-ups in the same thread
Opulent keeps context within a Slack thread, so follow-up questions can reference earlier results without repeating the full setup.
For questions you ask regularly, create a playbook with the exact query and formatting you want, then trigger it with a custom macro from Slack.
Follow-ups: /opulent Break that down by plan tier and show the month-over-month trend. /opulent Chart daily signups for the past 90 days with a 7-day moving average. Recurring macro: !weekly-growth - Runs the same query and format every Monday. - Posts to #metrics with channel and trend context.
Sharpen the Slack query practice
When Opulent frequently misunderstands a table or column, add the definition to memory (the notes a run recalls next time) or write it into a playbook so the query starts correct.
Set up scheduled runs for recurring questions (weekly growth, daily active users, pipeline coverage) so the team gets the answer without re-asking.
The natural chain: when a Slack query reveals a pattern worth investigating, hand it to Data Analysis as an Agent-Run Workflow for a full decision record, or to Reason Over Entire Datasets with Async Spawns if the dataset is too large for one query.