diff --git a/lib/instrumentation/trace.js b/lib/instrumentation/trace.js
index <HASH>..<HASH> 100644
--- a/lib/instrumentation/trace.js
+++ b/lib/instrumentation/trace.js
@@ -22,12 +22,23 @@ Trace.prototype.end = function () {
 }
 
 Trace.prototype.duration = function () {
-  if (!this.ended) throw new Error('Trace is not ended')
+  if (!this.ended) {
+    // TODO: Use the opbeat logger
+    console.error('Trying to call trace.duration() on un-ended Trace!')
+    return null
+  }
+
   var ns = this._diff[0] * 1e9 + this._diff[1]
   return ns / 1e6
 }
 
 Trace.prototype.startTime = function () {
+  if (!this.ended || !this.transaction.ended) {
+    // TODO: Use the opbeat logger
+    console.error('Trying to call trace.startTime() for un-ended Trace/Transaction!')
+    return null
+  }
+
   var parent = this._parent()
   if (!parent) return 0
   var start = parent._hrtime
@@ -36,6 +47,12 @@ Trace.prototype.startTime = function () {
 }
 
 Trace.prototype.ancestors = function () {
+  if (!this.ended || !this.transaction.ended) {
+    // TODO: Use the opbeat logger
+    console.error('Trying to call trace.ancestors() for un-ended Trace/Transaction!')
+    return null
+  }
+
   var parent = this._parent()
   if (!parent) return []
   return [parent.signature].concat(parent.ancestors())
Add guards if trying to get data from non-ended traces