diff --git a/core/modules/migrate/src/Plugin/migrate/process/Extract.php b/core/modules/migrate/src/Plugin/migrate/process/Extract.php
index 1ac88ca5bf92e37bb2249911a04085e5b721ad39..544c306c50c24a27dbcf34c6522c060cc7f34918 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/Extract.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/Extract.php
@@ -9,9 +9,52 @@
 use Drupal\migrate\Row;
 
 /**
- * This plugin extracts a value from an array.
+ * Extracts a value from an array.
  *
- * @link https://www.drupal.org/node/2152731 Online handbook documentation for extract process plugin @endlink
+ * The extract process plugin is used to pull data from an input array, which
+ * may have multiple levels. One use case is extracting data from field arrays
+ * in previous versions of Drupal. For instance, in Drupal 7, a field array
+ * would be indexed first by language, then by delta, then finally a key such as
+ * 'value'.
+ *
+ * Available configuration keys:
+ * - source: The input value - must be an array.
+ * - index: The array of keys to access the value.
+ * - default: (optional) A default value to assign to the destination if the
+ *   key does not exist.
+ *
+ * Examples:
+ *
+ * @code
+ * process:
+ *   new_text_field:
+ *     plugin: extract
+ *     source: some_text_field
+ *     index:
+ *       - und
+ *       - 0
+ *       - value
+ * @endcode
+ *
+ * The PHP equivalent of this would be:
+ * @code
+ * $destination['new_text_field'] = $source['some_text_field']['und'][0]['value'];
+ * @endcode
+ * If a default value is specified, it will be returned if the index does not
+ * exist in the input array.
+ *
+ * @code
+ * plugin: extract
+ * source: some_text_field
+ * default: 'Default title'
+ * index:
+ *   - title
+ * @endcode
+ *
+ * If $source['some_text_field']['title'] doesn't exist, then the plugin will
+ * return "Default title".
+ *
+ * @see \Drupal\migrate\Plugin\MigrateProcessInterface
  *
  * @MigrateProcessPlugin(
  *   id = "extract",