diff --git src/wp-admin/includes/file.php src/wp-admin/includes/file.php
index b00752e..f35aa0b 100644
--- src/wp-admin/includes/file.php
+++ src/wp-admin/includes/file.php
@@ -2184,14 +2184,15 @@ function wp_privacy_generate_personal_data_export_file( $request_id ) {
 }
 
 /**
- * Send an email to the user with a link to the personal data export file
+ * Send an email to the user with a link to the personal data export file, if available.
  *
  * @since 4.9.6
  *
- * @param int  $request_id  The request ID for this personal data export.
- * @return true|WP_Error    True on success or `WP_Error` on failure.
+ * @param  int           $request_id       The request ID for this personal data export.
+ * @param  bool          $has_export_data  Whether there is any personal data to export.
+ * @return true|WP_Error                   True on success or `WP_Error` on failure.
  */
-function wp_privacy_send_personal_data_export_email( $request_id ) {
+function wp_privacy_send_personal_data_export_email( $request_id, $has_export_data = true ) {
 	// Get the request data.
 	$request = wp_get_user_request_data( $request_id );
 
@@ -2203,8 +2204,10 @@ function wp_privacy_send_personal_data_export_email( $request_id ) {
 	$expiration      = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS );
 	$expiration_date = date_i18n( get_option( 'date_format' ), time() + $expiration );
 
-/* translators: Do not translate EXPIRATION, LINK, EMAIL, SITENAME, SITEURL: those are placeholders. */
-$email_text = __(
+	if ( $has_export_data ) {
+
+		/* translators: Do not translate EXPIRATION, LINK, EMAIL, SITENAME, SITEURL: those are placeholders. */
+	$email_text = __(
 'Howdy,
 
 Your request for an export of personal data has been completed. You may
@@ -2221,6 +2224,24 @@ All at ###SITENAME###
 ###SITEURL###'
 );
 
+	} else {
+
+		/* translators: Do not translate EMAIL, SITENAME, SITEURL: those are placeholders. */
+		$email_text = __(
+'Howdy,
+
+Your request for an export of personal data has been completed. 
+
+No personal data was found.
+
+This email has been sent to ###EMAIL###.
+
+Regards,
+All at ###SITENAME###
+###SITEURL###'
+);
+	}
+
 	/**
 	 * Filters the text of the email sent with a personal data export file.
 	 *
@@ -2233,10 +2254,11 @@ All at ###SITENAME###
 	 *
 	 * @since 4.9.6
 	 *
-	 * @param string $email_text     Text in the email.
-	 * @param int    $request_id     The request ID for this personal data export.
+	 * @param string $email_text      Text in the email.
+	 * @param int    $request_id      The request ID for this personal data export.
+	 * @param  bool  $has_export_data Whether there is any personal data to export.
 	 */
-	$content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id );
+	$content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id, $has_export_data );
 
 	$email_address = $request->email;
 	$export_file_url = get_post_meta( $request_id, '_export_file_url', true );
@@ -2356,19 +2378,23 @@ function wp_privacy_process_personal_data_export_page( $response, $exporter_inde
 	delete_post_meta( $request_id, '_export_data_raw' );
 	update_post_meta( $request_id, '_export_data_grouped', $groups );
 
-	// Generate the export file from the collected, grouped personal data.
-	do_action( 'wp_privacy_personal_data_export_file', $request_id );
+	$has_export_data = ! empty( $groups ); 
+
+	if ( $has_export_data ) {
+		// Generate the export file from the collected, grouped personal data.
+		do_action( 'wp_privacy_personal_data_export_file', $request_id );
+	}
 
 	// Clear the grouped data now that it is no longer needed.
 	delete_post_meta( $request_id, '_export_data_grouped' );
 
 	// If the destination is email, send it now.
 	if ( $send_as_email ) {
-		$mail_success = wp_privacy_send_personal_data_export_email( $request_id );
+		$mail_success = wp_privacy_send_personal_data_export_email( $request_id, $has_export_data );
 		if ( is_wp_error( $mail_success ) ) {
 			wp_send_json_error( $mail_success->get_error_message() );
 		}
-	} else {
+	} elseif ( $has_export_data ) {
 		// Modify the response to include the URL of the export file so the browser can fetch it.
 		$export_file_url = get_post_meta( $request_id, '_export_file_url', true );
 		if ( ! empty( $export_file_url ) ) {
