Data browser
Which console screen inspects which stored record, how to trace one customer across all of them, and the handling rules that apply because these screens show real personal data.
Last updated 2026-08-06
Summary#
The console has no raw table browser and no SQL box. Record inspection is spread across purpose-built screens, each of which reads one kind of record and shows the fields that screen needs. This page maps every record type to the screen that displays it, gives the order to work through when tracing one customer, and sets out the handling rules that apply because every one of these screens shows real personal data.
Purpose#
Support work is nearly always the same shape: a customer says something did not happen, and you need to find out what the system actually recorded. That means crossing several stores in one sitting, because a single incident leaves traces in usage counters, the activity log, the telemetry rollup and sometimes the error tables.
A general-purpose data browser was not built, for a good reason. An arbitrary query tool over production would show fields no support question needs, could not be audited meaningfully, and would make a mistyped filter dangerous. Narrow screens over specific records are slower to build and much safer to operate.
Requirements#
- An active admin session. See Getting admin access.
MONITOR_DBbound for everything except Messages and Bug Reports, which read Supabase directly from the browser.- The customer's email address. Nearly every lookup is keyed on it.
Permissions#
Every screen listed here is readable by both admin and owner. Reads are never role-gated. The mutations reachable from these screens are owner-only and are documented on their own pages.
Reads are also not audited. Nothing records that you opened a customer's record or exported the subscriber list. See Audit log.
Navigation Path#
There is no single entry point. Start from the record you need:
Admin console → Operations → Customers for one customer, everything at once.
Where each record lives#
| Record | Screen | Source | Key limits |
|---|---|---|---|
| Subscriber list, plan, status, joined date | Subscribers (Main) | Usage counters and plan rows in D1 | Every row is rendered with no paging |
| One customer: plan, quota, used, remaining, suspension, connections, team | Customers (Operations) | Same tables, plus social connections and team memberships | One email at a time |
| Billing source, Stripe subscription | Customers, Billing card | Plan rows plus a live Stripe read | Read-only. Empty if Stripe is not configured on the environment |
| Monthly usage per customer, per month | Usage & Activity (Account) | Usage counters | At most 200 rows rendered |
| Credits by tool, this month | Usage & Activity | Per-tool usage rollup | Top 12 tools only |
| Individual runs and actions | Run Log (Operations) | The activity log | 50 per page, server cap 200 per request |
| Grouped tool failures | System Health | Error issues | 500 most recent |
| Individual failed workflow steps | Workflow Failures (Main) | Workflow failures table | The screen requests 300 rows |
| Hourly runs, errors, latency, provider cost | System Health | Hourly telemetry rollup | Maximum 168 hours, 2,000 rows |
| Every platform setting | Config (Operations) | The configuration table | Unbounded, no paging |
| Per-tool cache lifetime and cost | Tools & Cache (Operations) | The tool registry plus overrides | Complete, 65 tools |
| Background job state | Jobs (Operations) | Schedules, alerts, monitored URLs, tier-2 metadata | Four jobs |
| Admin accounts | Admins (Operations) | The admin users table | Complete |
| Admin action history | System Health and Customers | The audit log | 50 per page, server cap 500 |
| Customer blog posts | Blog Moderation (Operations) | Blog posts joined to blog sites | 50 per page, no content |
| Contact messages | Messages (Main) | Supabase, read from the browser | 200 newest |
| Bug reports | Bug Reports (Main) | Supabase, read from the browser | 200 newest |
Anything not in that table is not visible from the console. Saved results, report content, generated articles and result payloads are not exposed to admins at all.
Step-by-Step Guide#
Trace one customer end to end#
Work in this order. Each step narrows the next.
- Customers. Type the address into
customer@example.comand press Load, or press Enter. This is the single richest view: plan, quota, used and remaining, the AI-versus-tool split, suspension state, connected social channels, team members against the seat cap, the billing source, and the recent admin actions taken on that account. Full detail in Customer lookup and billing. - Run Log. Put the same address in
customer emailand press Search. This is the per-event timeline: what they ran, when, through which module, and whether it succeeded. See Run inspection. - Workflow Failures. Search the address. If a multi-step workflow broke for them, the failing step, their input and the raw error are here. See Error log and resolution.
- System Health. If the same tool is failing for everyone, the Tool health table and Grouped issues will show it. That converts a single complaint into a platform incident. See Metrics and usage analytics.
- Usage & Activity. Confirms the monthly counters that drive billing, and lets you compare against other customers on the same plan.
Find a customer when you only have a fragment#
- Select Subscribers.
- Type any part of the email or name into
Search by email or name.... - Narrow with the plan and status selects if needed.
- Press View on the row. That jumps to the Customers screen with the address filled in and loaded.
Note: Subscribers renders every row it receives with no pagination. On a large account base the screen gets heavy. Filter first.
Inspect a setting#
Select Config. The Configuration table lists every key with its value, the time it changed and who changed it. It is the only place a raw stored value is shown verbatim, and it is unbounded, so it is also the closest thing the console has to a table view. Reading it is safe. Writing to it is owner-only and takes effect platform-wide. See Runtime configuration.
Export#
Four screens export CSV: Subscribers, Usage & Activity, Run Log, and the audit log on System Health. Messages and Bug Reports export too. Every export is generated in the browser from rows already loaded, so an export is a snapshot of what is on screen, not a full table dump. Filter to what you need before exporting.
Handling rules#
These screens show live personal data belonging to paying customers. Treat them accordingly.
- Look up only what the request needs. Reads are not audited, which makes the discipline yours to keep rather than the system's to enforce.
- Exports leave the platform. A CSV lands in the browser's download folder and is outside every control the product has. Delete it when finished.
- Do not paste customer data into third-party tools. That includes translation, spreadsheet and AI services.
- Treat a workflow failure's email as unverified. Those rows are written by an unauthenticated endpoint called from the customer's browser. Confirm the address in the Run Log or on the Customers screen before acting on it.
- Messages and Bug Reports are gated in the browser only. Those two screens query Supabase directly, and the policies on those tables permit any authenticated user to read and delete rows. Deletions there are permanent and unaudited. See What the admin console cannot do yet.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
A valid email is required. | The lookup field is blank or has no @ | Type the full address |
A customer exists but their plan reads free | No plan row exists, so the fallback applied | Check the Billing card for the source. Default means no explicit plan was ever set |
| A plan change appears not to take | Some addresses are pinned by code to unlimited or free regardless of the stored plan | Compare the Customers screen against the Billing card's source badge |
| Subscribers is slow or unresponsive | Every row is rendered at once | Filter by plan or status before the list grows |
| A customer's runs are missing from the Run Log | Not every action writes an activity row, and search matches title, description, module, resource and email only | Widen the search, clear the status filter, and cross-check the monthly counters on Usage & Activity |
The Billing card says Stripe is not configured on this environment. | No Stripe key is set for this deployment | The plan and usage figures are still authoritative. Only the subscription block is unavailable |
| Messages or Bug Reports are empty | The Supabase tables were never created on this project, or the browser session lacks access | Confirm the tables exist before concluding there are no messages |
FAQs#
Is there a way to run an arbitrary query? Not from the console. Direct database access is a developer path, outside the admin console entirely, and is not documented here.
Can I see the contents of a customer's saved report? No. The console shows that a run happened, its tool, its status and its time. The result payload is never exposed to an admin.
Can I delete a customer's data? No. There is no account deletion or data export endpoint in the console. Requests of that kind have to be handled outside it. See What the admin console cannot do yet.
Does the customer know when I look at their record? No. Reads produce no notification and no audit row.
Which screen is authoritative for billing questions? The Customers screen for plan, quota and usage, because those are the values the worker enforces. The Billing card tells you where the plan came from, and reads Stripe live for the subscription itself.
Why do two screens disagree about a plan? Usage counters carry the plan recorded at the time of the run, while the customer record resolves the plan as it is now. A mid-month upgrade produces exactly that difference, and both numbers are correct for what they describe.
See also
Was this article helpful?
Thanks — feedback noted for the docs team.