diff --git a/openbook_auth/migrations/0035_user_tracking_consent_ad_partners.py b/openbook_auth/migrations/0035_user_tracking_consent_ad_partners.py
new file mode 100644
index 0000000000000000000000000000000000000000..2852475b9a79f9105e4cab691278024b22e162b8
--- /dev/null
+++ b/openbook_auth/migrations/0035_user_tracking_consent_ad_partners.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.12 on 2025-02-24 14:28
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("openbook_auth", "0034_remove_userprofile_cover_and_more"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="user",
+            name="tracking_consent_ad_partners",
+            field=models.BooleanField(blank=True, default=None, null=True),
+        ),
+    ]
diff --git a/openbook_auth/models.py b/openbook_auth/models.py
index a912b8777e4f0ae028ce90334c93ef4559e003ce..d124e12b8afc3bcc13c2c9fcfa73095af572d06b 100644
--- a/openbook_auth/models.py
+++ b/openbook_auth/models.py
@@ -287,6 +287,7 @@ class User(ModelWithUUID, AbstractUser):
 
     tracking_consent_analytics = models.BooleanField(blank=True, null=True, default=None)
     tracking_consent_personalization = models.BooleanField(blank=True, null=True, default=None)
+    tracking_consent_ad_partners = models.BooleanField(blank=True, null=True, default=None)
 
     JWT_TOKEN_TYPE_CHANGE_EMAIL = "CE"
     JWT_TOKEN_TYPE_PASSWORD_RESET = "PR"
@@ -800,6 +801,7 @@ class User(ModelWithUUID, AbstractUser):
         remove_avatar=False,
         tracking_consent_analytics=None,
         tracking_consent_personalization=None,
+        tracking_consent_ad_partners=None,
     ) -> None:
         if url is not None:
             if len(url) == 0:
@@ -849,6 +851,8 @@ class User(ModelWithUUID, AbstractUser):
             self.tracking_consent_analytics = tracking_consent_analytics
         if tracking_consent_personalization is not None:
             self.tracking_consent_personalization = tracking_consent_personalization
+        if tracking_consent_ad_partners is not None:
+            self.tracking_consent_ad_partners = tracking_consent_ad_partners
 
         if pronouns is not None:
             self.profile.pronouns = pronouns
diff --git a/openbook_auth/schema/mutations.py b/openbook_auth/schema/mutations.py
index 272889f7c657faaee6e112e598b1b6745da4dc75..07d39be9e685b34bed0aaed39a8c8fd364ef1d34 100644
--- a/openbook_auth/schema/mutations.py
+++ b/openbook_auth/schema/mutations.py
@@ -114,6 +114,7 @@ class Mutation:
             remove_avatar=remove_avatar,
             tracking_consent_analytics=data.get("tracking_consent_analytics"),
             tracking_consent_personalization=data.get("tracking_consent_personalization"),
+            tracking_consent_ad_partners=data.get("tracking_consent_ad_partners"),
             save=True,
         )
         current_user_fields_after = _capture_user_fields(current_user)
diff --git a/openbook_auth/schema/types.py b/openbook_auth/schema/types.py
index e4266c0b3cd9acf801feebe06eb97c8a4b33f0fd..14f4aadca4fbabdfe62626aa78912843ceac2d7c 100644
--- a/openbook_auth/schema/types.py
+++ b/openbook_auth/schema/types.py
@@ -46,6 +46,7 @@ class UpdateAuthenticatedUserInput:
     skills_v2: Optional[List[str]] = strawberry.UNSET
     tracking_consent_analytics: Optional[bool] = strawberry.UNSET
     tracking_consent_personalization: Optional[bool] = strawberry.UNSET
+    tracking_consent_ad_partners: Optional[bool] = strawberry.UNSET
 
 
 @strawberry.input
@@ -143,6 +144,7 @@ class User:
 class AuthenticatedUser(User):
     tracking_consent_analytics: Optional[bool]
     tracking_consent_personalization: Optional[bool]
+    tracking_consent_ad_partners: Optional[bool]
     is_employee: bool
     is_verified: bool
     role: Optional[UserRole]
diff --git a/openbook_auth/serializers/authenticated_user_serializers.py b/openbook_auth/serializers/authenticated_user_serializers.py
index a1613c4762b58a08302da941b29979679078bd3e..7d7377c47c19718cd337782724fbd8ad834b3dfd 100644
--- a/openbook_auth/serializers/authenticated_user_serializers.py
+++ b/openbook_auth/serializers/authenticated_user_serializers.py
@@ -118,3 +118,4 @@ class UpdateAuthenticatedUserSerializer(serializers.Serializer):
     )
     tracking_consent_analytics = serializers.BooleanField(required=False, default=None, allow_null=True)
     tracking_consent_personalization = serializers.BooleanField(required=False, default=None, allow_null=True)
+    tracking_consent_ad_partners = serializers.BooleanField(required=False, default=None, allow_null=True)
diff --git a/openbook_common/tracking.py b/openbook_common/tracking.py
index d39924dc8044c78b5ec9634dbbf8dabff000c86d..2231e54bc49d1736fddddf514709b85b93abd850 100644
--- a/openbook_common/tracking.py
+++ b/openbook_common/tracking.py
@@ -37,6 +37,7 @@ class TrackingUser(Protocol):
     username: str
     tracking_consent_analytics: bool
     tracking_consent_personalization: bool
+    tracking_consent_ad_partners: bool
 
 
 def initialize_tracking(config: PostHogConfig):
@@ -68,6 +69,7 @@ def track(user: TrackingUser, event: TrackingEvent):
                     "event_version__patch": event.event_version__patch,
                     "trackingConsentAnalytics": user.tracking_consent_analytics,
                     "trackingConsentPersonalization": user.tracking_consent_personalization,
+                    "trackingConsentAdPartners": user.tracking_consent_ad_partners,
                 },
             )
         except Exception as e: