diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## [_Unreleased_](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.3.1...main)
+## [_Unreleased_](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.4.0...main)
+
+## [v0.4.4.0](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.3.1...persistent-sql-lifted-v0.4.4.0)
+
+Add `selectCount` and `selectExists`
 
 ## [v0.4.3.1](https://github.com/freckle/persistent-sql-lifted/compare/persistent-sql-lifted-v0.4.3.0...persistent-sql-lifted-v0.4.3.1)
 
diff --git a/library/Database/Persist/Sql/Lifted.hs b/library/Database/Persist/Sql/Lifted.hs
--- a/library/Database/Persist/Sql/Lifted.hs
+++ b/library/Database/Persist/Sql/Lifted.hs
@@ -38,6 +38,8 @@
   , selectList
 
     -- * Selecting counts/existence
+  , selectCount
+  , selectExists
   , count
   , exists
   , existsBy
@@ -115,12 +117,21 @@
 #if MIN_VERSION_base(4,17,0)
 import Data.Type.Equality (type (~))
 #endif
-import Data.Functor ((<$>))
+import Prelude (Integral)
+
+import Control.Applicative (pure)
+import Data.Bool (Bool (..))
+import Data.Function (($))
+import Data.Functor (($>), (<$>))
+import Data.Maybe (maybe)
+import Database.Esqueleto.Experimental (PersistField, Value (..), countRows)
 import Database.Persist (Key, PersistEntity (PersistEntityBackend), Update)
 import Database.Persist.Sql.Lifted.Core
 import Database.Persist.Sql.Lifted.Esqueleto
+import Database.Persist.Sql.Lifted.Expression qualified as SqlExpr
 import Database.Persist.Sql.Lifted.Persistent hiding (delete, update)
 import Database.Persist.Sql.Lifted.Persistent qualified as Persistent
+import Database.Persist.Sql.Lifted.Query (SqlQuery)
 import Database.Persist.Types (Entity (..))
 import GHC.Stack (HasCallStack)
 
@@ -151,3 +162,17 @@
   -> [Update a]
   -> m (Entity a)
 updateGetEntity k us = Entity k <$> updateGet k us
+
+-- | Get only the number of rows that a 'SqlQuery' would select
+selectCount
+  :: forall a m
+   . (HasCallStack, Integral a, MonadSqlBackend m, PersistField a)
+  => SqlQuery ()
+  -> m a
+selectCount q =
+  maybe 0 unValue <$> selectOne (q $> countRows)
+
+-- | Get whether a 'SqlQuery' would select anything
+selectExists
+  :: forall m. (HasCallStack, MonadSqlBackend m) => SqlQuery () -> m Bool
+selectExists q = maybe False unValue <$> selectOne (pure $ SqlExpr.exists q)
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: persistent-sql-lifted
-version: 0.4.3.1
+version: 0.4.4.0
 
 maintainer: Freckle Education
 category: Database
diff --git a/persistent-sql-lifted.cabal b/persistent-sql-lifted.cabal
--- a/persistent-sql-lifted.cabal
+++ b/persistent-sql-lifted.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               persistent-sql-lifted
-version:            0.4.3.1
+version:            0.4.4.0
 license:            MIT
 license-file:       LICENSE
 maintainer:         Freckle Education
