diff --git a/hypha/apply/users/admin_views.py b/hypha/apply/users/admin_views.py
index 170d501d5bcc250f45e7135f7581c6790dfa794e..1de29022ba4139d83b085604ecda6eae3cfee785 100644
--- a/hypha/apply/users/admin_views.py
+++ b/hypha/apply/users/admin_views.py
@@ -1,8 +1,13 @@
+import csv
+import os
+
 import django_filters
+from django.conf import settings
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 from django.core.paginator import Paginator
 from django.db.models import Q
+from django.http import HttpResponse
 from django.shortcuts import get_object_or_404
 from django.template.response import TemplateResponse
 from django.utils.translation import gettext as _
@@ -22,6 +27,35 @@ add_user_perm = "{0}.add_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.l
 change_user_perm = "{0}.change_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower())
 delete_user_perm = "{0}.delete_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_NAME.lower())
 
+def create_csv(users_list):
+    base_path=os.path.join(settings.PROJECT_DIR,'../media')
+    filename = 'users.csv'
+    with open(os.path.join(base_path+'/'+filename),'w+') as file:
+        fieldnames=['full_name','email','status','role']
+        writer = csv.DictWriter(file, fieldnames=fieldnames)
+        writer.writeheader()
+        for user in users_list:
+            writer.writerow(user)
+    return base_path + '/' + filename
+
+def export(users):
+    users_list = []
+    for user in users:
+        if user.is_superuser:
+            user.roles.insert(0,'Admin')
+        roles=','.join(user.roles)
+        user_data={
+            'full_name': user.full_name,
+            'email':user.email,
+            'status': 'Active' if user.is_active else 'Inactive',
+            'role': roles
+        }
+        users_list.append(user_data)
+    filepath=create_csv(users_list)
+    with open(filepath, 'rb') as file:
+            response = HttpResponse(file.read(), content_type="text/csv")
+            response['Content-Disposition'] = 'inline; filename=' + os.path.basename(filepath)
+            return response
 
 class UserFilterSet(WagtailFilterSet):
     STATUS_CHOICES = (
@@ -104,6 +138,10 @@ def index(request, *args):
         filters = UserFilterSet(request.GET, queryset=users, request=request)
         users = filters.qs
 
+    if 'export' in request.GET:
+        file = export(users)
+        return file
+
     if 'ordering' in request.GET:
         ordering = request.GET['ordering']
 
diff --git a/hypha/apply/users/templates/wagtailusers/users/results.html b/hypha/apply/users/templates/wagtailusers/users/results.html
index c084dd4c8e10fac186fd9f84e4b7bc2cccbeed6b..d3530432f149962a15fb97fff2779e58d26746ee 100644
--- a/hypha/apply/users/templates/wagtailusers/users/results.html
+++ b/hypha/apply/users/templates/wagtailusers/users/results.html
@@ -46,6 +46,11 @@
                 {% endfor %}
                 <button class="button button-longrunning" type="submit">{% icon name="spinner" %}{% trans 'Apply filters' %}</button>
             </form>
+        {%with request.get_full_path as path%}
+            <div class="users-list__export">
+                <button class="button"><a href="{{path}}{% if '?' in path %}&{%else%}?{% endif %}export=true">{% trans 'Export Users' %}</a></button>
+            </div>
+        {%endwith%}
         </div>
     {% endif %}
 </div>
diff --git a/hypha/static_src/src/sass/apply/wagtail_users_list.scss b/hypha/static_src/src/sass/apply/wagtail_users_list.scss
index 0770fa211fe5b8ce7d78f281a461688ee3929cfa..62ec24d11d2d388e8b914e80df12d3e6cfd48864 100644
--- a/hypha/static_src/src/sass/apply/wagtail_users_list.scss
+++ b/hypha/static_src/src/sass/apply/wagtail_users_list.scss
@@ -24,4 +24,15 @@
             margin-top: 20px;
         }
     }
+
+    &__export {
+        button {
+            display: block;
+            margin-top: 20px;
+        }
+
+        a {
+            color: $color--white;
+        }
+    }
 }