diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
index 46d6562..b8ef8ce 100644
--- src/bp-groups/classes/class-bp-groups-group.php
+++ src/bp-groups/classes/class-bp-groups-group.php
@@ -619,15 +619,24 @@ class BP_Groups_Group {
 	public static function group_exists( $slug, $table_name = false ) {
 		global $wpdb;
 
-		if ( empty( $table_name ) )
-			$table_name = buddypress()->groups->table_name;
-
-		if ( empty( $slug ) )
+		if ( empty( $slug ) ) {
 			return false;
+		}
 
-		$query = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$table_name} WHERE slug = %s", strtolower( $slug ) ) );
+		if ( ! $table_name ) {
+			$table_name = buddypress()->groups->table_name;
+		}
+
+		$group_exists_sql = $wpdb->prepare( "SELECT id FROM {$table_name} WHERE slug = %s", strtolower( $slug ) );
+		$cached = bp_core_get_incremented_cache( $group_exists_sql, 'bp_groups' );
+		if ( false === $cached ) {
+			$group_id = $wpdb->get_var( $group_exists_sql );
+			bp_core_set_incremented_cache( $group_exists_sql, 'bp_groups', $group_id );
+		} else {
+			$group_id = $cached;
+		}
 
-		return is_numeric( $query ) ? (int) $query : $query;
+		return is_numeric( $group_id ) ? (int) $group_id : $group_id;
 	}
 
 	/**
diff --git tests/phpunit/testcases/groups/cache.php tests/phpunit/testcases/groups/cache.php
index 1653b7a..42ee19d 100644
--- tests/phpunit/testcases/groups/cache.php
+++ tests/phpunit/testcases/groups/cache.php
@@ -259,4 +259,34 @@ class BP_Tests_Group_Cache extends BP_UnitTestCase {
 		// check if function references cache or hits the DB by comparing query count
 		$this->assertEquals( $first_query_count, $wpdb->num_queries );
 	}
+
+	/**
+	 * @group group_exists
+	 */
+	public function test_group_exists_uses_cache() {
+		global $wpdb;
+
+		$g1 = $this->factory->group->create( array(
+			'slug' => 'sam',
+		) );
+
+		$group_id = BP_Groups_Group::group_exists( 'sam' );
+		$first_query_count = $wpdb->num_queries;
+		$group_id_again = BP_Groups_Group::group_exists( 'sam' );
+
+		$this->assertEquals( $first_query_count, $wpdb->num_queries );
+	}
+
+	/**
+	 * @group group_exists
+	 */
+	public function test_group_exists_uses_cache_no_match() {
+		global $wpdb;
+
+		$group_id = BP_Groups_Group::group_exists( 'brandywine-river' );
+		$first_query_count = $wpdb->num_queries;
+		$group_id_again = BP_Groups_Group::group_exists( 'brandywine-river' );
+
+		$this->assertEquals( $first_query_count, $wpdb->num_queries );
+	}
 }
diff --git tests/phpunit/testcases/groups/class-bp-groups-group.php tests/phpunit/testcases/groups/class-bp-groups-group.php
index 6f6d625..d5c41bd 100644
--- tests/phpunit/testcases/groups/class-bp-groups-group.php
+++ tests/phpunit/testcases/groups/class-bp-groups-group.php
@@ -2011,6 +2011,28 @@ class BP_Tests_BP_Groups_Group_TestCases extends BP_UnitTestCase {
 		$found = wp_list_pluck( $groups['groups'], 'id' );
 		$this->assertEqualSets( array( $g1, $g4 ), $found );
 	}
+
+	/**
+	 * @group group_exists
+	 */
+	public function test_group_exists_expected_behavior() {
+		$g1 = $this->factory->group->create( array(
+			'slug' => 'sam',
+		) );
+
+		$group_id = BP_Groups_Group::group_exists( 'sam' );
+
+		$this->assertEquals( $g1, $group_id );
+	}
+
+	/**
+	 * @group group_exists
+	 */
+	public function test_group_exists_expected_behavior_no_match() {
+		$group_id = BP_Groups_Group::group_exists( 'brandywine-river' );
+
+		$this->assertNull( $group_id );
+	}
 }
 
 /**
