{"id":369654,"date":"2026-09-24T07:17:51","date_gmt":"2026-09-24T07:17:51","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tillbrief-sales-report-emails-for-woocommerce\/"},"modified":"2026-09-24T09:31:18","modified_gmt":"2026-09-24T09:31:18","slug":"tillbrief-sales-report-emails","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tillbrief-sales-report-emails\/","author":23562428,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.7","stable_tag":"1.1.7","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Tillbrief Sales Report Emails for WooCommerce","header_author":"NovaWorks","header_description":"Emails you a WooCommerce sales report daily, weekly or monthly: revenue against the previous period, top products, order statuses and low stock.","assets_banners_color":"5269ae","last_updated":"2026-09-24 09:31:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/novaworks.pt","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.6":{"tag":"1.1.6","author":"jordennabbe","date":"2026-09-24 07:17:22","revision":3710724},"1.1.7":{"tag":"1.1.7","author":"jordennabbe","date":"2026-09-24 09:31:18","revision":3710971}},"upgrade_notice":{"1.1.3":"<p>Moves the translatable strings to the text domain that matches the plugin permalink and fixes the review link. No change to your schedule or settings.<\/p>","1.1.2":"<p>Removes the bundled licensing SDK from the free plugin. No change to your schedule or settings.<\/p>","1.1.1":"<p>Declares WooCommerce as a required plugin and limits the WooCommerce-required notice to the Plugins screen. No change to your schedule or settings.<\/p>","1.1.0":"<p>Adds licensing for the optional Pro version and new developer hooks. No change to your schedule or settings.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3710724,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3710724,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3710724,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3710724,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3710724,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.6","1.1.7"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3710971,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3710971,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3710971,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3710971,"resolution":"4","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"Choose a daily, weekly or monthly schedule, set the send hour and pick who receives the brief.","2":"The reliability panel shows the next scheduled run and the result of the last send, so you always know the brief is going out.","3":"Preview the exact email for any date range before a single message is sent.","4":"The brief itself: revenue, orders and average order value next to the previous period, with top products and low stock."}},"plugin_section":[],"plugin_tags":[218255,152467,16119,259667,286],"plugin_category":[45],"plugin_contributors":[279740],"plugin_business_model":[],"class_list":["post-369654","plugin","type-plugin","status-publish","hentry","plugin_tags-daily-sales","plugin_tags-email-report","plugin_tags-sales-report","plugin_tags-store-analytics","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-jordennabbe","plugin_committers-jordennabbe"],"banners":{"banner":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/banner-772x250.png?rev=3710724","banner_2x":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/banner-1544x500.png?rev=3710724","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/icon.svg?rev=3710724","icon":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/icon.svg?rev=3710724","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/screenshot-1.png?rev=3710971","caption":"Choose a daily, weekly or monthly schedule, set the send hour and pick who receives the brief."},{"src":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/screenshot-2.png?rev=3710971","caption":"The reliability panel shows the next scheduled run and the result of the last send, so you always know the brief is going out."},{"src":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/screenshot-3.png?rev=3710971","caption":"Preview the exact email for any date range before a single message is sent."},{"src":"https:\/\/ps.w.org\/tillbrief-sales-report-emails\/assets\/screenshot-4.png?rev=3710971","caption":"The brief itself: revenue, orders and average order value next to the previous period, with top products and low stock."}],"raw_content":"<!--section=description-->\n<p>Tillbrief sends you your store's numbers instead of making you go and look for them. Pick daily, weekly or monthly, pick the hour, pick who gets it, and a sales brief lands in your inbox on schedule. It is the report you would otherwise open the Analytics screens for, except it arrives while you are having coffee and you can forward it to a partner or a bookkeeper without giving them a login.<\/p>\n\n<p>Every brief leads with the figures that matter: gross sales, net sales, order count, average order value, total refunded and total coupon discount. Each one is printed next to the same figure for the period before it, with the percentage change, so you can see at a glance whether this week beat last week. Below that you get the best-selling products for the period with units and revenue, a breakdown of how many orders sat in processing, completed, on-hold, cancelled, failed and refunded, and a low-stock list so the brief doubles as a restock nudge.<\/p>\n\n<p>The plugin is deliberately boring where it counts. It reads your orders through WooCommerce's own <code>wc_get_orders()<\/code> API and declares High-Performance Order Storage compatibility, so the totals are right whether or not your store has moved to HPOS. It sends with <code>wp_mail()<\/code>, which means it uses whatever SMTP plugin you already trust. Tillbrief does not open a connection to anything and does not ask you to create an account.<\/p>\n\n<p>Because a scheduled email that quietly stops is worse than no email at all, the settings page carries a delivery reliability panel: when the next run is due in your store's timezone, what happened on the last run, how many recipients it went to, and whether <code>wp_mail()<\/code> accepted the message. If the scheduled event goes missing, the plugin notices on the next admin page load and puts it back. Deactivate the plugin and the schedule is cleared, so nothing keeps sending.<\/p>\n\n<p>You can also see the brief before you commit to it. The Preview tab renders the exact email for any date range you choose, using the same template the scheduled job uses, without sending anything. And \"Send test now\" runs the real send path and reports the result, including the error message if your mail setup rejected it.<\/p>\n\n<p>Tillbrief is free and GPL-licensed, and it creates no database tables. The brief is computed and sent entirely by your own site; the plugin contains no licensing code, no updater and no tracking.<\/p>\n\n<p>A separate Pro version adds report profiles with their own schedules and recipients, category, customer and payment-method breakdowns, tax and shipping totals, year-over-year and rolling twelve-month comparisons, CSV and PDF attachments, Slack and webhook delivery, and a multi-store roll-up.<\/p>\n\n<p><strong>What is in the brief<\/strong><\/p>\n\n<ul>\n<li>Gross sales, net sales, orders, average order value, refunded and coupon discount, each with the previous period beside it and the percentage change.<\/li>\n<li>The best-selling products of the period with units sold and revenue.<\/li>\n<li>An order-status breakdown: processing, completed, on-hold, cancelled, failed and refunded.<\/li>\n<li>A low-stock list built from each product's own low-stock amount, with the store setting as the fallback.<\/li>\n<li>A legend that states how every figure is calculated, so the numbers are never ambiguous.<\/li>\n<\/ul>\n\n<p><strong>How it is configured<\/strong><\/p>\n\n<ol>\n<li>Open WooCommerce &gt; Sales Brief.<\/li>\n<li>Choose the frequency (daily, weekly or monthly) and the send hour in your store timezone. Weekly adds a weekday choice, monthly a day-of-month choice.<\/li>\n<li>Enter one or more recipients, separated by commas. A subject template supports the <code>{site}<\/code>, <code>{period}<\/code> and <code>{date}<\/code> placeholders.<\/li>\n<li>Tick the order statuses that should count toward the sales figures. Completed and processing are ticked by default.<\/li>\n<li>Save, then press \"Send test now\" to see the real result of a send, or open the Preview tab to read the brief for any date range.<\/li>\n<\/ol>\n\n<p><strong>Hooks for developers<\/strong><\/p>\n\n<ul>\n<li><code>tillbrief_report_data<\/code> \u2014 adjust or extend the computed figures.<\/li>\n<li><code>tillbrief_email_subject<\/code> \u2014 change the subject line.<\/li>\n<li><code>tillbrief_email_html<\/code> \u2014 change the HTML body.<\/li>\n<li><code>tillbrief_email_text<\/code> \u2014 change the plain-text alternative.<\/li>\n<li><code>tillbrief_email_recipients<\/code> \u2014 change the recipient list.<\/li>\n<li><code>tillbrief_order_page_size<\/code> \u2014 orders loaded per page (200 by default).<\/li>\n<li><code>tillbrief_low_stock_scan_cap<\/code> \u2014 maximum products scanned for the low-stock list (500 by default).<\/li>\n<li><code>tillbrief_email_html_after_headline<\/code> and <code>tillbrief_email_html_before_footer<\/code> \u2014 print extra sections in the HTML body.<\/li>\n<li><code>tillbrief_email_text_after_headline<\/code> and <code>tillbrief_email_text_before_footer<\/code> \u2014 add lines to the plain-text alternative.<\/li>\n<li><code>tillbrief_email_attachments<\/code> \u2014 attach local files to the brief.<\/li>\n<li><code>tillbrief_email_sent<\/code> \u2014 runs after every send with the wp_mail() result.<\/li>\n<li><code>tillbrief_admin_tabs<\/code> \u2014 add a tab to the Sales Brief screen.<\/li>\n<\/ul>\n\n<h3>Upgrade to Pro<\/h3>\n\n<p>A <a href=\"https:\/\/factory.novaworks.pt\/p\/tillbrief-sales-report-emails\">Pro version<\/a> is available with additional reporting and delivery features.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin, with WooCommerce active.<\/li>\n<li>Go to WooCommerce &gt; Sales Brief.<\/li>\n<li>Set the frequency, the send hour and the recipients, then save.<\/li>\n<li>Optionally press \"Send test now\" to confirm that mail leaves your site.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Email nabbe.j82@gmail.com for support.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Does this work with High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares HPOS compatibility and reads orders only through <code>wc_get_orders()<\/code>, never through direct post or postmeta queries, so the figures are correct on both legacy and HPOS stores.<\/p><\/dd>\n<dt id=\"my%20report%20did%20not%20arrive.%20what%20do%20i%20check%3F\"><h3>My report did not arrive. What do I check?<\/h3><\/dt>\n<dd><p>Open WooCommerce &gt; Sales Brief and read the delivery reliability panel. It shows the next scheduled run, when the last run happened, how many recipients it went to and whether <code>wp_mail()<\/code> accepted the message, with the error text if it did not. Then press \"Send test now\", which runs the same send path and reports the result. If <code>wp_mail()<\/code> is failing, the problem is in the mail configuration of the site rather than in the report itself; an SMTP plugin fixes that and Tillbrief uses it automatically.<\/p><\/dd>\n<dt id=\"does%20it%20need%20wp-cron%2C%20and%20what%20if%20my%20site%20has%20little%20traffic%3F\"><h3>Does it need WP-Cron, and what if my site has little traffic?<\/h3><\/dt>\n<dd><p>It uses one WP-Cron event. WordPress fires WP-Cron on page visits, so a very quiet site can send its brief late. If exact timing matters, point a real server cron job at wp-cron.php and set <code>DISABLE_WP_CRON<\/code> to true, which is a standard WordPress setup that this plugin needs no configuration for.<\/p><\/dd>\n<dt id=\"what%20does%20%22weekly%22%20cover%3F\"><h3>What does \"weekly\" cover?<\/h3><\/dt>\n<dd><p>The seven complete days ending yesterday, not a calendar week, because you choose the weekday the brief is sent on. A monthly brief covers the previous calendar month, and a daily brief the previous day.<\/p><\/dd>\n<dt id=\"which%20orders%20count%20toward%20the%20sales%20figures%3F\"><h3>Which orders count toward the sales figures?<\/h3><\/dt>\n<dd><p>Completed and processing by default. You can change that on the settings page to any set of WooCommerce order statuses, so the totals match how you book revenue. The order-status breakdown always counts every status regardless of that setting.<\/p><\/dd>\n<dt id=\"how%20is%20%22net%20sales%22%20calculated%3F\"><h3>How is \"net sales\" calculated?<\/h3><\/dt>\n<dd><p>Net sales are gross sales minus refunds, tax and shipping. Gross sales are the order totals as the customer was charged them. Both definitions are printed as a legend in the email, so you never have to guess.<\/p><\/dd>\n<dt id=\"can%20i%20send%20different%20reports%20to%20different%20people%3F\"><h3>Can I send different reports to different people?<\/h3><\/dt>\n<dd><p>Every recipient on the list receives the same brief.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20my%20data%20anywhere%3F\"><h3>Does the plugin send my data anywhere?<\/h3><\/dt>\n<dd><p>No. Every figure is computed on your own server from your own orders and delivered by your own mail setup, and the plugin makes no external HTTP requests. The Pro version handles its licence through the Freemius SDK, with a skippable opt-in, and its Slack, webhook and multi-store roll-up connections contact only the addresses you enter.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20store%3F\"><h3>Will it slow down my store?<\/h3><\/dt>\n<dd><p>The report runs once per scheduled period in the background, not on front-end page loads, and it creates no database tables. Orders are read in pages of 200 and the low-stock scan is capped, so a large catalogue cannot turn the brief into a long request.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20deactivate%20or%20delete%20the%20plugin%3F\"><h3>What happens when I deactivate or delete the plugin?<\/h3><\/dt>\n<dd><p>Deactivating clears the scheduled event and keeps your settings. Deleting the plugin removes its options, its cached preview and the scheduled event.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Added: a Pro tab on the Sales Brief screen with the available Pro features, price and product-page link.<\/li>\n<li>Added: one contextual Pro hint beside the attachment option on the settings screen.<\/li>\n<li>Changed: the one-time review request now appears after ten successful scheduled briefs.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Fixed: translation text domains and the review link now match the confirmed WordPress.org slug, tillbrief-sales-report-emails.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Removed: the optional Plugin URI header pending confirmation of the publishing URL.<\/li>\n<li>Fixed: the Pro SDK bootstrap now initializes and announces its instance within the function guard and handles a second edition without repeating initialization.<\/li>\n<li>Changed: anonymous SDK mode is limited to factory tests; customer sites retain the skippable opt-in.<\/li>\n<li>Updated: the neutral Pro information link and support contact.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Added: the Plugin URI header, pointing at the plugin's own page.<\/li>\n<li>Changed: the translatable strings now use the text domain that matches the plugin's page on WordPress.org, so the translations published there are applied.<\/li>\n<li>Fixed: the \"Leave a review\" link in the review notice used the wrong permalink and led nowhere.<\/li>\n<li>Changed: the optional Pro version loads its licensing library only when that library is not loaded yet, so a second copy of it on the site cannot cause a fatal error.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Changed: the free plugin no longer bundles the Freemius SDK. Licensing now lives in the Pro version only, so the free plugin contains no updater and no opt-in screen.<\/li>\n<li>Changed: deleting the free plugin removes its options, cached preview and scheduled events through the WordPress uninstall hook.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Changed: the plugin now declares WooCommerce as a required plugin, so WordPress checks that WooCommerce is installed and active before Tillbrief can be activated.<\/li>\n<li>Changed: the \"WooCommerce is required\" notice is shown on the Plugins screen only, with a link to install or activate WooCommerce, instead of on every admin page.<\/li>\n<li>Removed: the Plugin URI header.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added: licensing for the optional Pro version through the bundled Freemius SDK, with a skippable opt-in. The free plugin keeps every feature it had.<\/li>\n<li>Added: developer hooks for extra email sections, plain-text lines, attachments, an after-send action and extra admin tabs.<\/li>\n<li>Changed: deactivation and uninstall also remove the scheduled events and options of Pro report profiles, so nothing is left behind when a licence ends.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<li>Daily, weekly and monthly scheduling with a send hour, weekday and day-of-month in the site timezone.<\/li>\n<li>Headline figures with the previous period beside them and the percentage change.<\/li>\n<li>Top products, order-status breakdown and a low-stock list based on each product's own low-stock amount.<\/li>\n<li>Comma-separated recipients, a subject template with <code>{site}<\/code>, <code>{period}<\/code> and <code>{date}<\/code>, and an optional from name.<\/li>\n<li>Delivery status panel with the next run, the last run and a self-heal for a lost cron event.<\/li>\n<li>Preview tab that renders the exact email for any date range without sending.<\/li>\n<li>Multipart email with a text\/plain alternative, and HPOS compatibility declared.<\/li>\n<\/ul>","raw_excerpt":"Emails you a WooCommerce sales report daily, weekly or monthly: revenue vs the previous period, top products, order statuses and low stock.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/369654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=369654"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jordennabbe"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=369654"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=369654"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=369654"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=369654"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=369654"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=369654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}