diff --git a/CHANGELOG.md b/CHANGELOG.md
index c774f3da7b..07b3ec102d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@
 - Use thread context classloader when available ([#4320](https://github.com/getsentry/sentry-java/pull/4320))
   - This ensures correct resource loading in environments like Spring Boot where the thread context classloader is used for resource loading.
 
+### Internal
+
+- Read build tool info from `sentry-debug-meta.properties` and attach it to events ([#4314](https://github.com/getsentry/sentry-java/pull/4314))
+
 ## 8.7.0
 
 ### Features
diff --git a/sentry/api/sentry.api b/sentry/api/sentry.api
index 067fa327ed..717ab9b129 100644
--- a/sentry/api/sentry.api
+++ b/sentry/api/sentry.api
@@ -6364,7 +6364,10 @@ public abstract interface class io/sentry/util/CollectionUtils$Predicate {
 public final class io/sentry/util/DebugMetaPropertiesApplier {
 	public static field DEBUG_META_PROPERTIES_FILENAME Ljava/lang/String;
 	public fun <init> ()V
+	public static fun apply (Lio/sentry/SentryOptions;Ljava/util/List;)V
 	public static fun applyToOptions (Lio/sentry/SentryOptions;Ljava/util/List;)V
+	public static fun getBuildTool (Ljava/util/Properties;)Ljava/lang/String;
+	public static fun getBuildToolVersion (Ljava/util/Properties;)Ljava/lang/String;
 	public static fun getProguardUuid (Ljava/util/Properties;)Ljava/lang/String;
 }
 
diff --git a/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java b/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java
index 8627845967..236e962682 100644
--- a/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java
+++ b/sentry/src/main/java/io/sentry/util/DebugMetaPropertiesApplier.java
@@ -1,5 +1,6 @@
 package io.sentry.util;
 
+import io.sentry.SentryIntegrationPackageStorage;
 import io.sentry.SentryLevel;
 import io.sentry.SentryOptions;
 import java.util.List;
@@ -11,6 +12,14 @@ public final class DebugMetaPropertiesApplier {
 
   public static @NotNull String DEBUG_META_PROPERTIES_FILENAME = "sentry-debug-meta.properties";
 
+  public static void apply(
+      final @NotNull SentryOptions options, final @Nullable List<Properties> debugMetaProperties) {
+    if (debugMetaProperties != null) {
+      applyToOptions(options, debugMetaProperties);
+      applyBuildTool(options, debugMetaProperties);
+    }
+  }
+
   public static void applyToOptions(
       final @NotNull SentryOptions options, final @Nullable List<Properties> debugMetaProperties) {
     if (debugMetaProperties != null) {
@@ -49,7 +58,35 @@ private static void applyProguardUuid(
     }
   }
 
+  private static void applyBuildTool(
+      final @NotNull SentryOptions options, @NotNull List<Properties> debugMetaProperties) {
+    for (Properties properties : debugMetaProperties) {
+      final @Nullable String buildTool = getBuildTool(properties);
+      if (buildTool != null) {
+        @Nullable String buildToolVersion = getBuildToolVersion(properties);
+        if (buildToolVersion == null) {
+          buildToolVersion = "unknown";
+        }
+        options
+            .getLogger()
+            .log(
+                SentryLevel.DEBUG, "Build tool found: %s, version %s", buildTool, buildToolVersion);
+        SentryIntegrationPackageStorage.getInstance().addPackage(buildTool, buildToolVersion);
+        break;
+      }
+    }
+  }
+
   public static @Nullable String getProguardUuid(final @NotNull Properties debugMetaProperties) {
     return debugMetaProperties.getProperty("io.sentry.ProguardUuids");
   }
+
+  public static @Nullable String getBuildTool(final @NotNull Properties debugMetaProperties) {
+    return debugMetaProperties.getProperty("io.sentry.build-tool");
+  }
+
+  public static @Nullable String getBuildToolVersion(
+      final @NotNull Properties debugMetaProperties) {
+    return debugMetaProperties.getProperty("io.sentry.build-tool-version");
+  }
 }
diff --git a/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt b/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt
index d9a22224b5..970e9bb214 100644
--- a/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt
+++ b/sentry/src/test/java/io/sentry/internal/debugmeta/ResourcesDebugMetaLoaderTest.kt
@@ -1,7 +1,9 @@
 package io.sentry.internal.debugmeta
 
 import io.sentry.ILogger
+import io.sentry.SentryIntegrationPackageStorage
 import io.sentry.SentryOptions
+import io.sentry.protocol.SentryPackage
 import io.sentry.util.DebugMetaPropertiesApplier
 import org.mockito.kotlin.mock
 import org.mockito.kotlin.whenever
@@ -9,7 +11,9 @@ import java.net.URL
 import java.nio.charset.Charset
 import java.util.Collections
 import kotlin.test.Test
+import kotlin.test.assertContains
 import kotlin.test.assertEquals
+import kotlin.test.assertFalse
 import kotlin.test.assertNotNull
 import kotlin.test.assertNull
 
@@ -132,4 +136,72 @@ class ResourcesDebugMetaLoaderTest {
 
         assertNull(sut.loadDebugMeta())
     }
+
+    @Test
+    fun `reads build-tool and build-version and adds them to packages`() {
+        val sut = fixture.getSut(
+            content = listOf(
+                """
+                #Generated by sentry-maven-plugin
+                #Wed May 17 15:33:34 CEST 2023
+                io.sentry.ProguardUuids=34077988-a0e5-4839-9618-7400e1616d1b
+                io.sentry.bundle-ids=88ba82db-cd26-4c09-8b31-21461d286b68
+                io.sentry.build-tool=maven
+                io.sentry.build-tool-version=1.0
+                """.trimIndent()
+            )
+        )
+
+        val options = SentryOptions()
+        assertNotNull(sut.loadDebugMeta()) {
+            DebugMetaPropertiesApplier.apply(options, it)
+        }
+
+        val expected = SentryPackage("maven", "1.0")
+        assertContains(SentryIntegrationPackageStorage.getInstance().packages, expected)
+    }
+
+    @Test
+    fun `reads build-tool and adds it to packages with unknown version if build-tool-version is absent`() {
+        val sut = fixture.getSut(
+            content = listOf(
+                """
+                #Generated by sentry-maven-plugin
+                #Wed May 17 15:33:34 CEST 2023
+                io.sentry.ProguardUuids=34077988-a0e5-4839-9618-7400e1616d1b
+                io.sentry.bundle-ids=88ba82db-cd26-4c09-8b31-21461d286b68
+                io.sentry.build-tool=maven
+                """.trimIndent()
+            )
+        )
+
+        val options = SentryOptions()
+        assertNotNull(sut.loadDebugMeta()) {
+            DebugMetaPropertiesApplier.apply(options, it)
+        }
+
+        val expected = SentryPackage("maven", "unknown")
+        assertContains(SentryIntegrationPackageStorage.getInstance().packages, expected)
+    }
+
+    @Test
+    fun `does not add build-tool to packages if absent`() {
+        val sut = fixture.getSut(
+            content = listOf(
+                """
+                #Generated manually
+                #Wed May 17 15:33:34 CEST 2023
+                io.sentry.ProguardUuids=34077988-a0e5-4839-9618-7400e1616d1b
+                io.sentry.bundle-ids=88ba82db-cd26-4c09-8b31-21461d286b68
+                """.trimIndent()
+            )
+        )
+
+        val options = SentryOptions()
+        assertNotNull(sut.loadDebugMeta()) {
+            DebugMetaPropertiesApplier.apply(options, it)
+        }
+
+        assertFalse { SentryIntegrationPackageStorage.getInstance().packages.any { it.name.equals("io.sentry.build-tool") } }
+    }
 }