diff --git a/district/migrations/0263_districtoctopuspersonpage_is_automatically_created_and_more.py b/district/migrations/0263_districtoctopuspersonpage_is_automatically_created_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..52e49402b5c7741f6e330276fbc756a6d7c2351f
--- /dev/null
+++ b/district/migrations/0263_districtoctopuspersonpage_is_automatically_created_and_more.py
@@ -0,0 +1,25 @@
+# Generated by Django 5.0.7 on 2024-07-30 17:16
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0262_alter_districtcenterpage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='districtoctopuspersonpage',
+            name='is_automatically_created',
+            field=models.BooleanField(default=True, help_text='Pokud vytváříš stránku pro osobu z Chobotnice manuálně, toto pole by nemělo být zaškrtlé. V ostatních případech ho zaškrtlé nech.', verbose_name='Profil vytvořen automaticky'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='districtoctopuspersonpage',
+            name='originating_group',
+            field=models.CharField(default='', help_text='Skupina, ze které byla tato osba importována', max_length=128, verbose_name='Skupina'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index fda8b985e06a0ba697fb9bbfdba8a80823e4cc7d..2ab805900cfc3eb9ffc6b227f9112e6543d24055 100644
--- a/district/models.py
+++ b/district/models.py
@@ -321,10 +321,27 @@ class DistrictOctopusPersonPage(ExtendedMetadataPageMixin, SubpageMixin, Metadat
         verbose_name="Osoba"
     )
 
+    is_automatically_created = models.BooleanField(
+        verbose_name="Profil vytvořen automaticky",
+        help_text=(
+            "Pokud vytváříš stránku pro osobu z Chobotnice manuálně, "
+            "toto pole by nemělo být zaškrtlé. V ostatních případech "
+            "ho zaškrtlé nech."
+        )        
+    )
+
+    # Shouldn't be visible in the admin interface
+    originating_group = models.CharField(
+        verbose_name="Skupina",
+        help_text="Skupina, ze které byla tato osba importována",
+        max_length=128
+    )
+
     ### PANELS
 
     content_panels = Page.content_panels + [
         FieldPanel("person"),
+        FieldPanel("is_automatically_created")
     ]
 
     ### RELATIONS
diff --git a/district/tasks.py b/district/tasks.py
index 4f24dd2c89e92adf817a24c5f4514e1754838ff4..1f03829a8fe3fc1c7754b248e453bd63ae4a71c8 100644
--- a/district/tasks.py
+++ b/district/tasks.py
@@ -36,12 +36,12 @@ def import_people_from_group(
     group_shortcut,
     lock_file_name
 ):
-    from .models import DistrictPeoplePage, DistrictPersonPage
+    from .models import DistrictPeoplePage, DistrictOctopusPersonPage
 
     return PeopleGroupImporter(
         people_parent_page_id=people_parent_page_id,
         people_parent_page_model=DistrictPeoplePage,
-        person_page_model=DistrictPersonPage,
+        person_page_model=DistrictOctopusPersonPage,
         collection_id=collection_id,
         group_shortcut=group_shortcut,
         lock_file_name=lock_file_name,
diff --git a/shared/people_import.py b/shared/people_import.py
index d6bafe37c958a5b33f08f5117e12e504a3271901..26894a590724dc8e07c6f00230af04915abaf6a7 100644
--- a/shared/people_import.py
+++ b/shared/people_import.py
@@ -1,6 +1,7 @@
 from gql import gql, Client
 from gql.transport.aiohttp import AIOHTTPTransport
 from django.conf import settings
+from django.db import models
 from shared.models import OctopusPerson
 import os
 import logging
@@ -36,6 +37,7 @@ class PeopleGroupImporter:
             self.new_user_count = 0
             self.existing_user_count = 0
 
+            self.people_parent_page = self.people_parent_page_model.objects.get(id=self.people_parent_page_id)
             self.collection = Collection.objects.get(id=self.collection_id)
 
             self.transport = AIOHTTPTransport(url=settings.OCTOPUS_API_URL)
@@ -285,7 +287,28 @@ class PeopleGroupImporter:
             people_profiles = self.get_processed_people_profiles(people_ids)
             people_instances = self.create_and_update_people_models(people_profiles)
 
-            
+            for person_instance in people_instances:
+                person_page = self.person_page_model.objects.filter(person=person_instance).descendant_of(self.people_parent_page).first()
+
+                if person_page is None:
+                    person_page = self.person_page_model(
+                        person=person_instance,
+                        is_automatically_created=True,
+                        originating_group=self.group_shortcut,
+                        title=person_instance.display_name,
+                    )
+
+                    self.people_parent_page.add_child(instance=person_page)
+
+                    person_page.save_revision().publish()
+
+            # Delete old pages that correspond to profiles which aren't
+            # part of the group we are importing anymore.
+            self.person_page_model.objects.filter(
+                ~models.Q(person__in=people_instances),
+                originating_group=self.group_shortcut,
+                is_automatically_created=True
+            ).descendant_of(self.people_parent_page).delete()
         finally:
             # No matter what happens, at least remove the lockfile.