Use one tenant-aware email service as the only counted path: [src/utils/email.js (line 102)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\email.js:102) or, if you want the cleaner long-term version, [src/utils/mailer/base.mail.js (line 87)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\mailer\\base.mail.js:87). Both already record tenant usage, but right now the repo is split between them. For accurate per-tenant email counting, every triggered email should go through one common sender and always pass dbName for non-request flows. Recommended common service Use [src/utils/mailer/base.mail.js (line 87)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\mailer\\base.mail.js:87) as the final common service. Reason: It is tenant-aware via ConnectEmail It supports templates It already records metered usage per tenant It is a better abstraction than scattering raw sendEmail(...) Places already good for tenant counting These already use the common path with dbName explicitly: [src/utils/notifyUsers.js (line 224)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\notifyUsers.js:224) [src/utils/notifyUsers.js (line 293)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\notifyUsers.js:293) [src/routes/EvergreenInvoice/EverGreen-invoice-controller.js (line 2109)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\routes\\EvergreenInvoice\\EverGreen-invoice-controller.js:2109) [src/routes/EvergreenInvoice/EverGreen-invoice-controller.js (line 5059)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\routes\\EvergreenInvoice\\EverGreen-invoice-controller.js:5059) [src/routes/EvergreenInvoice/EverGreen-invoice-controller.js (line 6704)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\routes\\EvergreenInvoice\\EverGreen-invoice-controller.js:6704) Places that must reuse the common service for correct per-tenant counting These are the important email-trigger services to standardize: Subscription/service email helper layer[src/services/email.service.js (line 63)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\services\\email.service.js:63) [src/services/email.service.js (line 115)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\services\\email.service.js:115) [src/services/email.service.js (line 206)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\services\\email.service.js:206) [src/services/email.service.js (line 274)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\services\\email.service.js:274) [src/services/email.service.js (line 299)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\services\\email.service.js:299) These should all pass dbName into the common sender. Webhook-triggered emails[src/webhook-handlers/subscriptionUpdated.js (line 199)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\webhook-handlers\\subscriptionUpdated.js:199) Also similar webhook mail flows in:src/webhook-handlers/* src/service-webhook-handlers/* These run outside normal request context, so they must use the common sender with explicit dbName. Cron-triggered emails[src/cron/subscriptionEmailCron.js (line 267)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\cron\\subscriptionEmailCron.js:267) [src/cron/subscriptionEmailCron.js (line 352)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\cron\\subscriptionEmailCron.js:352) [src/cron/subscriptionEmailCron.js (line 404)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\cron\\subscriptionEmailCron.js:404) Also review:src/cron/workerCron.js src/cron/enquiryCron.js src/cron/orderTrackingCron.js Cron jobs are the biggest risk for wrong tenant counts if dbName is omitted. Business services sending customer/admin emailssrc/allservices/InvoiceService.js src/allservices/clientService.js src/allservices/jobService.js src/services/subscripiton.service.js src/services/orderTrackingService.js src/services/nursery/order.service.js src/services/nursery/payment.service.js src/services/nursery/sale.service.js src/services/nursery/ecom.service.js src/services/nursery/assets.service.js src/services/quotation.service.js Controllers/routes still triggering email directlysrc/controllers/EverGreenQuotation/QuotationController.js src/controllers/ProductQuotation/product-quote.controller.js src/controllers/nursery/shop-controller.js src/controllers/nursery/user-controller.js src/controllers/user-controller.js src/controllers/subscription.controller.js src/controllers/superadmin/onboarding.controller.js src/routes/productQuoteRoute.js src/routes/productInvoiceRoute.js Architecture recommendation For tenant email counting, define one rule: All email triggers must call one function like: sendTenantEmail({ dbName, to, subject, html, template, attachments, service }) Then meter only there. Best answer to your question The email service you should use for counting per tenant is the single shared backend sender: Preferred final choice: [src/utils/mailer/base.mail.js (line 87)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\mailer\\base.mail.js:87) Current most-used choice: [src/utils/email.js (line 102)](G:\\POS\\EGF_POS\\evergreen_pos_be\\src\\utils\\email.js:102)