Weekly Business Metrics Report to Slack
Get critical KPIs delivered to your team every Monday morning.
Nora compiles weekly metrics from across your business (revenue, customer acquisition, support response time, shipping rate) and posts a beautiful summary to Slack with trends and alerts.
Every Monday at 8:00 AM, Nora queries Odoo via XML-RPC to pull the previous week's sales orders, total invoiced amounts, and overdue balances. It calculates the differences between these figures and the prior week, as well as the same week last year. Nora formats the data using Slack Block Kit and posts the summary to a designated channel.
The operations lead reads the threaded report to identify areas needing immediate attention. They decide whether to follow up on specific overdue accounts or adjust short-term sales targets based on the raw numbers. The person who previously spent Monday morning exporting CSVs and formatting tables now starts the week reviewing the data and initiating discussions with the team directly in the Slack thread.
Runs weekly on monday at 8:00 am using Slack and Odoo, run by your CEO.
How it works
- Triggering the report schedule — Every Monday at 8:00 AM, the cron schedule triggers the automation. Nora connects to the Odoo instance using the stored API key and username to begin the data extraction process.
- Querying Odoo sales data — Nora uses XML-RPC to search and list sales orders, invoices, and payment registrations from the past seven days. It aggregates the total revenue, outstanding balances, and new customer counts.
- Calculating comparative metrics — Nora queries the same endpoints for the previous week and the corresponding week from the prior year. It calculates the absolute differences in revenue and invoice volume to determine the week-over-week and year-over-year changes.
- Handling incomplete data periods — If the Odoo instance returns no sales data for a specific day due to a public holiday or system downtime, Nora notes the zero-value period in the final compilation rather than failing the run.
- Formatting the Slack message — Nora structures the aggregated data using Slack Block Kit. It creates a rich message with distinct sections for revenue, outstanding invoices, and customer counts, applying color coding to highlight significant drops in volume.
- Posting to the channel — Nora uses the chat.postMessage endpoint to publish the report to the designated metrics channel. It creates a thread under the main message so team members can discuss specific figures and root causes.
What this replaces
The operations manager logs into Odoo every Monday, navigates to the reporting dashboard, and exports the weekly sales and invoice lists as CSV files. They open a spreadsheet, paste the new data, calculate the differences from the previous week, and copy the final table into a Slack message for the leadership team.
- Export weekly sales and invoice data from Odoo
- Calculate comparative differences in a spreadsheet
- Format the data into a readable summary
- Paste the final report into a Slack channel
Rough estimate rather than a measured figure: about 45 minutes a week, based on 10 minutes to run the Odoo exports, 25 minutes to manipulate the spreadsheet data, and 10 minutes to format and post the Slack message.
What it needs to run
Accounts and plans
- An active Odoo instance with XML-RPC or JSON-RPC enabled
- A Slack workspace with permission to install bot integrations
Access it asks for
- chat:write to send the formatted metric reports to channels
- users:read to list workspace members if tagging specific users in the thread
- Odoo API Key passed alongside the username to authenticate XML-RPC calls
What Nora reads
- Odoo sales orders, invoices, and payment history
- Odoo customer records created in the last seven days
What Nora writes
- Slack channel messages containing the Block Kit formatted report
- Slack thread replies for additional context or alerts
When it goes wrong
- Odoo API rate limit reached Nora pauses the execution and implements an exponential backoff strategy. It retries the XML-RPC calls until the server accepts the request, then continues aggregating the metrics.
- Slack channel is archived or deleted Nora detects the channel no longer exists when attempting to post. It halts the report delivery and sends a direct message to the workspace admin asking where to route the metrics.
- Odoo authentication credentials expire Nora receives an authentication error from the Odoo XML-RPC endpoint. It stops the run and notifies the customer via web chat that a new API key is required to resume the schedule.
- No sales or invoices generated Nora completes the queries and finds zero records for the week. It posts a brief Slack message stating that no new sales or invoices were recorded, rather than posting an empty table.
- Block Kit formatting validation fails If an unexpected character in an Odoo customer name breaks the Slack message structure, Nora catches the validation error, sanitizes the text payload, and attempts the postMessage call again.
Who this is for
Worth it if
- Founders at 10-30 person companies who need consistent visibility into weekly sales volume
- Operations leads managing Odoo instances with more than 50 invoices processed per week
- Remote teams that rely on asynchronous Slack channels for leadership updates and decision making
Not worth it if
- Businesses with highly bespoke reporting needs that require complex spreadsheet macros or manual data adjustments before sharing
- Teams processing fewer than five invoices a week where a quick manual glance at the Odoo dashboard is sufficient
- Organizations that use dedicated BI tools like Tableau or Looker for their primary metric distribution
A worked example
A commercial printing company running Odoo for sales and invoicing. They process around 200 orders a week. They ask Nora to post a summary of new orders, invoiced totals, and overdue payments to the #leadership-metrics channel every Monday.
Weekly Business Metrics: Oct 16 - Oct 22 Revenue & Sales: • Total Invoiced: $42,500 (Up $4,100 from last week) • New Sales Orders: 214 (Down 12 from last week) Accounts Receivable: • Overdue Invoices: 18 • Total Overdue Balance: $9,250 Customer Acquisition: • New Customers Created: 14 Notes: The overdue balance increased by $2,100 compared to the previous period. Five of the overdue invoices belong to Harbour Kitchen Supplies.
Frequently asked questions
How do I change which metrics are included in the report?
You tell Nora in plain language via web chat or WhatsApp. If you decide you want to add total registered payments or remove the new customer count, you send a message explaining the change. Nora updates its query logic and alters the Slack message structure for the following Monday.
Can Nora post the report to a private Slack channel?
Yes. Nora can post to any channel it is invited to. You create the private channel in Slack and add the Nora bot as a member. You then tell Nora the name of the new channel, and it directs the chat.postMessage calls there going forward.
What happens if Odoo goes down during the scheduled run time?
If the Odoo instance is unreachable or returns a 500 error during the 8:00 AM run, Nora will wait and retry the connection. If the server remains unavailable after several attempts, Nora posts a message in the Slack channel explaining that the Odoo data could not be retrieved.
Does Nora store my historical sales data to calculate the comparisons?
No. Nora calculates the week-over-week and year-over-year differences dynamically by querying the Odoo API for the specific historical dates during the run. It holds the data in memory just long enough to perform the arithmetic and format the Slack message, running entirely within your dedicated single-tenant instance.
Connects to
Related automations
- Extract Action Items from Slack Threads to Task Board — Turn meeting discussions into tracked tasks automatically.
- Daily Sprint Health Check & Burndown Alert — Catch sprint problems on day 2, not day 10.
- Auto-Link GitHub PRs to Jira Tickets — Stop copying & pasting issue numbers into PR descriptions.
- Send Weekly Twitter Performance Digest — Receive weekly summary of tweet performance, best performers, and audience growth
- Daily Standup Digest to Slack Channel — Compile team updates into a single daily message so you never miss critical blockers.
- Auto-Respond to FAQ in Slack — Answer common questions instantly in Slack threads so your team stays unblocked.
- Smart DM Follow-Up Reminders — Never lose track of messages awaiting response.
- Route Customer Feedback to Relevant Teams — Automatically send customer feedback to the right Slack channel for action.