diff --git a/gddo-server/main.go b/gddo-server/main.go
index bffef36..f8f7b4b 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -1029,10 +1029,28 @@
 	teeproxyHost           = "teeproxy-dot-go-discovery.appspot.com"
 )
 
+type responseWriter struct {
+	http.ResponseWriter
+	status int
+}
+
+func (rw *responseWriter) WriteHeader(code int) {
+	rw.status = code
+	rw.ResponseWriter.WriteHeader(code)
+}
+
+func translateStatus(code int) int {
+	if code == 0 {
+		return http.StatusOK
+	}
+	return code
+}
+
 func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	start := time.Now()
 	s.logRequestStart(r)
-	s.root.ServeHTTP(w, r)
+	w2 := &responseWriter{ResponseWriter: w}
+	s.root.ServeHTTP(w2, r)
 	latency := time.Since(start)
 	s.logRequestEnd(r, latency)
 	if f, ok := w.(http.Flusher); ok {
@@ -1042,13 +1060,13 @@
 	if strings.HasPrefix(r.URL.Path, "/_ah/") {
 		return
 	}
-	if err := makePkgGoDevRequest(r, latency, s.isRobot(r)); err != nil {
+	if err := makePkgGoDevRequest(r, latency, s.isRobot(r), translateStatus(w2.status)); err != nil {
 		log.Printf("makePkgGoDevRequest(%q, %d) error: %v", r.URL, latency, err)
 	}
 }
 
-func makePkgGoDevRequest(r *http.Request, latency time.Duration, isRobot bool) error {
-	event := newGDDOEvent(r, latency, isRobot)
+func makePkgGoDevRequest(r *http.Request, latency time.Duration, isRobot bool, status int) error {
+	event := newGDDOEvent(r, latency, isRobot, status)
 	b, err := json.Marshal(event)
 	if err != nil {
 		return fmt.Errorf("json.Marshal(%v): %v", event, err)
@@ -1065,6 +1083,7 @@
 type gddoEvent struct {
 	Host        string
 	Path        string
+	Status      int
 	URL         string
 	Header      http.Header
 	Latency     time.Duration
@@ -1072,7 +1091,7 @@
 	UsePkgGoDev bool
 }
 
-func newGDDOEvent(r *http.Request, latency time.Duration, isRobot bool) *gddoEvent {
+func newGDDOEvent(r *http.Request, latency time.Duration, isRobot bool, status int) *gddoEvent {
 	targetURL := url.URL{
 		Scheme:   "https",
 		Host:     r.URL.Host,
@@ -1085,6 +1104,7 @@
 	return &gddoEvent{
 		Host:        targetURL.Host,
 		Path:        r.URL.Path,
+		Status:      status,
 		URL:         targetURL.String(),
 		Header:      r.Header,
 		Latency:     latency,
diff --git a/gddo-server/main_test.go b/gddo-server/main_test.go
index 14ee05e..9267349 100644
--- a/gddo-server/main_test.go
+++ b/gddo-server/main_test.go
@@ -308,7 +308,8 @@
 				r.AddCookie(test.cookie)
 				want.Header.Add("Cookie", test.cookie.String())
 			}
-			got := newGDDOEvent(r, want.Latency, want.IsRobot)
+			got := newGDDOEvent(r, want.Latency, want.IsRobot, http.StatusOK)
+			want.Status = http.StatusOK
 			if diff := cmp.Diff(want, got); diff != "" {
 				t.Fatalf("mismatch (-want +got):\n%s", diff)
 			}
@@ -444,7 +445,8 @@
 			if err != nil {
 				t.Fatal("invalid NewRequest arguments; " + err.Error())
 			}
-			got := newGDDOEvent(req, want.Latency, want.IsRobot)
+			got := newGDDOEvent(req, want.Latency, want.IsRobot, http.StatusOK)
+			want.Status = http.StatusOK
 			if diff := cmp.Diff(want, got); diff != "" {
 				t.Fatalf("mismatch (-want +got):\n%s", diff)
 			}
