diff --git a/changes/50683-policy-automations-table-multi-host-rows.md b/changes/50683-policy-automations-table-multi-host-rows.md
new file mode 100644
index 0000000000..dfa2b52ce5
--- /dev/null
+++ b/changes/50683-policy-automations-table-multi-host-rows.md
@@ -0,0 +1 @@
+- Fixed the policy automations table showing only one host for automation runs that cover multiple hosts.
diff --git a/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tests.tsx b/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tests.tsx
index 847819adbe..a2ffbd1c89 100644
--- a/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tests.tsx
+++ b/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tests.tsx
@@ -155,6 +155,40 @@ describe("PolicyAutomationsActivitiesTable", () => {
expect(screen.getByPlaceholderText("Search hosts")).toBeInTheDocument();
});
+ it("renders one row per host for a batch activity sharing an activity id", async () => {
+ (policiesAPI.getAutomationActivities as jest.Mock).mockResolvedValue(
+ mockResponse([
+ mockActivity({
+ id: 41,
+ type: ActivityType.RanAutomationWebhook,
+ details: { policy_id: 123 },
+ host_id: 1,
+ host_display_name: "batch-host-a",
+ }),
+ mockActivity({
+ id: 41,
+ type: ActivityType.RanAutomationWebhook,
+ details: { policy_id: 123 },
+ host_id: 2,
+ host_display_name: "batch-host-b",
+ }),
+ ])
+ );
+
+ render(
+
+ );
+
+ // Both (activity, host) rows must render even though they share id 41.
+ expect(await screen.findByText("batch-host-a")).toBeInTheDocument();
+ expect(screen.getByText("batch-host-b")).toBeInTheDocument();
+ expect(screen.getByText("2 runs")).toBeInTheDocument();
+ });
+
it("shows the Reset policy button only when allowed", async () => {
(policiesAPI.getAutomationActivities as jest.Mock).mockResolvedValue(
mockResponse([mockActivity()], 1)
diff --git a/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tsx b/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tsx
index f25b378a12..f99faa956e 100644
--- a/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tsx
+++ b/frontend/pages/policies/details/components/PolicyAutomationsActivitiesTable/PolicyAutomationsActivitiesTable.tsx
@@ -259,6 +259,13 @@ const PolicyAutomationsActivitiesTable = ({
+ `${row.id}-${row.host_id}`
+ }
isLoading={isLoading}
manualSortBy
pageIndex={page}