diff --git a/arkindex/dataimport/admin.py b/arkindex/dataimport/admin.py
index 9e3efcea107d1fcf7ee0807775ea6e55291b9a69..d775bb5ce2131e5852fb340a839ce598e5dc8452 100644
--- a/arkindex/dataimport/admin.py
+++ b/arkindex/dataimport/admin.py
@@ -36,12 +36,12 @@ class DataImportAdmin(admin.ModelAdmin):
     list_display = ('id', 'creator', 'corpus', 'state', 'mode')
     list_filter = [('mode', EnumFieldListFilter), ]
     fieldsets = (
-        (None, {'fields': ('id', 'creator', 'corpus', 'state', 'mode', 'workflow', 'activity_state')}),
+        (None, {'fields': ('id', 'creator', 'corpus', 'state', 'mode', 'workflow', 'activity_state', 'template')}),
         ('Elements filters', {
             'fields': ('element', 'element_type', 'folder_type', 'name_contains', 'best_class')
         }),
     )
-    readonly_fields = ('id', 'workflow', 'state', 'activity_state')
+    readonly_fields = ('id', 'workflow', 'state', 'activity_state', 'template')
     raw_id_fields = ('element', )
     inlines = [DataFileInline, WorkerRunInline, ElementInline]
 
diff --git a/arkindex/dataimport/migrations/0043_dataimport_template.py b/arkindex/dataimport/migrations/0043_dataimport_template.py
new file mode 100644
index 0000000000000000000000000000000000000000..11b20cf56b891f40017e6c51139110b82c082f73
--- /dev/null
+++ b/arkindex/dataimport/migrations/0043_dataimport_template.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.6 on 2021-11-18 12:13
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('dataimport', '0042_alter_workeractivity_constraints'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='dataimport',
+            name='template',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='applications', to='dataimport.dataimport'),
+        ),
+    ]
diff --git a/arkindex/dataimport/models.py b/arkindex/dataimport/models.py
index 6660737e8026400adedd3dbe5ac1037a62447e24..14f9575d58fad82f27cedd67a6acc8b049128f48 100644
--- a/arkindex/dataimport/models.py
+++ b/arkindex/dataimport/models.py
@@ -42,6 +42,7 @@ class DataImportMode(Enum):
     IIIF = 'iiif'
     Workers = 'workers'
     Transkribus = 'transkribus'
+    Template = 'template'
 
 
 class DataImport(IndexableModel):
@@ -106,8 +107,18 @@ class DataImport(IndexableModel):
     # Use elements cache executing the workflow
     use_cache = models.BooleanField(default=False)
 
+    # Allows to use a GPU when executing the workflow
     use_gpu = models.BooleanField(default=False, blank=True)
 
+    # Refers a workflow template
+    template = models.ForeignKey(
+        'dataimport.DataImport',
+        on_delete=models.SET_NULL,
+        null=True,
+        blank=True,
+        related_name='applications',
+    )
+
     class Meta:
         ordering = ['corpus', '-created']
 
diff --git a/arkindex/dataimport/serializers/imports.py b/arkindex/dataimport/serializers/imports.py
index a99ad4f04b1c023b914af8eb0a3a4e1085af3af5..c21bd09a33a04507de50beb65e25a5db860a337f 100644
--- a/arkindex/dataimport/serializers/imports.py
+++ b/arkindex/dataimport/serializers/imports.py
@@ -72,6 +72,13 @@ class DataImportSerializer(DataImportLightSerializer):
         max_length=250
     )
 
+    template_id = serializers.PrimaryKeyRelatedField(
+        queryset=DataImport.objects.none(),
+        allow_null=True,
+        source='template',
+        style={'base_template': 'input.html'}
+    )
+
     class Meta(DataImportLightSerializer.Meta):
         fields = DataImportLightSerializer.Meta.fields + (
             'files',
@@ -84,6 +91,7 @@ class DataImportSerializer(DataImportLightSerializer):
             'load_children',
             'use_cache',
             'use_gpu',
+            'template_id'
         )
         read_only_fields = DataImportLightSerializer.Meta.read_only_fields + (
             'files',
@@ -92,6 +100,7 @@ class DataImportSerializer(DataImportLightSerializer):
             'folder_type',
             'use_cache',
             'use_gpu',
+            'template_id'
         )
 
     def __init__(self, *args, **kwargs):
diff --git a/arkindex/dataimport/tests/test_imports.py b/arkindex/dataimport/tests/test_imports.py
index 658402008631856108ac90b66ce26dea47240343..3c936c4c38e83e0a5b8f2a5c26322d029f9c33f5 100644
--- a/arkindex/dataimport/tests/test_imports.py
+++ b/arkindex/dataimport/tests/test_imports.py
@@ -451,7 +451,7 @@ class TestImports(FixtureAPITestCase):
         If no activities exists for this process, it is deleted directly.
         """
         self.client.force_login(self.user)
-        with self.assertNumQueries(12):
+        with self.assertNumQueries(13):
             response = self.client.delete(reverse('api:import-details', kwargs={'pk': self.elts_process.id}))
         self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
         with self.assertRaises(DataImport.DoesNotExist):
@@ -462,7 +462,7 @@ class TestImports(FixtureAPITestCase):
         A superuser is allowed to delete any dataimport
         """
         self.client.force_login(self.superuser)
-        with self.assertNumQueries(9):
+        with self.assertNumQueries(10):
             response = self.client.delete(reverse('api:import-details', kwargs={'pk': self.user_img_process.id}))
         self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
         with self.assertRaises(DataImport.DoesNotExist):
@@ -508,7 +508,7 @@ class TestImports(FixtureAPITestCase):
             worker_version=WorkerVersion.objects.get(worker__slug='reco'),
             state=WorkerActivityState.Processed,
         )
-        with self.assertNumQueries(11):
+        with self.assertNumQueries(12):
             response = self.client.delete(reverse('api:import-details', kwargs={'pk': self.elts_process.id}))
         self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
         with self.assertRaises(DataImport.DoesNotExist):
@@ -770,6 +770,7 @@ class TestImports(FixtureAPITestCase):
             'revision': None,
             'state': 'unscheduled',
             'workflow': None,
+            'template_id': None,
         })
 
     def test_retry_requires_login(self):
diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py
index 8659c5323959fb299d033412aeeefa894292298d..3748e1509cd8ef48e1a10045ae71140bc6e9494c 100644
--- a/arkindex/dataimport/tests/test_repos.py
+++ b/arkindex/dataimport/tests/test_repos.py
@@ -359,7 +359,8 @@ class TestRepositories(FixtureTestCase):
             'mode': DataImportMode.Repository.value,
             'revision': self.serialized_revision,
             'state': State.Unscheduled.value,
-            'workflow': None
+            'workflow': None,
+            'template_id': None,
         })
 
         # Thumbnails are not generated for Workers imports
@@ -402,7 +403,8 @@ class TestRepositories(FixtureTestCase):
             'mode': DataImportMode.Repository.value,
             'revision': self.serialized_revision,
             'state': State.Unscheduled.value,
-            'workflow': None
+            'workflow': None,
+            'template_id': None
         })
 
         # Thumbnails are generated for IIIF imports
diff --git a/arkindex/dataimport/tests/test_workflows_api.py b/arkindex/dataimport/tests/test_workflows_api.py
index 4d2cbda2eae1f16c3cb317cf42e063e3db5a43f3..5f53cf935c40310f985af2c84cd7f9f141ccd7a5 100644
--- a/arkindex/dataimport/tests/test_workflows_api.py
+++ b/arkindex/dataimport/tests/test_workflows_api.py
@@ -94,6 +94,7 @@ class TestWorkflows(FixtureAPITestCase):
             'folder_type': None,
             'element_type': 'page',
             'element': None,
+            'template_id': None,
             'load_children': False,
             'use_cache': False,
             'use_gpu': False,
@@ -148,6 +149,7 @@ class TestWorkflows(FixtureAPITestCase):
             'workflow': None,
             'folder_type': None,
             'element_type': None,
+            'template_id': None,
             'load_children': True,
             'use_cache': True,
             'use_gpu': False,