diff --git a/emailaddress.cabal b/emailaddress.cabal
--- a/emailaddress.cabal
+++ b/emailaddress.cabal
@@ -1,5 +1,5 @@
 name:                emailaddress
-version:             0.1.4.0
+version:             0.1.5.0
 synopsis:            Wrapper around email-validate library adding instances for common type classes.
 description:         Please see README.md
 homepage:            https://github.com/cdepillabout/emailaddress#readme
@@ -24,6 +24,7 @@
                      , email-validate >= 2
                      , http-api-data >= 0.2
                      , opaleye >= 0.4
+                     , path-pieces >= 0.2
                      , persistent >= 2
                      , postgresql-simple >= 0.5
                      , product-profunctors >= 0.6
diff --git a/src/Text/Email/Validate/Internal.hs b/src/Text/Email/Validate/Internal.hs
--- a/src/Text/Email/Validate/Internal.hs
+++ b/src/Text/Email/Validate/Internal.hs
@@ -45,6 +45,7 @@
 import Text.Read (Read(readPrec), ReadPrec)
 import Web.HttpApiData
     ( FromHttpApiData(parseUrlPiece), ToHttpApiData(toUrlPiece) )
+import Web.PathPieces (PathPiece(fromPathPiece, toPathPiece))
 
 import qualified "email-validate" Text.Email.Validate as EmailValidate
 
@@ -94,6 +95,21 @@
                         Left err -> fail $ "Failed to parse email address: " <> err
                         Right email -> return email
     {-# INLINE parseJSON #-}
+
+-- | See 'emailAddressFromText' and 'toText'.
+--
+-- >>> fmap toText $ fromPathPiece "foo@gmail.com"
+-- Just "foo@gmail.com"
+-- >>> fmap toText $ fromPathPiece "this is not an email address"
+-- Nothing
+-- >>> toPathPiece $ unsafeEmailAddress "foo" "gmail.com"
+-- "foo@gmail.com"
+instance PathPiece EmailAddress where
+    fromPathPiece :: Text -> Maybe EmailAddress
+    fromPathPiece = emailAddressFromText
+
+    toPathPiece :: EmailAddress -> Text
+    toPathPiece = toText
 
 -- | Treat 'EmailAddress' just like a 'Text' value.
 --
