diff --git a/logplex-parse.cabal b/logplex-parse.cabal
--- a/logplex-parse.cabal
+++ b/logplex-parse.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.1.0.1
+version:             0.1.0.2
 
 -- A short (one-line) description of the package.
 synopsis:            Parse Heroku application/logplex documents
@@ -84,6 +84,6 @@
   main-is: Spec.hs
   build-depends:  base >= 4.8 && <4.9,
                   logplex-parse -any,
-                  hspec >= 1.8 && <1.9,
+                  hspec >= 2.2 && <2.3,
                   time >= 1.5 && <1.6
   default-language: Haskell2010
diff --git a/src/Text/Syslog/Parser.hs b/src/Text/Syslog/Parser.hs
--- a/src/Text/Syslog/Parser.hs
+++ b/src/Text/Syslog/Parser.hs
@@ -52,7 +52,9 @@
              (space >> appName) <*>
              (space >> procid) <*>
              (space >> msgid) <*>
-             (space >> structuredData) <*>
+             -- this doesn't strictly conform to the RFC5424 BNF, but Heroku generates syslog
+             -- messages that omit the nilvalue in place of structured data
+            (fromMaybe [] <$> optionMaybe (try (space >> structuredData))) <*>
              optionMaybe (space >> message) <*
              eof
 
