diff --git a/compendium-frontend/src/App.tsx b/compendium-frontend/src/App.tsx
index 5b850f07d4245bfa464d01ee7c85f118d192a940..8133fb96f8a53eb547cf72dd7c9bb4e26799a38e 100644
--- a/compendium-frontend/src/App.tsx
+++ b/compendium-frontend/src/App.tsx
@@ -1,5 +1,5 @@
 import React, { ReactElement, useState } from "react";
-import { BrowserRouter as Router, Routes, Route, useNavigate } from "react-router-dom";
+import { BrowserRouter as Router, Routes, Route,} from "react-router-dom";
 import Landing from "./pages/Landing";
 import ExternalPageNavBar from "./shared/ExternalPageNavBar";
 import GeantFooter from "./components/global/GeantFooter";
diff --git a/compendium-frontend/src/Schema.tsx b/compendium-frontend/src/Schema.tsx
index 8f9f17f01c50d780bbb43be6458a8002eeec0edc..2ea12a60f494dbdfe65a764534c6e6ffc78ad6b2 100644
--- a/compendium-frontend/src/Schema.tsx
+++ b/compendium-frontend/src/Schema.tsx
@@ -82,19 +82,6 @@ export interface FundingSourceDataset {
     }[]
 }
 
-export interface ChargingStructureDataset {
-    labels: string[],
-    datasets: {
-        label: string,
-        data: { x: number | null; y: number | null; }[],
-        borderRadius: number,
-        borderSkipped: boolean,
-        barPercentage: number,
-        borderWidth: number,
-        categoryPercentage: number,
-    }[]
-}
-
 export interface NrenStaffDataset {
 
     labels: string[],
diff --git a/compendium-frontend/src/components/DownloadCSVButton.tsx b/compendium-frontend/src/components/DownloadCSVButton.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..4401e4f55b1f5bd051e968becab6d8c1d76cb0f7
--- /dev/null
+++ b/compendium-frontend/src/components/DownloadCSVButton.tsx
@@ -0,0 +1,46 @@
+import React from 'react';
+
+interface DownloadCSVProps {
+    data: any[];
+    filename?: string;
+}
+
+function convertToCSV(jsonData: any[]): string {
+    if (!jsonData.length) return "";
+
+    const header = Object.keys(jsonData[0]);
+
+    const rows = jsonData.map(obj => {
+        return header.map(fieldName => {
+            const value = obj[fieldName];
+            // Handle null values and wrap strings with commas or double-quotes in double quotes
+            return value === null ? '' : typeof value === 'string' && (value.includes(',') || value.includes('"')) ?
+                   `"${value.replace(/"/g, '""')}"` : value;
+        }).join(',');
+    });
+
+    // Combine header and rows with newline characters
+    return [header.join(','), ...rows].join('\r\n');
+}
+
+const DownloadCSVButton: React.FC<DownloadCSVProps> = ({ data, filename = 'data.csv' }) => {
+
+    const downloadCSV = () => {
+        const csv = convertToCSV(data);
+        const blob = new Blob([csv], { type: 'text/csv' });
+        const link = document.createElement('a');
+        link.href = URL.createObjectURL(blob);
+        link.download = filename;
+        document.body.appendChild(link);
+        link.click();
+        document.body.removeChild(link);
+    }
+
+    return (
+        <>
+            <button onClick={downloadCSV}>Download CSV</button>
+        </>
+    );
+}
+
+export default DownloadCSVButton;
diff --git a/compendium-frontend/src/helpers/dataconversion.tsx b/compendium-frontend/src/helpers/dataconversion.tsx
index baa290146ac7c7ab9185476ba6107f5310df97e5..1349b5dd2fed516cd79a1976c40ea172d7a30384 100644
--- a/compendium-frontend/src/helpers/dataconversion.tsx
+++ b/compendium-frontend/src/helpers/dataconversion.tsx
@@ -188,12 +188,10 @@ export function createBudgetDataset(budgetEntries: Budget[]): BasicDataset {
         }
     });
 
-    const budgetAPIResponse = {
+    return {
         datasets: sets,
         labels: labelsYear.map(year => year.toString())
-    }
-
-    return budgetAPIResponse;
+    };
 }
 
 
diff --git a/compendium-frontend/src/pages/Budget.tsx b/compendium-frontend/src/pages/Budget.tsx
index 89834df84d834749bd019b8670cd0476a576fbcc..f5cd8d8dd8f6bf812604c376d596b4fa7483d1b1 100644
--- a/compendium-frontend/src/pages/Budget.tsx
+++ b/compendium-frontend/src/pages/Budget.tsx
@@ -7,6 +7,7 @@ import DataPage from '../components/DataPage';
 import Filter from "../components/graphing/Filter";
 import LineGraph from "../components/graphing/LineGraph";
 import { Sections } from '../helpers/constants';
+import DownloadCSVButton from "../components/DownloadCSVButton";
 
 interface inputProps {
     filterSelection: FilterSelection
@@ -44,6 +45,9 @@ function BudgetPage({ filterSelection, setFilterSelection }: inputProps): ReactE
         On hovering over the graphs data points will give NRENs budget share in that year.  This graph can be used to compare, selecting multiple NRENs to see the 
         fluctuation of budget over years and with other NRENs.' category={Sections.Organisation} filter={filterNode}>
             <>
+                <Row>
+                    <DownloadCSVButton data={budgetResponse} filename="budget_data.csv"/>
+                </Row>
                 <Row>
                     <LineGraph data={budgetData} />
                 </Row>