Index: src/wp-admin/admin-ajax.php
===================================================================
--- src/wp-admin/admin-ajax.php	(revision 42834)
+++ src/wp-admin/admin-ajax.php	(working copy)
@@ -129,6 +129,7 @@
 	'get-post-thumbnail-html',
 	'get-community-events',
 	'edit-theme-plugin-file',
+	'wp-privacy-export-personal-data',
 );
 
 // Deprecated
Index: src/wp-admin/includes/ajax-actions.php
===================================================================
--- src/wp-admin/includes/ajax-actions.php	(revision 42834)
+++ src/wp-admin/includes/ajax-actions.php	(working copy)
@@ -4326,3 +4326,69 @@
 		);
 	}
 }
+
+function wp_ajax_wp_privacy_export_personal_data() {
+	check_ajax_referer( 'wp-privacy-export-personal-data', 'security' );
+
+	if ( ! current_user_can( 'manage_options' ) ) {
+		wp_send_json_error( 'access denied' );
+	}
+
+	$email_address  = $_POST['email'];
+	$exporter_index = $_POST['exporter'];
+	$page           = $_POST['page'];
+
+	/**
+	 * Filters the array of exporter callbacks.
+	 *
+	 * @since 4.9.5.
+	 *
+	 * @param array $args {
+	 *     An array of callable exporters of personal data. Default empty array.
+	 *     [
+	 *         callback               string  Callable exporter that accepts an email address and
+	 *                                        a zero-based page and returns an array of name value
+	 *                                        pairs of personal data
+	 *         exporter_friendly_name string  Translated user facing friendly name for the exporter
+	 *     ]
+	 * }
+	 */
+	$exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
+
+	if ( $exporter_index < 0 ) {
+		wp_send_json_error( 'exporter index cannot be negative' );
+	}
+
+	if ( $exporter_index > count( $exporters ) - 1 ) {
+		wp_send_json_error( 'exporter index out of range' );
+	}
+
+	if ( $page < 0 ) {
+		wp_send_json_error( 'page index cannot be negative' );
+	}
+
+	// Surprisingly, email addresses can contain mutli-byte characters now
+	$email_address = trim( mb_strtolower( $email_address ) );
+
+	if ( ! is_email( $email_address ) ) {
+		wp_send_json_error( 'a valid email address must be given' );
+	}
+
+	$response = call_user_func( $exporters[ $exporter_index ]['callback'], $email_address, $page );
+
+	/**
+	 * Fires after a personal data exporter has provided data.
+	 *
+	 * Allows the export response to be consumed by destinations in addition to Ajax.
+	 *
+	 * @since 4.9.5
+	 *
+	 * @param array  $response        The personal data for the given exporter and page.
+	 * @param int    $exporter_index  The index of the exporter that provided this data.
+	 * @param string $email_address   The email address associated with this personal data.
+	 * @param int    $page            The zero-based page for this response.
+	 */
+	do_action( 'wp_privacy_personal_data_export_page', $response, $exporter_index, $email_address, $page );
+
+	wp_send_json_success( $response );
+}
