diff --git a/emailaddress.cabal b/emailaddress.cabal
--- a/emailaddress.cabal
+++ b/emailaddress.cabal
@@ -1,5 +1,5 @@
 name:                emailaddress
-version:             0.1.0.0
+version:             0.1.2.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
@@ -22,6 +22,7 @@
                      , bytestring >= 0.9
                      , email-validate >= 2
                      , opaleye >= 0.4
+                     , persistent >= 2
                      , postgresql-simple >= 0.5
                      , product-profunctors >= 0.6
                      , profunctors >= 0.5
diff --git a/src/Text/Email/Validate.hs b/src/Text/Email/Validate.hs
--- a/src/Text/Email/Validate.hs
+++ b/src/Text/Email/Validate.hs
@@ -26,8 +26,12 @@
       -- * Create EmailAddress
     , emailAddress
     , validate
+    , emailAddressFromText
+    , validateFromText
       -- * Check validity
     , isValid
+      -- * Convert to Text
+    , toText
       -- * Convert back to ByteString
     , toByteString
     , localPart
@@ -39,5 +43,6 @@
     ) where
 
 import Text.Email.Validate.Internal
-    ( EmailAddress, canonicalizeEmail, domainPart, emailAddress, isValid
-    , localPart, toByteString, validate, unsafeEmailAddress )
+    ( EmailAddress, canonicalizeEmail, domainPart, emailAddress
+    , emailAddressFromText, isValid, localPart, toByteString, toText, validate
+    , validateFromText, unsafeEmailAddress )
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
@@ -11,21 +11,30 @@
     , EmailValidate.canonicalizeEmail
     , emailAddress
     , validate
+    , emailAddressFromText
+    , validateFromText
     , unsafeEmailAddress
     , localPart
     , domainPart
     , toByteString
+    , toText
     ) where
 
+import Control.Monad ((<=<))
 import Data.Aeson (FromJSON(..), ToJSON(..), Value(..), withText)
 import Data.Aeson.Types (Parser)
+import Data.Bifunctor (first)
 import Data.ByteString (ByteString)
 import Data.Data (Data)
 import Data.Monoid ((<>))
 import Data.Profunctor (lmap)
 import Data.Profunctor.Product.Default (Default(def))
+import Data.Proxy (Proxy(Proxy))
+import Data.Text (Text, pack)
 import Data.Text.Encoding (decodeUtf8With, encodeUtf8)
 import Data.Text.Encoding.Error (lenientDecode)
+import Database.Persist (PersistField(..), PersistValue)
+import Database.Persist.Sql (PersistFieldSql(..), SqlType)
 import Database.PostgreSQL.Simple.FromField
     ( Conversion, FieldParser, FromField(..), ResultError(..), returnError )
 import Data.Typeable (Typeable)
@@ -78,6 +87,19 @@
     toJSON :: EmailAddress -> Value
     toJSON = String . decodeUtf8With lenientDecode . toByteString
 
+-- | Treat 'EmailAddress' just like a 'Text' value.
+instance PersistField EmailAddress where
+    toPersistValue :: EmailAddress -> PersistValue
+    toPersistValue = toPersistValue . toText
+
+    fromPersistValue :: PersistValue -> Either Text EmailAddress
+    fromPersistValue = first pack . validateFromText <=< fromPersistValue
+
+-- | Treat 'EmailAddress' just like a 'Text' value.
+instance PersistFieldSql EmailAddress where
+    sqlType :: Proxy EmailAddress -> SqlType
+    sqlType _ = sqlType (Proxy :: Proxy Text)
+
 -- | Wrapper around 'EmailValidate.validate'.
 --
 -- >>> validate "foo@gmail.com"
@@ -100,6 +122,14 @@
 emailAddress :: ByteString -> Maybe EmailAddress
 emailAddress = fmap EmailAddress . EmailValidate.emailAddress
 
+-- | Create an 'EmailAddress' from a 'Text' value.  See 'validate'.
+validateFromText :: Text -> Either String EmailAddress
+validateFromText = validate . encodeUtf8
+
+-- | Create an 'EmailAddress' from a 'Text' value.  See 'emailAddress'.
+emailAddressFromText :: Text -> Maybe EmailAddress
+emailAddressFromText = emailAddress . encodeUtf8
+
 -- | Wrapper around 'EmailValidate.unsafeEmailAddress'.
 --
 -- Unsafely create an 'EmailAddress' from a local part and a domain part.  The
@@ -155,3 +185,15 @@
 -- "foo@gmail.com"
 toByteString :: EmailAddress -> ByteString
 toByteString = EmailValidate.toByteString . unEmailAddress
+
+-- | Convert an email address to 'Text'.
+--
+-- This assumes the 'EmailAddress' is UTF8-encoded.
+--
+-- >>> let email = unsafeEmailAddress "foo" "gmail.com"
+-- >>> email
+-- "foo@gmail.com"
+-- >>> toText email
+-- "foo@gmail.com"
+toText :: EmailAddress -> Text
+toText = decodeUtf8With lenientDecode . toByteString
