What you can report on
Revenue data is only useful if it reaches you in a digestible form, at the right time, with context and comparisons. OpenClaw automates the assembly of daily, weekly, and monthly reports so you can spot trends, identify winners and losers, and track progress against targets — without logging into your e-commerce dashboard.
Daily revenue brief
Yesterday's orders, revenue, AOV, units sold — delivered every morning with comparisons to last week and last year.
Weekly comparative report
This week vs last week vs same week last year, with percentage deltas and trend indicators.
Best & worst performers
Top and bottom products by revenue and units sold, ranked and segmented by category if available.
Revenue vs target tracking
Track cumulative revenue against your monthly or weekly target, calculate pacing, and alert if you're falling behind.
Slow mover alerts
Products whose sales velocity is declining week over week — different from dead stock, these are selling but losing momentum.
Seasonal trend detection
Flag when you're ahead of or behind last year's seasonal curve, with context on why.
Daily revenue summary agent
The simplest and most impactful report: yesterday's summary with key metrics and comparisons. Run this every morning and you'll spot anomalies before they cascade.
# AGENTS.md — daily-reporter agent
agents:
daily-reporter:
description: "Summarize yesterday's sales with key metrics and YoY/WoW comparisons"
tools:
- shopify-admin-api # or woocommerce-api
config:
platform: shopify # or: woocommerce
credentials:
store: "${SHOPIFY_STORE}"
token: "${SHOPIFY_TOKEN}"
date_range: yesterday
metrics:
- order_count
- gross_revenue
- net_revenue # after discounts
- avg_order_value
- units_sold
- new_customers_count
- returning_customers_count
comparisons:
- same_day_last_week
- same_day_last_year
top_products_n: 3
top_by: [revenue, units_sold]
output:
format: markdown
include_summary: true
include_top_products: true
sort_by: revenue
For WooCommerce, use the /wp-json/wc/v3/reports/sales endpoint, which aggregates sales data by date. You can filter by date range and break down by product or category.
Weekly comparative report
A week-over-week comparison contextualises today's performance. Is this week strong because of a campaign, or weak because of seasonality? The weekly report answers that.
# AGENTS.md — weekly-reporter agent
agents:
weekly-reporter:
description: "Comparative analysis: this week vs last week vs same week last year"
tools:
- shopify-admin-api
config:
platform: shopify
credentials:
store: "${SHOPIFY_STORE}"
token: "${SHOPIFY_TOKEN}"
date_range: last_7_days
comparison_periods: [previous_7_days, same_7_days_last_year]
metrics:
- revenue
- orders
- avg_order_value
- units_sold
- new_customers
- returning_customers
top_products_n: 10
output:
format: markdown_table
columns: [metric, this_week, last_week, delta_pct, last_year, yoy_delta_pct]
include_trend_arrows: true # ▲ / ▼ indicators
sort_by: revenue
Best and worst performers
Which products are carrying the business? Which are dragging? The best/worst finder ranks products by revenue, units sold, and profit margin so you know where to double down and where to cut.
# AGENTS.md — best-worst-finder agent
agents:
best-worst-finder:
description: "Identify best and worst performing products by revenue and units"
tools:
- shopify-admin-api
config:
platform: shopify
credentials:
store: "${SHOPIFY_STORE}"
token: "${SHOPIFY_TOKEN}"
date_range: last_30_days
metrics: [revenue, units_sold, margin]
top_n: 10 # top 10 best and worst
segment_by: category # optional: break down by product tag or collection
output:
format: markdown_table
columns: [rank, sku, product_title, revenue, units_sold, margin_pct]
include_best: true
include_worst: true
sort_by: revenue
Revenue vs target tracking
Tracking progress against a target keeps the team aligned. The pacing alert calculates whether you're on track for your monthly goal, and surfaces a warning if you fall behind early in the month.
# AGENTS.md — revenue-vs-target agent
agents:
revenue-vs-target:
description: "Calculate cumulative revenue pacing against monthly target"
tools:
- shopify-admin-api
- file-reader # reads targets.json
config:
platform: shopify
credentials:
store: "${SHOPIFY_STORE}"
token: "${SHOPIFY_TOKEN}"
targets_file: "targets.json" # format: {"monthly_target": 90000, "weekly_target": 20000}
date_range: month_to_date
output:
format: markdown
include_fields:
- revenue_to_date
- target_amount
- pacing_percentage
- projected_month_end
- pace_category # "on_track" / "ahead" / "behind"
alert_threshold: 85 # alert if pacing drops below 85% by day 15
The pacing calculation is simple but powerful: pacing = (revenue_to_date / (days_elapsed / days_in_month)) / target. If you're on day 12 of 31 and have done 30% of your target revenue, you're at 100% pacing. If you've only done 25%, you're at 81% pacing and should be alerted.
Slow mover identification
Different from dead stock (which doesn't sell at all), slow movers are products that ARE selling but whose sales velocity is declining. Catch these early and you can adjust marketing or pricing before the product becomes dead stock.
# AGENTS.md — slow-mover-finder agent
agents:
slow-mover-finder:
description: "Identify products whose sales velocity is declining week over week"
tools:
- shopify-admin-api
config:
platform: shopify
credentials:
store: "${SHOPIFY_STORE}"
token: "${SHOPIFY_TOKEN}"
current_window_days: 14 # sales in last 14 days
prior_window_days: 14 # 15-28 days ago
velocity_decline_threshold: -25 # flag if velocity drops >25%
min_absolute_sales: 5 # only flag products with >5 units in current window
output:
format: markdown_table
columns: [sku, product_title, current_velocity, prior_velocity, velocity_change_pct, revenue_trend]
sort_by: revenue_trend # highest revenue first (high-value declines matter more)
include_summary: true
Seasonal trend detection
E-commerce is seasonal. The tool that matters most is knowing whether your current performance matches historical patterns. A week that looks weak might actually be strong if it's typically your slowest week of the year.
# AGENTS.md — seasonal-trend-finder agent
agents:
seasonal-trend-finder:
description: "Compare current week's performance to same period last year and seasonal index"
tools:
- shopify-admin-api
- file-reader # reads seasonal_index.json
config:
platform: shopify
credentials:
store: "${SHOPIFY_STORE}"
token: "${SHOPIFY_TOKEN}"
seasonal_index_file: "seasonal_index.json" # format: {"week_12": 1.15, "week_13": 0.92}
date_range: current_week
comparison_year_offset: 52 weeks
output:
format: markdown
include_fields:
- current_week_revenue
- same_week_last_year
- yoy_growth_pct
- expected_seasonal_index
- ahead_behind_baseline
include_alert: true
The seasonal index is user-configurable. If you don't have historical data yet, use a flat baseline (every week = 100%) and build the index as data accumulates. Common patterns: holidays spike in November/December, summer slows in August, Easter affects March/April depending on the calendar.
HEARTBEAT.md templates
Daily morning brief
# HEARTBEAT.md — daily revenue brief
schedule:
- name: "Daily Morning Brief"
cron: "0 7 * * *" # every day at 7 AM
agents:
- daily-reporter
output:
file: "daily_brief.md"
notify: true
prompt: |
Generate a brief morning summary of yesterday's sales.
Include: order count, revenue (gross and net), AOV, units sold,
new vs returning customers, and the top 3 products by revenue.
Compare to: same day last week (% delta), same day last year (% delta).
Format for quick scanning. If performance is >10% down vs last week, flag it.
Weekly performance report
# HEARTBEAT.md — weekly performance
schedule:
- name: "Weekly Performance Report"
cron: "0 7 * * 1" # Monday at 7 AM
agents:
- weekly-reporter
- best-worst-finder
- slow-mover-finder
output:
file: "weekly_report.md"
notify: true
prompt: |
Combine three reports into a weekly overview:
1. Weekly comparison: this week vs last week vs same week last year
2. Best 10 products by revenue and units sold
3. Slow movers: products with >25% velocity decline
Include a one-line summary at the top: "Week pacing:" or "Week strength:"
Monthly pacing alert
# HEARTBEAT.md — monthly pacing alert
schedule:
- name: "Monthly Pacing Check"
cron: "0 9 15 * *" # 15th of month at 9 AM
agents:
- revenue-vs-target
output:
file: "pacing_alert.md"
notify: true
prompt: |
On the 15th of each month, report pacing towards the monthly target.
Format: "Day 15 of 31: £[revenue_to_date] of £[target] — [pacing]%"
If pacing < 85%, issue an alert: "⚠️ Behind pace. Projected month-end: £[projected]"
Otherwise, output: "✓ On pace for £[projected] at month-end"
What the daily report looks like
Frequently asked questions
Can OpenClaw connect to Shopify Analytics or Google Analytics?
Shopify order data via Admin API covers the core sales metrics (orders, revenue, average order value). For full analytics including sessions, traffic, and conversion rates, use the Google Analytics Data API (GA4) — OpenClaw can connect to this with a service account credentials file. This is essential if you want conversion rate trends or traffic-to-revenue correlation.
Can OpenClaw send the daily report to Slack or email?
OpenClaw can write the report to a file or trigger a webhook. Sending to Slack requires configuring a Slack incoming webhook URL in your agent config and calling the webhook-post tool. Email sending requires an SMTP tool or an email API like Resend or SendGrid integrated into your OpenClaw environment.
How do I set revenue targets in OpenClaw?
Create a targets.json file in your project root with the format: {"monthly_target": 90000, "weekly_target": 20000}. The revenue-vs-target agent reads this file and calculates pacing. You can also pass targets as environment variables: MONTHLY_TARGET=90000 and reference them in your config with ${MONTHLY_TARGET}.
Does OpenClaw calculate profit or just revenue?
By default, OpenClaw reports revenue (from order totals). Profit calculation requires your cost-of-goods data, which Shopify stores at the variant level. To enable cost tracking, add read_products scope to your API token and the reporting agent can pull cost prices and calculate gross margin per product. WooCommerce stores cost in the product metafield; ensure your WooCommerce API key has product read access.