diff --git components/favorites.php components/favorites.php
index e69de29..b81c171 100644
--- components/favorites.php
+++ components/favorites.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * Manage BuddyPress favoriting activity items.
+ */
+class BPCLI_Favorite extends BPCLI_Component {
+
+	/**
+	 * Favorite an activity item.
+	 *
+	 * ## OPTIONS
+	 *
+	 * [--activity-id=<activity-id>]
+	 * : ID of the activity to favorite item. If none is provided, one will be
+	 * generated automatically.
+	 *
+	 * [--user-id=<user-id>]
+	 * : ID of the user favoriting the activity. If none is provided,
+	 * a user will be randomly selected.
+	 *
+	 * @synopsis [--activity-id=<activity-id>] [--user-id=<user-id>]
+	 *
+	 * @since 1.1
+	 */
+	public function create( $args, $assoc_args ) {
+		$defaults = array(
+			'activity-id' => '',
+			'user-id'     => '',
+			'silent'      => false,
+		);
+
+		$r = wp_parse_args( $assoc_args, $defaults );
+
+		// Fill in any missing information
+		if ( empty( $r['activity-id'] ) ) {
+			$r['activity-id'] = $this->get_random_activity();
+		}
+
+		if ( empty( $r['user-id'] ) ) {
+			$r['user-id'] = $this->get_random_user_id();
+		}
+
+		$favorited = bp_activity_add_user_favorite( $r['activity-id'], $r['user-id'] );
+
+		if ( $r['silent'] ) {
+			return;
+		}
+
+		if ( $favorited ) {
+			WP_CLI::success( sprintf( 'Successfully favorited new activity item (id #%d)', $r['activity-id'] ) );
+		} else {
+			WP_CLI::error( 'Could not favorite activity item.' );
+		}
+	}
+
+	/**
+	 * Favorite random activities items.
+	 *
+	 * ## OPTIONS
+	 *
+	 * [--count=<number>]
+	 * : How many activity items to favorite. Default: 100
+	 *
+	 * [--user-id=<user-id>]
+	 * : ID of the user favoriting the activity. If none is provided,
+	 * a user will be randomly selected.
+	 *
+	 * @synopsis [--count=<number>]
+	 */
+	public function generate( $args, $assoc_args ) {
+		global $wpdb, $bp;
+
+		$r = wp_parse_args( $assoc_args, array(
+			'count'   => 100,
+			'user-id' => '',
+		) );
+
+		$user_id = ! empty( $r['$user-id'] ) ? $r['$user-id'] : '';
+
+		$activities = $wpdb->get_col( "SELECT id FROM {$bp->activity->table_name} ORDER BY RAND() LIMIT " . $r['count'] );
+
+		$notify = \WP_CLI\Utils\make_progress_bar( 'Favoriting activity items', $r['count'] );
+
+		foreach ( $activities as $activity ) {
+			$this->create( array(), array(
+				'activity-id' => $activity,
+				'user-id'     => $user_id,
+				'silent'      => true,
+			) );
+
+			$notify->tick();
+		}
+
+		$notify->finish();
+	}
+
+	/**
+	 * Pull up a random activity id.
+	 *
+	 * @since 1.1
+	 *
+	 * @return int
+	 */
+	protected function get_random_activity() {
+		global $wpdb, $bp;
+
+		$type = $wpdb->get_col( "SELECT DISTINCT type FROM {$bp->activity->table_name}" );
+		$type = array_diff( $type, array( 'last_activity' ) );
+		$type = array_rand( array_flip( $type ) );
+
+		return $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$bp->activity->table_name} WHERE type = '%s' ORDER BY RAND() LIMIT 1", $type ) );
+	}
+
+	/**
+	 * Pull up a random active component for use in activity items.
+	 *
+	 * @since 1.1
+	 *
+	 * @return string
+	 */
+	protected function get_random_component() {
+		$c = buddypress()->active_components;
+
+		// Core components that accept activity items
+		$ca = $this->get_components_and_actions();
+
+		return array_rand( array_flip( array_intersect( array_keys( $c ), array_keys( $ca ) ) ) );
+	}
+
+	/**
+	 * Get a random type from a component.
+	 *
+	 * @since 1.1
+	 *
+	 * @param string $component Component name.
+	 * @return string
+	 */
+	protected function get_random_type_from_component( $component ) {
+		$ca = $this->get_components_and_actions();
+		return array_rand( array_flip( $ca[ $component ] ) );
+	}
+
+	/**
+	 * Get a list of activity components and actions
+	 *
+	 * @since 1.1
+	 *
+	 * @return array
+	 */
+	protected function get_components_and_actions() {
+		return array(
+			'activity' => array(
+				'activity_update',
+				'activity_comment',
+			),
+			'blogs' => array(
+				'new_blog',
+				'new_blog_post',
+				'new_blog_comment',
+			),
+			'friends' => array(
+				'friendship_created',
+			),
+			'groups' => array(
+				'joined_group',
+				'created_group',
+			),
+			'profile' => array(
+				'new_avatar',
+				'new_member',
+				'updated_profile',
+			),
+		);
+	}
+}
+
+WP_CLI::add_command( 'bp favorite', 'BPCLI_Favorite', array(
+	'before_invoke' => function() {
+		if ( ! bp_is_active( 'activity' ) ) {
+			WP_CLI::error( 'The Activity component is not active.' );
+		}
+} ) );
\ No newline at end of file
diff --git wp-cli-bp.php wp-cli-bp.php
index 68b07db..41ad701 100644
--- wp-cli-bp.php
+++ wp-cli-bp.php
@@ -5,6 +5,7 @@ if ( !defined( 'WP_CLI' ) ) return;
 
 require_once( __DIR__ . '/component.php' );
 require_once( __DIR__ . '/components/activity.php' );
+require_once( __DIR__ . '/components/favorites.php' );
 require_once( __DIR__ . '/components/core.php' );
 require_once( __DIR__ . '/components/group.php' );
 require_once( __DIR__ . '/components/member.php' );
