diff --git a/Content.Server/Store/Conditions/BuyerObjectiveWhitelistCondition.cs b/Content.Server/Store/Conditions/BuyerObjectiveWhitelistCondition.cs
new file mode 100644
index 00000000000..b6e7496ce91
--- /dev/null
+++ b/Content.Server/Store/Conditions/BuyerObjectiveWhitelistCondition.cs
@@ -0,0 +1,46 @@
+using Content.Shared.Mind;
+using Content.Shared.Store;
+using Content.Shared.Whitelist;
+
+namespace Content.Server.Store.Conditions;
+
+///
+/// Filters out an entry based on the objectives of an entity.
+///
+public sealed partial class BuyerObjectiveWhitelistCondition : ListingCondition
+{
+ ///
+ /// A whitelist of objective types.
+ /// If there is no whitelist, the object will appear by default.
+ ///
+ [DataField]
+ public EntityWhitelist? Whitelist;
+
+ ///
+ /// A blacklist of objective types.
+ /// If an objective is both whitelisted and blacklisted the blacklist will take priority and the entry will not appear.
+ ///
+ [DataField]
+ public EntityWhitelist? Blacklist;
+
+ public override bool Condition(ListingConditionArgs args)
+ {
+ var ent = args.EntityManager;
+ var whitelistSystem = ent.System();
+
+ if (!args.EntityManager.TryGetComponent(args.Buyer, out var mindComp))
+ return true; // inanimate objects don't have minds
+
+ var whitelisted = false;
+
+ foreach (var objective in mindComp.Objectives)
+ {
+ if (whitelistSystem.IsWhitelistPass(Blacklist, objective))
+ return false;
+ if (whitelistSystem.IsWhitelistPass(Whitelist, objective))
+ whitelisted = true;
+ }
+
+ return Whitelist == null || whitelisted;
+ }
+}