diff --git a/migration_templates/d7_flag.yml b/migration_templates/d7_flag.yml
new file mode 100644
index 0000000..0e04121
--- /dev/null
+++ b/migration_templates/d7_flag.yml
@@ -0,0 +1,22 @@
+id: d7_flag
+label: Flag configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_flag
+process:
+  id: name
+  label: title
+  entity_type: entity_type
+  global: global
+  weight: default_weight
+  flag_short: 'options/flag_short'
+  flag_long: 'options/flag_long'
+  flag_message: 'options/flag_message'
+  unflag_short: 'options/unflag_short'
+  unflag_long: 'options/unflag_long'
+  unflag_message: 'options/unflag_message'
+  unflag_denied_text: 'options/unflag_denied_text'
+  flag_type: flag_type
+destination:
+  plugin: entity:flag
diff --git a/src/Plugin/migrate/destination/EntityFlag.php b/src/Plugin/migrate/destination/EntityFlag.php
new file mode 100644
index 0000000..f608d9c
--- /dev/null
+++ b/src/Plugin/migrate/destination/EntityFlag.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Drupal\flag\Plugin\migrate\destination;
+
+use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
+use Drupal\migrate\Row;
+
+/**
+ * @MigrateDestination(
+ *   id = "entity:flag"
+ * )
+ */
+class EntityFlag extends EntityConfigBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function import(Row $row, array $old_destination_id_values = array()) {
+    $entity_ids = parent::import($row, $old_destination_id_values);
+    return $entity_ids;
+  }
+
+}
diff --git a/src/Plugin/migrate/source/d7/Flag.php b/src/Plugin/migrate/source/d7/Flag.php
new file mode 100644
index 0000000..660e00d
--- /dev/null
+++ b/src/Plugin/migrate/source/d7/Flag.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Drupal\flag\Plugin\migrate\source\d7;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 Flag source from database.
+ *
+ * @MigrateSource(
+ *   id = "d7_flag",
+ *   source_provider = "flag"
+ * )
+ */
+class Flag extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->select('flag', 'f')->fields('f');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'fid' => $this->t('The unique ID for this particular flag.'),
+      'entity_type' => $this->t(''),
+      'name' => $this->t(''),
+      'title' => $this->t(''),
+      'global' => $this->t('Whether this flag state should act as a single toggle to all users across the site.'),
+      'options' => $this->t(''),
+      'default_weight' => $this->t(' Default weight applied to new items.'),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $flag_entity_type = $row->getSourceProperty('entity_type');
+    $row->setSourceProperty('flag_type', 'entity:' . $flag_entity_type);
+    $row->setSourceProperty('options', unserialize($row->getSourceProperty('options')));
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['fid']['type'] = 'integer';
+    return $ids;
+  }
+
+}
