diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
 
 ## HEAD
 
+## 0.6.2
+
 ## 0.6.1
 
 - Support GHC 8.8.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -232,6 +232,53 @@
 [generalized-repetition](https://github.com/fimad/scalpel/tree/master/examples/generalized-repetition/)
 in the examples directory.
 
+### Operating with other monads inside the Scraper
+`ScraperT` is a monad transformer scraper: it allows lifting `m a` operations
+inside a `ScraperT str m a` with functions like:
+
+```haskell
+-- Particularizes to 'm a -> ScraperT str m a'
+lift :: (MonadTrans t, Monad m) => m a -> t m a
+
+-- Particularizes to things like `IO a -> ScraperT str IO a'
+liftIO :: MonadIO m => IO a -> m a
+```
+
+Example: Perform HTTP requests on page images as you scrape:
+
+1. Isolate images using `chroots`.
+
+2. Within that context of an `img` tag, obtain the `src` attribute containing
+   the location of the file.
+
+3. Perform an IO operation to request metadata headers from the source.
+
+4. Use the data to build and return more complex data
+
+```haskell
+-- Holds original link and data if it could be fetched
+data Image = Image String (Maybe Metadata)
+  deriving Show
+
+-- Holds mime type and file size
+data Metadata = Metadata String Int
+  deriving Show
+
+-- Scrape the page for images: get their metadata
+scrapeImages :: URL -> ScraperT String IO [Image]
+scrapeImages topUrl = do
+    chroots "img" $ do
+        source <- attr "src" "img"
+        guard . not . null $ source
+        -- getImageMeta is called via liftIO because ScrapeT transforms over IO
+        liftM (Image source) $ liftIO (getImageMeta topUrl source)
+```
+
+For the full source of this example, see
+[downloading data](https://github.com/fimad/scalpel/tree/master/examples/image-sizes/)
+
+For more documentation on monad transformers, see the [hackage page](https://hackage.haskell.org/package/transformers)
+
 ### scalpel-core
 
 The `scalpel` package depends on 'http-client' and 'http-client-tls' to provide
diff --git a/scalpel.cabal b/scalpel.cabal
--- a/scalpel.cabal
+++ b/scalpel.cabal
@@ -1,5 +1,5 @@
 name:                scalpel
-version:             0.6.1
+version:             0.6.2
 synopsis:            A high level web scraping library for Haskell.
 description:
     Scalpel is a web scraping library inspired by libraries like Parsec and
@@ -24,7 +24,7 @@
 source-repository this
   type:     git
   location: https://github.com/fimad/scalpel.git
-  tag:      v0.6.1
+  tag:      v0.6.2
 
 library
   other-extensions:
@@ -38,7 +38,7 @@
   default-language: Haskell2010
   build-depends:
           base            >= 4.6 && < 5
-      ,   scalpel-core    == 0.6.1
+      ,   scalpel-core    == 0.6.2
       ,   bytestring
       ,   case-insensitive
       ,   data-default
diff --git a/src/Text/HTML/Scalpel.hs b/src/Text/HTML/Scalpel.hs
--- a/src/Text/HTML/Scalpel.hs
+++ b/src/Text/HTML/Scalpel.hs
@@ -122,6 +122,7 @@
 
 -- * Scrapers
 ,   Scraper
+,   ScraperT
 -- ** Primitives
 ,   attr
 ,   attrs
@@ -138,7 +139,11 @@
 -- ** Executing scrapers
 ,   scrape
 ,   scrapeStringLike
+,   scrapeT
+,   scrapeStringLikeT
 ,   URL
+,   fetchTags
+,   fetchTagsWithConfig
 ,   scrapeURL
 ,   scrapeURLWithConfig
 ,   Config (..)
@@ -149,6 +154,7 @@
 
 -- * Serial Scraping
 ,   SerialScraper
+,   SerialScraperT
 ,   inSerial
 -- ** Primitives
 ,   stepNext
diff --git a/src/Text/HTML/Scalpel/Internal/Scrape/URL.hs b/src/Text/HTML/Scalpel/Internal/Scrape/URL.hs
--- a/src/Text/HTML/Scalpel/Internal/Scrape/URL.hs
+++ b/src/Text/HTML/Scalpel/Internal/Scrape/URL.hs
@@ -9,16 +9,18 @@
 ,   utf8Decoder
 ,   iso88591Decoder
 
+,   fetchTags
+,   fetchTagsWithConfig
 ,   scrapeURL
 ,   scrapeURLWithConfig
 ) where
 
 import Text.HTML.Scalpel.Core
 
-import Control.Applicative ((<$>))
+import Control.Monad
 import Data.CaseInsensitive ()
 import Data.Default (def)
-import Data.Maybe (fromMaybe, listToMaybe)
+import Data.Maybe (listToMaybe)
 
 import qualified Data.ByteString.Lazy as LBS
 import qualified Data.Default as Default
@@ -64,14 +66,20 @@
 scrapeURLWithConfig :: (TagSoup.StringLike str)
                   => Config str -> URL -> Scraper str a -> IO (Maybe a)
 scrapeURLWithConfig config url scraper = do
-    manager <- fromMaybe HTTP.getGlobalManager (return <$> manager config)
-    tags <- downloadAsTags (decoder config) manager url
-    return (scrape scraper tags)
-    where
-        downloadAsTags decoder manager url = do
-            request <- HTTP.parseRequest url
-            response <- HTTP.httpLbs request manager
-            return $ TagSoup.parseTags $ decoder response
+    scrape scraper `liftM` fetchTagsWithConfig config url
+
+-- | Download and parse the contents of the given URL.
+fetchTags :: TagSoup.StringLike str
+                => URL -> IO [TagSoup.Tag str]
+fetchTags = fetchTagsWithConfig def
+
+-- | Download and parse the contents of the given URL with the given 'Config'.
+fetchTagsWithConfig :: TagSoup.StringLike str
+                  => Config str -> URL -> IO [TagSoup.Tag str]
+fetchTagsWithConfig config url = do
+    manager <- maybe HTTP.getGlobalManager return (manager config)
+    response <- flip HTTP.httpLbs manager =<< HTTP.parseRequest url
+    return $ TagSoup.parseTags $ decoder config $ response
 
 -- | The default response decoder. This decoder attempts to infer the character
 -- set of the HTTP response body from the `Content-Type` header. If this header
