diff --git a/migration_templates/d6_sms_number.yml b/migration_templates/d6_sms_number.yml
new file mode 100644
index 0000000..e0e028e
--- /dev/null
+++ b/migration_templates/d6_sms_number.yml
@@ -0,0 +1,25 @@
+id: d6_sms_number
+label: SMS User Number
+migration_tags:
+  - Drupal 6
+source:
+  plugin: d6_sms_number
+process:
+  'entity/target_type':
+    plugin: default_value
+    default_value: user
+  'entity/target_id':
+    plugin: migration
+    migration: upgrade_d6_user
+    source: uid
+  phone: number
+  status:
+    plugin: sms_verification_status
+    source: status
+  code: code
+destination:
+  plugin: entity:sms_phone_number_verification
+migration_dependencies:
+  required:
+    - d6_user
+  optional: { }
diff --git a/src/Plugin/migrate/destination/SmsVerification.php b/src/Plugin/migrate/destination/SmsVerification.php
new file mode 100644
index 0000000..0ab0b64
--- /dev/null
+++ b/src/Plugin/migrate/destination/SmsVerification.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace Drupal\sms\Plugin\migrate\destination;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Field\FieldTypePluginManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate\Row;
+use Drupal\sms\Entity\PhoneNumberVerification;
+use Drupal\sms\Provider\PhoneNumberVerificationInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Destination plugin for SMS phone number verifications.
+ *
+ * @MigrateDestination(
+ *   id = "entity:sms_phone_number_verification"
+ * )
+ */
+class SmsVerification extends EntityContentBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The phone number verification service.
+   *
+   * @var \Drupal\sms\Provider\PhoneNumberVerificationInterface
+   */
+  protected $phoneNumberVerificationService;
+
+  /**
+   * Builds a phone number verification entity destination.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\migrate\Plugin\MigrationInterface $migration
+   *   The migration.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
+   *   The storage for this entity type.
+   * @param array $bundles
+   *   The list of bundles this entity type has.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager service.
+   * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager
+   *   The field type plugin manager service.
+   * @param \Drupal\sms\Provider\PhoneNumberVerificationInterface $verification
+   *   The phone number verification service.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, EntityStorageInterface $storage, array $bundles, EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, PhoneNumberVerificationInterface $verification) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $storage, $bundles, $entity_manager, $field_type_manager);
+    $this->phoneNumberVerificationService = $verification;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
+    $entity_type = static::getEntityTypeId($plugin_id);
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $migration,
+      $container->get('entity.manager')->getStorage($entity_type),
+      array_keys($container->get('entity.manager')->getBundleInfo($entity_type)),
+      $container->get('entity.manager'),
+      $container->get('plugin.manager.field.field_type'),
+      $container->get('sms.phone_number.verification')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function import(Row $row, array $old_destination_id_values = []) {
+    $return = parent::import($row, $old_destination_id_values);
+    if ($return) {
+      // After successful import of the verification data, the phone number
+      // should be updated on the corresponding user entity.
+      /** @var \Drupal\sms\Entity\PhoneNumberVerification $verification */
+      $verification = $this->storage->load(reset($return));
+      $this->setVerifiedValue($verification, $row->getDestinationProperty('phone'), $row->getSourceProperty('delta'));
+    }
+    return $return;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function rollback(array $destination_identifier) {
+    // Remove the verified user phone number.
+    parent::rollback($destination_identifier);
+    /** @var \Drupal\sms\Entity\PhoneNumberVerification $verification */
+    $verification = $this->storage->load(reset($destination_identifier));
+    $this->setVerifiedValue($verification, NULL);
+  }
+
+  /**
+   * @param \Drupal\sms\Entity\PhoneNumberVerification $verification
+   *   The phone number verification for a given user entity.
+   * @param string $value
+   *   The verified value to set for the user entity.
+   * @param int $delta
+   *   The specific item of the phone number field to set.
+   */
+  protected function setVerifiedValue(PhoneNumberVerification $verification, $value, $delta = 0) {
+    $user_entity = $verification->getEntity();
+    $phone_number_settings = $this->phoneNumberVerificationService
+      ->getPhoneNumberSettingsForEntity($user_entity);
+    if ($user_entity && $phone_number_settings) {
+      $phone_field_name = $phone_number_settings->getFieldName('phone_number');
+      $user_entity->{$phone_field_name}[$delta] = $value;
+      $user_entity->save();
+    }
+  }
+
+}
diff --git a/src/Plugin/migrate/process/VerificationStatus.php b/src/Plugin/migrate/process/VerificationStatus.php
new file mode 100644
index 0000000..7d0e290
--- /dev/null
+++ b/src/Plugin/migrate/process/VerificationStatus.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\sms\Plugin\migrate\process;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * Changes verification status from D6/D7 format [0, 1, 2] to D8 [true, false].
+ *
+ * @MigrateProcessPlugin(
+ *   id = "sms_verification_status"
+ * )
+ */
+class VerificationStatus extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    return $value == 2;
+  }
+
+}
diff --git a/src/Plugin/migrate/source/D6SmsNumber.php b/src/Plugin/migrate/source/D6SmsNumber.php
new file mode 100644
index 0000000..fc6b866
--- /dev/null
+++ b/src/Plugin/migrate/source/D6SmsNumber.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Drupal\sms\Plugin\migrate\source;
+
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Source plugin for D6 sms_user phone number.
+ *
+ * @MigrateSource(
+ *   id = "d6_sms_number"
+ * )
+ */
+class D6SmsNumber extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return [
+      'uid' => $this->t('User ID'),
+      'delta' => $this->t('Delta'),
+      'number' => $this->t('Phone number'),
+      'status' => $this->t('Verification Status'),
+      'code' => $this->t('Verification code'),
+      'gateway' => $this->t('Verification gateway'),
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return [
+      'uid' => [
+        'type' => 'integer',
+         'alias' => 'u',
+      ],
+      'delta' => [
+        'type' => 'integer',
+         'alias' => 'd',
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->select('sms_user', 'su')->fields('su', array_keys($this->fields()));
+  }
+
+}
