diff --git a/Data/Object.hs b/Data/Object.hs
--- a/Data/Object.hs
+++ b/Data/Object.hs
@@ -52,11 +52,16 @@
     , fromScalar
     , fromSequence
     , fromMapping
+      -- * Lookups
+    , lookupObject
+    , lookupScalar
+    , lookupSequence
+    , lookupMapping
     ) where
 
 import Control.Arrow
 import Control.Applicative
-import Control.Monad (ap)
+import Control.Monad (ap, (<=<))
 
 import Prelude hiding (mapM, sequence)
 
@@ -181,6 +186,7 @@
     ExpectedScalar
     | ExpectedSequence
     | ExpectedMapping
+    | MissingKey String
     deriving (Typeable, Show)
 instance Exception ObjectExtractError
 
@@ -205,3 +211,30 @@
             -> m [(k, Object k v)]
 fromMapping (Mapping m) = return m
 fromMapping _ = failure ExpectedMapping
+
+lookupObject :: (Show k, Eq k, Failure ObjectExtractError m)
+             => k
+             -> [(k, Object k v)]
+             -> m (Object k v)
+lookupObject k pairs =
+    case lookup k pairs of
+        Nothing -> failure $ MissingKey $ show k
+        Just v -> return v
+
+lookupScalar :: (Show k, Eq k, Failure ObjectExtractError m)
+             => k
+             -> [(k, Object k v)]
+             -> m v
+lookupScalar k = fromScalar <=< lookupObject k
+
+lookupSequence :: (Show k, Eq k, Failure ObjectExtractError m)
+               => k
+               -> [(k, Object k v)]
+               -> m [Object k v]
+lookupSequence k = fromSequence <=< lookupObject k
+
+lookupMapping :: (Show k, Eq k, Failure ObjectExtractError m)
+              => k
+              -> [(k, Object k v)]
+              -> m [(k, Object k v)]
+lookupMapping k = fromMapping <=< lookupObject k
diff --git a/data-object.cabal b/data-object.cabal
--- a/data-object.cabal
+++ b/data-object.cabal
@@ -1,5 +1,5 @@
 name:            data-object
-version:         0.3.0
+version:         0.3.1
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman, Nicolas Pouillard
