Ecommerce · Store dashboard
DashboardFashion & D2CA near-real-time store dashboard that replaces the daily Excel export
Most D2C teams still start the day by stitching a Shopify export, a courier report and two ad accounts together in Excel. Here is a dashboard that fills itself as orders land and tells the team when something moves.
Valnora & Elric team6 min read
RTO by courier and pincode cluster, last 30 days
| Courier | Pincode cluster | Shipped | RTO rate | Status |
|---|---|---|---|---|
| Courier A | 8xxxxx · Bihar | 1,920 | 29% | Alert |
| Courier B | 8xxxxx · Bihar | 1,140 | 21% | Watch |
| Courier A | 56xxxx · Bengaluru | 2,310 | 9% | OK |
| Courier C | 40xxxx · Mumbai | 1,780 | 11% | OK |
0
Manual exports to start the day (illustrative)
Orders, couriers and ad spend land in tables on their own.
15 min
Slowest refresh on scheduled datasets
Webhook-fed panels update as rows land; materialized datasets refresh as often as every 15 minutes.
5 min
Monitor re-check interval
An RTO jump or a stockout is flagged within minutes, not at tomorrow’s review.
Illustrative example. Figures show how the workflow is measured; they are not customer results.
Ask a D2C founder how yesterday went and the honest answer is often "ask me after ten". Someone exports orders from Shopify, pulls the courier aggregator’s report, copies spend from Meta and Google Ads, and pastes it all into a spreadsheet with formulas only they understand. By the time the sheet is ready, a courier has been returning a fifth of a state’s parcels for three days.
This post walks through a store dashboard built with Agent Serve Dashboards that fills itself as orders come in. The figures shown are illustrative.
How orders get onto the dashboard
Shopify has no Agent Serve trigger, and it does not need one. In Shopify admin, add an orders webhook and point it at the Webhook trigger of a workflow built in the workflow builder. Each new order arrives within moments of checkout. The workflow keeps the fields you care about (order value, payment method, pincode, SKUs, UTM source) and writes one row to an orders table in Tables.
Because the panels read that table directly, the orders tile and the hourly COD vs prepaid chart move as rows land. No export, no paste.
Two more workflows run on a schedule:
- Courier status. Aggregators such as Shiprocket, Delhivery and iThink Logistics are not native integrations. The workflow calls their tracking API with the API block, using a key stored as a workspace secret, and updates each shipment’s status, delivery attempts and RTO flag.
- Ad spend. The Google Ads block pulls campaign performance reports. For Meta, call the Marketing API insights endpoint with the API block, and write daily spend per campaign to an ad spend table. Meta’s official ads MCP server, added under Settings → Tool connections, is for asking questions in Chat.
If your orders already sit in BigQuery, Snowflake or PostgreSQL, connect it as a data source instead. Datasets either refresh on a schedule, as often as every 15 minutes, or query live on each view.
The definitions that stop arguments
Most dashboard fights are about definitions. Put them in the semantic model once and every panel, alert and report reads the same number.
- COD share: COD orders over all orders placed, by day.
- RTO rate: shipments returned to origin over shipments that reached a final status. Counting open shipments in the denominator makes RTO look better than it is.
- Booked ROAS vs delivered ROAS: revenue on orders placed over spend, and revenue on orders actually delivered over spend. With a high COD share, the gap between the two is where margin leaks.
Name each as a metric. Add a rule for stock: flag any SKU whose current Shopify inventory level covers fewer than seven days of its trailing sales. A scheduled workflow reads inventory levels with the Shopify block and writes them to a stock table the rule checks.
What each panel answers
- Tiles: orders today, COD share, 30-day RTO rate and 7-day delivered ROAS, each against its prior period.
- Orders by hour: when the COD rush happens, which is often late evening and worth knowing before you schedule confirmation calls.
- RTO by courier and pincode cluster: the panel ops lives in. A courier that is fine in Bengaluru can be failing in rural Bihar.
- Spend vs delivered revenue by channel: which campaigns pay back after returns, not before.
- Stock watchlist: bestsellers under seven days of cover, next to their ad spend, so you stop paying to send traffic to a product page that is about to sell out.
Monitors and the morning report
What the solution produces
Monitor alert, RTO spike (illustrative)
MessageRTO rate above 25% · Courier A · pincodes 80xxxx to 85xxxx
Last 7 days: 31% on 412 shipments. Prior 30 days: 24%.
Top non-delivery reasons logged: customer not reachable (46%), refused at door (33%).
Open the store dashboard filtered to Courier A and Bihar pincodes.
Daily 9 am report to the founders (illustrative)
Checklist- Yesterday: 1,190 orders, 56% COD, 3 SKUs under 7 days of cover.
- Delivered ROAS fell on two Meta prospecting campaigns; Google Search held steady.
- RTO alert open on one courier for Bihar pincodes since Tuesday.
- PDF attached; live dashboard link inside.
Monitors watch metrics, rules or KPI panels and re-check as often as every 5 minutes. Three worth setting on day one:
- RTO rate above a threshold for any courier and pincode cluster.
- Any bestseller flagged by the low-stock rule.
- Delivered ROAS below your floor on any campaign spending more than a set amount a day.
Alerts go to email, in-app and Slack. A scheduled report sends the dashboard as a PDF or link every morning, to members or to external emails such as an agency or an investor.
How to measure it
0
Manual exports to start the day (illustrative)
Orders, couriers and ad spend land in tables on their own.
15 min
Slowest refresh on scheduled datasets
Webhook-fed panels update as rows land; materialized datasets refresh as often as every 15 minutes.
5 min
Monitor re-check interval
An RTO jump or a stockout is flagged within minutes, not at tomorrow’s review.
Illustrative example. Figures show how the workflow is measured; they are not customer results.
Who sees what
Controls and governance
Roles and permission groups
Admin, write and read roles per workspace, plus permission groups that limit which models, blocks and integrations a team can use.
Row-level access
Row-level policies narrow what each person sees in tables, dashboards, exports and scheduled reports.
SSO and SCIM
Sign in through your identity provider with SAML 2.0 or OIDC, and provision people with SCIM.
Audit trail
Proposals, approvals, declines and executed actions are written to the workspace audit log, which admins can export.
Run logs
Every workflow run records each block’s inputs, outputs and errors, so a reviewer can trace how a result was reached.
Deployed versions
Workflows run from a deployed version, so a change is reviewed before it reaches production runs.
More on how Agent Serve handles access, data and audit on the security page.
Row-level access lets a marketplace manager see their channel only, while founders see everything. Workflows run from a deployed version, so a change to how orders are written is reviewed before it reaches production runs.
From here, the next steps are acting on what the dashboard shows: confirming COD orders before they ship, following up non-delivery reports, and an operations Relay that investigates alerts for you.
Questions teams ask
Is this real time?
Near-real-time. Panels that read tables update as each webhook row lands. Datasets from a warehouse such as BigQuery or Snowflake either refresh on a schedule, as often as every 15 minutes, or query live on each view with results cached for about a minute.
Do you integrate with Shiprocket or Delhivery directly?
No. Couriers and aggregators such as Shiprocket, Delhivery and iThink Logistics are not native integrations. You call their APIs with the API block, with the key stored as a workspace secret, or connect an MCP server where the provider offers one.
Can the dashboard pause a campaign?
No. Google Ads access is read and report only. A person can make Meta changes in Chat through the Meta ads tool connection, where each tool call asks Allow, Always allow or Skip first. Keep anything that spends money on ask.
From order webhook to store dashboard
Workflows · Data in
- 01Shopify order webhookAn orders webhook in Shopify points at the Webhook trigger of a workflow, so each order arrives as it is placed.
- 02Orders tableOne row per order: value, payment method (COD or prepaid), pincode, SKU lines and campaign source.
- 03Courier status syncA scheduled workflow calls your courier aggregator through the API block and updates shipment status and RTO flags.
- 04Ad spend syncGoogle Ads campaign performance reports, plus Meta spend from the Marketing API through the API block.
Dashboard · Store today
- 05Metrics and rulesCOD share, RTO rate, booked and delivered ROAS, and a low-stock rule defined once in the semantic model.
- 06Store dashboardTiles, RTO by courier and pincode, spend against revenue by channel, and a stock watchlist.
- 07MonitorsRe-check as often as every 5 minutes and alert by email, in the app or in Slack.
- 08Ops and growth leadsDecide what to pause, restock or chase. The dashboard changes nothing by itself.
What you need
- Shopify admin access to create an orders webhook pointed at the workflow Webhook trigger
- Your courier aggregator API key, stored as a workspace secret for the API block
- Google Ads account access for campaign performance reports
- A Meta Marketing API access token for ads insights, stored as a workspace secret
- Agreed definitions for COD share, RTO rate and delivered ROAS
- A named owner for each monitor: ops for RTO and stock, growth for ROAS