diff --git a/app/controllers/api/v1/groups_controller.rb b/app/controllers/api/v1/groups_controller.rb
index e10f0e6e..bd8261bb 100644
--- a/app/controllers/api/v1/groups_controller.rb
+++ b/app/controllers/api/v1/groups_controller.rb
@@ -39,7 +39,15 @@ class Api::V1::GroupsController < Api::BaseController
       render json: { error: 'This method requires an authenticated user' }, status: 422
     end
 
+    @groupCategory = nil
+    if !params[:category].empty?
+      @groupCategory = GroupCategories.where("text ILIKE ?", "%#{params[:category]}%")
+    end
+
     @groups = []
+    if !@groupCategory.nil?
+      @groups = Group.where(is_archived: false, group_categories: @groupCategory).all
+    end
 
     render json: @groups, each_serializer: REST::GroupSerializer
   end
@@ -50,6 +58,9 @@ class Api::V1::GroupsController < Api::BaseController
     end
 
     @groups = []
+    if !params[:tag].empty?
+      @groups = Group.where(is_archived: false).where("array_to_string(tags, '||') ILIKE :tag", tag: "%#{params[:tag]}%").all
+    end
 
     render json: @groups, each_serializer: REST::GroupSerializer
   end
diff --git a/app/javascript/gabsocial/reducers/groups.js b/app/javascript/gabsocial/reducers/groups.js
index 608fbf1b..27828198 100644
--- a/app/javascript/gabsocial/reducers/groups.js
+++ b/app/javascript/gabsocial/reducers/groups.js
@@ -2,6 +2,8 @@ import {
   GROUP_FETCH_SUCCESS,
   GROUP_FETCH_FAIL,
   GROUPS_FETCH_SUCCESS,
+  GROUPS_BY_CATEGORY_FETCH_SUCCESS,
+  GROUPS_BY_TAG_FETCH_SUCCESS,
 } from '../actions/groups'
 import { GROUP_UPDATE_SUCCESS } from '../actions/group_editor'
 import { Map as ImmutableMap, fromJS } from 'immutable'
@@ -23,6 +25,8 @@ export default function groups(state = initialState, action) {
   case GROUP_FETCH_SUCCESS:
   case GROUP_UPDATE_SUCCESS:
     return normalizeGroup(state, action.group)
+  case GROUPS_BY_CATEGORY_FETCH_SUCCESS:
+  case GROUPS_BY_TAG_FETCH_SUCCESS:
   case GROUPS_FETCH_SUCCESS:
     return normalizeGroups(state, action.groups)
   case GROUP_FETCH_FAIL: