diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for taskwarrior
 
+## 0.1.2.0 -- 2019-12-23
+
+* Added `getUUIDs` function.
+
 ## 0.1.1.0 -- 2019-12-06
 
 * Added `makeTask` and `createTask` functions.
diff --git a/src/Taskwarrior/IO.hs b/src/Taskwarrior/IO.hs
--- a/src/Taskwarrior/IO.hs
+++ b/src/Taskwarrior/IO.hs
@@ -5,6 +5,7 @@
   ( getTasks
   , saveTasks
   , createTask
+  , getUUIDs
   )
 where
 
@@ -14,6 +15,7 @@
 import           Data.Text                      ( Text )
 import qualified Data.Text                     as Text
 import qualified Data.ByteString.Lazy          as LBS
+import qualified Data.ByteString.Lazy.Char8    as LBS
 import qualified Data.Aeson                    as Aeson
 import           System.Process                 ( withCreateProcess
                                                 , CreateProcess(..)
@@ -28,8 +30,10 @@
                                                 , random
                                                 )
 import           Data.Time                      ( getCurrentTime )
+import           Data.UUID                      ( UUID )
+import qualified Data.UUID                     as UUID
 
--- | Uses task export with a given filter like ["description:Milk", "+PENDING"].
+-- | Uses `task export` with a given filter like `["description:Milk", "+PENDING"]`.
 getTasks :: [Text] -> IO [Task]
 getTasks args =
   withCreateProcess
@@ -45,6 +49,24 @@
         input <- LBS.hGetContents stdout
         either fail return . Aeson.eitherDecode $ input
 
+-- | Gives all uuids matching the given filter (e.g. `["description:Milk", "+PENDING"]`). This calls the `task` binary.
+getUUIDs :: [Text] -> IO [UUID]
+getUUIDs args =
+  withCreateProcess
+      ((proc "task" (fmap Text.unpack . (++ ["_uuid"]) $ args)) { std_out = CreatePipe
+                                                                }
+      )
+    $ \_ stdoutMay _ _ -> do
+        stdout <- maybe
+          (fail "Couldn‘t create stdout handle for `task _uuid`")
+          pure
+          stdoutMay
+        input <- LBS.hGetContents stdout
+        maybe (fail "Couldn't parse UUIDs") return
+          . traverse UUID.fromLazyASCIIBytes
+          . LBS.lines
+          $ input
+
 -- | Uses task import to save the given tasks.
 saveTasks :: [Task] -> IO ()
 saveTasks tasks =
@@ -60,10 +82,9 @@
 
 -- | This will create a Task. I runs in IO to create a UUID and get the currentTime. This will not save the Task to taskwarrior.
 -- If you want to create a task, with certain fields and save it, you could do that like this:
--- @
---   newTask <- createTask "Buy Milk"
---   saveTasks [newTask { tags = ["groceries"] }]
--- @
+--
+-- > newTask <- createTask "Buy Milk"
+-- > saveTasks [newTask { tags = ["groceries"] }]
 createTask :: Text -> IO Task
 createTask description = do
   uuid  <- getStdRandom random
diff --git a/taskwarrior.cabal b/taskwarrior.cabal
--- a/taskwarrior.cabal
+++ b/taskwarrior.cabal
@@ -4,7 +4,7 @@
 -- PVP summary:     +-+------- breaking API changes
 --                  | | +----- non-breaking API additions
 --                  | | | +--- code changes with no API change
-version: 0.1.1.0
+version: 0.1.2.0
 synopsis:           Types and aeson instances for taskwarrior tasks
 description:
   Types and aeson instances for the https://taskwarrior.org task import/export feature
@@ -44,7 +44,7 @@
     , bytestring            ^>=0.10.8.2
     , process               ^>=1.6.5.0
     , random                ^>=1.1
-    , string-interpolate    ^>=0.1.0.1
+    , string-interpolate    >=0.1.0.0  && <0.3
     , text                  ^>=1.2.3.1
     , time                  >=1.8.0.2  && <1.10
     , unordered-containers  ^>=0.2.9.0
