diff --git a/packages/loot-core/src/platform/server/sqlite/index.d.ts b/packages/loot-core/src/platform/server/sqlite/index.d.ts
index 3c5821903aa02bc5a858c22d46bfb88d073e38fb..97b997625a6b570b58642cbcea8161981155a30b 100644
--- a/packages/loot-core/src/platform/server/sqlite/index.d.ts
+++ b/packages/loot-core/src/platform/server/sqlite/index.d.ts
@@ -29,4 +29,4 @@ export async function openDatabase(pathOrBuffer?: string | Buffer): Database;
 
 export function closeDatabase(db): void;
 
-export function exportDatabase(db): void;
+export async function exportDatabase(db): Buffer;
diff --git a/packages/loot-core/src/platform/server/sqlite/index.electron.ts b/packages/loot-core/src/platform/server/sqlite/index.electron.ts
index 7f03188dc3f4565ebed2c0ace41303c706662b94..27e0ad828969c1591471095eb5f92feb988e059a 100644
--- a/packages/loot-core/src/platform/server/sqlite/index.electron.ts
+++ b/packages/loot-core/src/platform/server/sqlite/index.electron.ts
@@ -1,4 +1,7 @@
 import Database from 'better-sqlite3';
+import { v4 as uuidv4 } from 'uuid';
+
+import { removeFile, readFile } from '../fs';
 
 function verifyParamTypes(sql, arr) {
   arr.forEach(val => {
@@ -100,6 +103,15 @@ export function closeDatabase(db) {
   return db.close();
 }
 
-export function exportDatabase(db) {
-  return db.serialize();
+export async function exportDatabase(db) {
+  // electron does not support better-sqlite serialize since v21
+  // save to file and read in the raw data.
+  let name = `backup-for-export-${uuidv4()}.db`;
+
+  await db.backup(name);
+
+  let data = await readFile(name);
+  await removeFile(name);
+
+  return data;
 }
diff --git a/packages/loot-core/src/platform/server/sqlite/index.web.ts b/packages/loot-core/src/platform/server/sqlite/index.web.ts
index 8a2b3c4a79f0793d2fcb37b03cf3a657267dee18..3f6895b07719ec160d4b37b86ba068325afdf4ef 100644
--- a/packages/loot-core/src/platform/server/sqlite/index.web.ts
+++ b/packages/loot-core/src/platform/server/sqlite/index.web.ts
@@ -199,6 +199,6 @@ export function closeDatabase(db) {
   db.close();
 }
 
-export function exportDatabase(db) {
+export async function exportDatabase(db) {
   return db.export();
 }
diff --git a/packages/loot-core/src/server/cloud-storage.ts b/packages/loot-core/src/server/cloud-storage.ts
index cf6deab1f2b98265a9af6df8c1b68f660ba57145..88173e7c5184174f0347028529db4c2d95022499 100644
--- a/packages/loot-core/src/server/cloud-storage.ts
+++ b/packages/loot-core/src/server/cloud-storage.ts
@@ -148,7 +148,8 @@ export async function exportBuffer() {
       `,
     );
 
-    let dbContent = sqlite.exportDatabase(memDb);
+    let dbContent = await sqlite.exportDatabase(memDb);
+
     sqlite.closeDatabase(memDb);
 
     // mark it as a file that needs a new clock so when a new client
diff --git a/upcoming-release-notes/1242.md b/upcoming-release-notes/1242.md
new file mode 100644
index 0000000000000000000000000000000000000000..67add47b26b64d969434a16cd5a20c6ee2674bf9
--- /dev/null
+++ b/upcoming-release-notes/1242.md
@@ -0,0 +1,6 @@
+---
+category: Bugfix
+authors: [Shazib]
+---
+
+Fixed exporting data from Desktop (Electon) app.