diff --git a/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java b/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java
index 8900a7a..27a205f 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java
@@ -111,6 +111,15 @@
     return 0;
   }
 
+  /**
+   * Remote action source identifier for the file.
+   *
+   * <p>"" indicates that a remote action output was not the source of this artifact.
+   */
+  public String getActionId() {
+    return "";
+  }
+
   /** Returns {@code true} if this is a special marker as opposed to a representing a real file. */
   public boolean isMarkerValue() {
     return this instanceof Singleton;
@@ -544,11 +553,17 @@
     private final byte[] digest;
     private final long size;
     private final int locationIndex;
+    private final String actionId;
 
-    public RemoteFileArtifactValue(byte[] digest, long size, int locationIndex) {
+    public RemoteFileArtifactValue(byte[] digest, long size, int locationIndex, String actionId) {
       this.digest = digest;
       this.size = size;
       this.locationIndex = locationIndex;
+      this.actionId = actionId;
+    }
+
+    public RemoteFileArtifactValue(byte[] digest, long size, int locationIndex) {
+      this(digest, size, locationIndex, /* actionId= */ "");
     }
 
     @Override
@@ -589,6 +604,11 @@
     }
 
     @Override
+    public String getActionId() {
+      return actionId;
+    }
+
+    @Override
     public long getModifiedTime() {
       throw new UnsupportedOperationException(
           "RemoteFileArifactValue doesn't support getModifiedTime");
diff --git a/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java b/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java
index 78ed389..ee95136 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/cache/MetadataInjector.java
@@ -31,8 +31,10 @@
    * @param digest the digest of the file.
    * @param size the size of the file in bytes.
    * @param locationIndex is only used in Blaze.
+   * @param actionId the id of the action that produced this file.
    */
-  void injectRemoteFile(Artifact output, byte[] digest, long size, int locationIndex);
+  void injectRemoteFile(
+      Artifact output, byte[] digest, long size, int locationIndex, String actionId);
 
   /**
    * Inject the metadata of a tree artifact whose contents are stored remotely.
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcher.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcher.java
index 519b7f4..4352d26 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcher.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteActionInputFetcher.java
@@ -14,6 +14,7 @@
 package com.google.devtools.build.lib.remote;
 
 import build.bazel.remote.execution.v2.Digest;
+import build.bazel.remote.execution.v2.RequestMetadata;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
@@ -32,6 +33,7 @@
 import com.google.devtools.build.lib.profiler.SilentCloseable;
 import com.google.devtools.build.lib.remote.common.CacheNotFoundException;
 import com.google.devtools.build.lib.remote.util.DigestUtil;
+import com.google.devtools.build.lib.remote.util.TracingMetadataUtils;
 import com.google.devtools.build.lib.vfs.Path;
 import io.grpc.Context;
 import java.io.IOException;
@@ -65,12 +67,13 @@
 
   private final RemoteCache remoteCache;
   private final Path execRoot;
-  private final Context ctx;
+  private final RequestMetadata requestMetadata;
 
-  RemoteActionInputFetcher(RemoteCache remoteCache, Path execRoot, Context ctx) {
+  RemoteActionInputFetcher(
+      RemoteCache remoteCache, Path execRoot, RequestMetadata requestMetadata) {
     this.remoteCache = Preconditions.checkNotNull(remoteCache);
     this.execRoot = Preconditions.checkNotNull(execRoot);
-    this.ctx = Preconditions.checkNotNull(ctx);
+    this.requestMetadata = Preconditions.checkNotNull(requestMetadata);
   }
 
   /**
@@ -164,6 +167,9 @@
 
       ListenableFuture<Void> download = downloadsInProgress.get(path);
       if (download == null) {
+        Context ctx =
+            TracingMetadataUtils.contextWithMetadata(
+                requestMetadata.toBuilder().setActionId(metadata.getActionId()).build());
         Context prevCtx = ctx.attach();
         try {
           Digest digest = DigestUtil.buildDigest(metadata.getDigest(), metadata.getSize());
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
index 95df362..157d5d4 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
@@ -528,6 +528,7 @@
    */
   @Nullable
   public InMemoryOutput downloadMinimal(
+      String actionId,
       ActionResult result,
       Collection<? extends ActionInput> outputs,
       @Nullable PathFragment inMemoryOutputPath,
@@ -570,7 +571,7 @@
         inMemoryOutput = output;
       }
       if (output instanceof Artifact) {
-        injectRemoteArtifact((Artifact) output, metadata, execRoot, metadataInjector);
+        injectRemoteArtifact((Artifact) output, metadata, execRoot, metadataInjector, actionId);
       }
     }
 
@@ -594,7 +595,8 @@
       Artifact output,
       ActionResultMetadata metadata,
       Path execRoot,
-      MetadataInjector metadataInjector)
+      MetadataInjector metadataInjector,
+      String actionId)
       throws IOException {
     if (output.isTreeArtifact()) {
       DirectoryMetadata directory =
@@ -617,7 +619,8 @@
             new RemoteFileArtifactValue(
                 DigestUtil.toBinaryDigest(file.digest()),
                 file.digest().getSizeBytes(),
-                /* locationIndex= */ 1);
+                /* locationIndex= */ 1,
+                actionId);
         childMetadata.put(p, r);
       }
       metadataInjector.injectRemoteDirectory(
@@ -633,7 +636,8 @@
           output,
           DigestUtil.toBinaryDigest(outputMetadata.digest()),
           outputMetadata.digest().getSizeBytes(),
-          /* locationIndex= */ 1);
+          /* locationIndex= */ 1,
+          actionId);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
index 62e519d..1d480a8 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -15,6 +15,7 @@
 package com.google.devtools.build.lib.remote;
 
 import build.bazel.remote.execution.v2.DigestFunction;
+import build.bazel.remote.execution.v2.RequestMetadata;
 import build.bazel.remote.execution.v2.ServerCapabilities;
 import com.google.auth.Credentials;
 import com.google.common.base.Preconditions;
@@ -662,12 +663,14 @@
             env.getOptions().getOptions(RemoteOptions.class), "RemoteOptions");
     RemoteOutputsMode remoteOutputsMode = remoteOptions.remoteOutputsMode;
     if (!remoteOutputsMode.downloadAllOutputs()) {
-      Context ctx =
-          TracingMetadataUtils.contextWithMetadata(
-              env.getBuildRequestId(), env.getCommandId().toString(), "fetch-remote-inputs");
+      RequestMetadata requestMetadata =
+          RequestMetadata.newBuilder()
+              .setCorrelatedInvocationsId(env.getBuildRequestId())
+              .setToolInvocationId(env.getCommandId().toString())
+              .build();
       actionInputFetcher =
           new RemoteActionInputFetcher(
-              actionContextProvider.getRemoteCache(), env.getExecRoot(), ctx);
+              actionContextProvider.getRemoteCache(), env.getExecRoot(), requestMetadata);
       builder.setActionInputPrefetcher(actionInputFetcher);
       remoteOutputService.setActionInputFetcher(actionInputFetcher);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java
index 4c3a617..b33338a 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnCache.java
@@ -186,6 +186,7 @@
                 prof.profile(ProfilerTask.REMOTE_DOWNLOAD, "download outputs minimal")) {
               inMemoryOutput =
                   remoteCache.downloadMinimal(
+                      actionKey.getDigest().getHash(),
                       result,
                       spawn.getOutputFiles(),
                       inMemoryOutputPath,
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
index 2b5a893..bd0e378 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
@@ -262,6 +262,7 @@
           } else {
             try {
               return downloadAndFinalizeSpawnResult(
+                  actionKey.getDigest().getHash(),
                   cachedResult,
                   /* cacheHit= */ true,
                   spawn,
@@ -341,6 +342,7 @@
 
               try {
                 return downloadAndFinalizeSpawnResult(
+                    actionKey.getDigest().getHash(),
                     actionResult,
                     reply.getCachedResult(),
                     spawn,
@@ -413,6 +415,7 @@
   }
 
   private SpawnResult downloadAndFinalizeSpawnResult(
+      String actionId,
       ActionResult actionResult,
       boolean cacheHit,
       Spawn spawn,
@@ -441,6 +444,7 @@
           Profiler.instance().profile(REMOTE_DOWNLOAD, "download outputs minimal")) {
         inMemoryOutput =
             remoteCache.downloadMinimal(
+                actionId,
                 actionResult,
                 spawn.getOutputFiles(),
                 inMemoryOutputPath,
diff --git a/src/main/java/com/google/devtools/build/lib/remote/util/TracingMetadataUtils.java b/src/main/java/com/google/devtools/build/lib/remote/util/TracingMetadataUtils.java
index a4b5511..79a0cbb 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/util/TracingMetadataUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/util/TracingMetadataUtils.java
@@ -70,18 +70,21 @@
     Preconditions.checkNotNull(buildRequestId);
     Preconditions.checkNotNull(commandId);
     Preconditions.checkNotNull(actionId);
-    RequestMetadata.Builder metadata =
+    RequestMetadata metadata =
         RequestMetadata.newBuilder()
             .setCorrelatedInvocationsId(buildRequestId)
-            .setToolInvocationId(commandId);
-    metadata.setActionId(actionId);
-    metadata
-        .setToolDetails(
-            ToolDetails.newBuilder()
-                .setToolName("bazel")
-                .setToolVersion(BlazeVersionInfo.instance().getVersion()))
-        .build();
-    return Context.current().withValue(CONTEXT_KEY, metadata.build());
+            .setToolInvocationId(commandId)
+            .setActionId(actionId)
+            .setToolDetails(
+                ToolDetails.newBuilder()
+                    .setToolName("bazel")
+                    .setToolVersion(BlazeVersionInfo.instance().getVersion()))
+            .build();
+    return contextWithMetadata(metadata);
+  }
+
+  public static Context contextWithMetadata(RequestMetadata metadata) {
+    return Context.current().withValue(CONTEXT_KEY, metadata);
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
index 347c5f5..568650f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionMetadataHandler.java
@@ -542,7 +542,8 @@
   }
 
   @Override
-  public void injectRemoteFile(Artifact output, byte[] digest, long size, int locationIndex) {
+  public void injectRemoteFile(
+      Artifact output, byte[] digest, long size, int locationIndex, String actionId) {
     Preconditions.checkArgument(
         isKnownOutput(output), output + " is not a declared output of this action");
     Preconditions.checkArgument(
@@ -551,7 +552,7 @@
         output);
     Preconditions.checkState(
         executionMode.get(), "Tried to inject %s outside of execution", output);
-    store.injectRemoteFile(output, digest, size, locationIndex);
+    store.injectRemoteFile(output, digest, size, locationIndex, actionId);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/OutputStore.java b/src/main/java/com/google/devtools/build/lib/skyframe/OutputStore.java
index bc75258..914b8b5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/OutputStore.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/OutputStore.java
@@ -95,9 +95,11 @@
     treeArtifactContents.computeIfAbsent(artifact, a -> Sets.newConcurrentHashSet()).add(contents);
   }
 
-  void injectRemoteFile(Artifact output, byte[] digest, long size, int locationIndex) {
+  void injectRemoteFile(
+      Artifact output, byte[] digest, long size, int locationIndex, String actionId) {
     injectOutputData(
-        output, new FileArtifactValue.RemoteFileArtifactValue(digest, size, locationIndex));
+        output,
+        new FileArtifactValue.RemoteFileArtifactValue(digest, size, locationIndex, actionId));
   }
 
   final void injectOutputData(Artifact output, FileArtifactValue artifactValue) {
