diff --git a/src/snek/service/user_property.py b/src/snek/service/user_property.py
new file mode 100644
index 0000000..7531577
--- /dev/null
+++ b/src/snek/service/user_property.py
@@ -0,0 +1,34 @@
+import pathlib
+import json 
+from snek.system import security
+from snek.system.service import BaseService
+
+
+class UserPropertyService(BaseService):
+    mapper_name = "user_property"
+
+    async def set(self, user_uid, name, value):
+        prop = await self.get(user_uid=user_uid, name=name)
+        if not prop:
+            prop = await self.new()
+            prop["user_uid"] = user_uid
+            prop["name"] = name
+
+        prop["value"] = json.dumps(value,default=str)
+        return await self.save(prop)
+    
+    async def get(self, user_uid, name):
+        try:
+                return json.loads((await self.get(user_uid=user_uid, name=name)).value)
+        except:
+            return None
+
+    async def search(self, query, **kwargs):
+        query = query.strip().lower()
+        if not query:
+            raise []
+        results = []
+        async for result in self.find(name={"ilike": "%" + query + "%"}, **kwargs):
+            results.append(result)
+        return results
+