diff --git a/postgrestutils/utils.py b/postgrestutils/utils.py
index cf21a3fca42b2e96933464be13d075069ae16be9..35b6e9519287ca1fc5edf074a6986d0a68b8b7a4 100644
--- a/postgrestutils/utils.py
+++ b/postgrestutils/utils.py
@@ -1,7 +1,7 @@
 import importlib.util
 import logging
 import re
-from datetime import datetime, timedelta, timezone
+from datetime import date, datetime, timedelta, timezone
 from typing import Dict, Union
 
 _DJANGO = importlib.util.find_spec("django") is not None
@@ -71,6 +71,13 @@ def _try_python_parse_dt(value: str) -> Union[datetime, str]:
 _try_parse_dt = _try_django_parse_dt if _DJANGO else _try_python_parse_dt
 
 
+def _try_parse_date(value: str) -> Union[date, str]:
+    try:
+        return datetime.strptime(value, "%Y-%m-%d").date()
+    except ValueError:
+        return value
+
+
 def datetime_parser(json_dict: dict) -> dict:
     """
     A function to use as `object_hook` when deserializing JSON that parses
@@ -78,7 +85,11 @@ def datetime_parser(json_dict: dict) -> dict:
     :param json_dict: the original `json_dict` to process
     :return: the modified `json_dict`
     """
+    str_parsers = (_try_parse_dt, _try_parse_date)
+
     for key, value in json_dict.items():
         if isinstance(value, str):
-            json_dict[key] = _try_parse_dt(value)
+            for parser in str_parsers:
+                json_dict[key] = parser(value)
+            # json_dict[key] = _try_parse_dt(value)
     return json_dict