diff --git a/src/metabase/models/application_permissions_revision.clj b/src/metabase/models/application_permissions_revision.clj
index 4154daf9c91203a0c6a0ff4524357b3f0dc2e08c..cfa1256bd4c438df60bbff56947ac7d55980e0a1 100644
--- a/src/metabase/models/application_permissions_revision.clj
+++ b/src/metabase/models/application_permissions_revision.clj
@@ -6,15 +6,12 @@
 
 (models/defmodel ApplicationPermissionsRevision :application_permissions_revision)
 
-(defn- pre-insert [revision]
-  (assoc revision :created_at :%now))
-
 (u/strict-extend (class ApplicationPermissionsRevision)
   models/IModel
   (merge models/IModelDefaults
          {:types      (constantly {:before :json
                                    :after  :json})
-          :pre-insert pre-insert
+          :properties (constantly {:created-at-timestamped? true})
           :pre-update (fn [& _] (throw (Exception. (tru "You cannot update a ApplicationPermissionsRevision!"))))}))
 
 (defn latest-id
diff --git a/src/metabase/models/collection_permission_graph_revision.clj b/src/metabase/models/collection_permission_graph_revision.clj
index 0969d6ac7f1ec6203d370dd81b0404b381c57fd6..ec33e4e4df6fdfe718bf844a2fc3529fb1d1670f 100644
--- a/src/metabase/models/collection_permission_graph_revision.clj
+++ b/src/metabase/models/collection_permission_graph_revision.clj
@@ -6,18 +6,14 @@
 
 (models/defmodel CollectionPermissionGraphRevision :collection_permission_graph_revision)
 
-(defn- pre-insert [revision]
-  (assoc revision :created_at :%now))
-
 (u/strict-extend (class CollectionPermissionGraphRevision)
   models/IModel
   (merge models/IModelDefaults
          {:types      (constantly {:before :json
                                    :after  :json})
-          :pre-insert pre-insert
+          :properties (constantly {:created-at-timestamped? true})
           :pre-update (fn [& _] (throw (Exception. (tru "You cannot update a CollectionPermissionGraphRevision!"))))}))
 
-
 (defn latest-id
   "Return the ID of the newest `CollectionPermissionGraphRevision`, or zero if none have been made yet.
    (This is used by the collection graph update logic that checks for changes since the original graph was fetched)."
diff --git a/src/metabase/models/interface.clj b/src/metabase/models/interface.clj
index f4f2e7a9ff7af3fd6823bb398a88b8247696a640..f8d81c34f2327a91f2af6f35e3d0058ee78f00ee 100644
--- a/src/metabase/models/interface.clj
+++ b/src/metabase/models/interface.clj
@@ -227,6 +227,10 @@
   :insert (comp add-created-at-timestamp add-updated-at-timestamp)
   :update add-updated-at-timestamp)
 
+;; like `timestamped?`, but for models that only have an `:created_at` column
+(models/add-property! :created-at-timestamped?
+  :insert add-created-at-timestamp)
+
 ;; like `timestamped?`, but for models that only have an `:updated_at` column
 (models/add-property! :updated-at-timestamped?
   :insert add-updated-at-timestamp
diff --git a/src/metabase/models/permissions_revision.clj b/src/metabase/models/permissions_revision.clj
index 25d563615be9c97475d448645c2a8ae0a70e4f20..3ec6a0e25e6648fa8c044a18ed29fa9b40be53d4 100644
--- a/src/metabase/models/permissions_revision.clj
+++ b/src/metabase/models/permissions_revision.clj
@@ -6,15 +6,12 @@
 
 (models/defmodel PermissionsRevision :permissions_revision)
 
-(defn- pre-insert [revision]
-  (assoc revision :created_at :%now))
-
 (u/strict-extend (class PermissionsRevision)
   models/IModel
   (merge models/IModelDefaults
          {:types      (constantly {:before :json
                                    :after  :json})
-          :pre-insert pre-insert
+          :properties (constantly {:created-at-timestamped? true})
           :pre-update (fn [& _] (throw (Exception. (tru "You cannot update a PermissionsRevision!"))))}))
 
 (defn latest-id
diff --git a/src/metabase/models/session.clj b/src/metabase/models/session.clj
index fd27edbec74bf10c1ba2bb05198734f3fffd563c..a2388cc075ec243c50d1f98c0861d3ae375f2b57 100644
--- a/src/metabase/models/session.clj
+++ b/src/metabase/models/session.clj
@@ -17,7 +17,7 @@
   (throw (RuntimeException. "You cannot update a Session.")))
 
 (defn- pre-insert [session]
-  (cond-> (assoc session :created_at :%now)
+  (cond-> session
     (some-> mw.misc/*request* request.u/embedded?) (assoc :anti_csrf_token (random-anti-csrf-token))))
 
 (defn- post-insert [{anti-csrf-token :anti_csrf_token, :as session}]
@@ -30,4 +30,5 @@
    models/IModelDefaults
    {:pre-insert  pre-insert
     :post-insert post-insert
-    :pre-update  pre-update}))
+    :pre-update  pre-update
+    :properties  (constantly {:created-at-timestamped? true})}))