diff --git a/docs/widgets/services/mailcow.md b/docs/widgets/services/mailcow.md
new file mode 100644
index 00000000..3cb2ac18
--- /dev/null
+++ b/docs/widgets/services/mailcow.md
@@ -0,0 +1,15 @@
+---
+title: Mailcow
+description: Mailcow Widget Configuration
+---
+
+Learn more about [Mailcow](https://github.com/mailcow/mailcow-dockerized).
+
+Allowed fields: `["domains", "mailboxes", "mails", "storage"]`.
+
+```yaml
+widget:
+  type: mailcow
+  url: https://mailcow.host.or.ip
+  key: mailcowapikey
+```
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 3315a094..561812b3 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -850,6 +850,12 @@
         "screenshots": "Screenshots",
         "totalfilesize": "Total Size"
     },
+    "mailcow": {
+      "domains": "Domains",
+      "mailboxes": "Mailboxes",
+      "mails": "Mails",
+      "storage": "Storage"
+    },
     "netdata": {
       "warnings": "Warnings",
       "criticals": "Criticals"
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 9f021893..abeb9422 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -56,6 +56,7 @@ const components = {
   kopia: dynamic(() => import("./kopia/component")),
   lidarr: dynamic(() => import("./lidarr/component")),
   linkwarden: dynamic(() => import("./linkwarden/component")),
+  mailcow: dynamic(() => import("./mailcow/component")),
   mastodon: dynamic(() => import("./mastodon/component")),
   mealie: dynamic(() => import("./mealie/component")),
   medusa: dynamic(() => import("./medusa/component")),
diff --git a/src/widgets/mailcow/component.jsx b/src/widgets/mailcow/component.jsx
new file mode 100644
index 00000000..3587eabf
--- /dev/null
+++ b/src/widgets/mailcow/component.jsx
@@ -0,0 +1,40 @@
+import { useTranslation } from "next-i18next";
+
+import Container from "components/services/widget/container";
+import Block from "components/services/widget/block";
+import useWidgetAPI from "utils/proxy/use-widget-api";
+
+export default function Component({ service }) {
+  const { t } = useTranslation();
+
+  const { widget } = service;
+  const { data: resultData, error: resultError } = useWidgetAPI(widget, "domains");
+
+  if (resultError || (resultData && Object.keys(resultData).length === 0)) {
+    return <Container service={service} error={resultError ?? { message: "No domains found" }} />;
+  }
+
+  if (!resultData) {
+    return (
+      <Container service={service}>
+        <Block label="mailcow.mailboxes" />
+        <Block label="mailcow.aliases" />
+        <Block label="mailcow.quarantined" />
+      </Container>
+    );
+  }
+
+  const domains = resultData.length;
+  const mailboxes = resultData.reduce((acc, val) => acc + val.mboxes_in_domain, 0);
+  const mails = resultData.reduce((acc, val) => acc + val.msgs_total, 0);
+  const storage = resultData.reduce((acc, val) => acc + val.bytes_total, 0);
+
+  return (
+    <Container service={service}>
+      <Block label="mailcow.domains" value={t("common.number", { value: domains })} />
+      <Block label="mailcow.mailboxes" value={t("common.number", { value: mailboxes })} />
+      <Block label="mailcow.mails" value={t("common.number", { value: mails })} />
+      <Block label="mailcow.storage" value={t("common.bytes", { value: storage })} />
+    </Container>
+  );
+}
diff --git a/src/widgets/mailcow/widget.js b/src/widgets/mailcow/widget.js
new file mode 100644
index 00000000..df309ebb
--- /dev/null
+++ b/src/widgets/mailcow/widget.js
@@ -0,0 +1,14 @@
+import credentialedProxyHandler from "../../utils/proxy/handlers/credentialed";
+
+const widget = {
+  api: "{url}/api/v1/get/{endpoint}",
+  proxyHandler: credentialedProxyHandler,
+
+  mappings: {
+    domains: {
+      endpoint: "domain/all",
+    },
+  },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 909fea84..ea48b7fb 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -48,6 +48,7 @@ import komga from "./komga/widget";
 import kopia from "./kopia/widget";
 import lidarr from "./lidarr/widget";
 import linkwarden from "./linkwarden/widget";
+import mailcow from "./mailcow/widget";
 import mastodon from "./mastodon/widget";
 import mealie from "./mealie/widget";
 import medusa from "./medusa/widget";
@@ -173,6 +174,7 @@ const widgets = {
   kopia,
   lidarr,
   linkwarden,
+  mailcow,
   mastodon,
   mealie,
   medusa,