diff --git a/.changeset/eleven-kids-battle.md b/.changeset/eleven-kids-battle.md
new file mode 100644
index 000000000..1b69ac0b9
--- /dev/null
+++ b/.changeset/eleven-kids-battle.md
@@ -0,0 +1,5 @@
+---
+"@osdk/tool.release": patch
+---
+
+Throws error when trying to generate PR with package versions that are already published to NPM
diff --git a/packages/tool.release/src/publishPackages.ts b/packages/tool.release/src/publishPackages.ts
index c08dbfcda..1166c2b18 100644
--- a/packages/tool.release/src/publishPackages.ts
+++ b/packages/tool.release/src/publishPackages.ts
@@ -113,7 +113,7 @@ async function publishSinglePackage(
   };
 }
 
-async function packageVersionsOrEmptySet(name: string) {
+export async function packageVersionsOrEmptySet(name: string) {
   try {
     return await packageVersionsOrThrow(name);
   } catch (e) {
diff --git a/packages/tool.release/src/runVersion.ts b/packages/tool.release/src/runVersion.ts
index c22e3b298..0253922f5 100644
--- a/packages/tool.release/src/runVersion.ts
+++ b/packages/tool.release/src/runVersion.ts
@@ -66,6 +66,7 @@ import { createOrUpdatePr } from "./createOrUpdatePr.js";
 import { FailedWithUserMessage } from "./FailedWithUserMessage.js";
 import * as gitUtils from "./gitUtils.js";
 import { mutateReleasePlan } from "./mutateReleasePlan.js";
+import { packageVersionsOrEmptySet } from "./publishPackages.js";
 import { getChangedPackages } from "./util/getChangedPackages.js";
 import { getVersionPrBody } from "./util/getVersionPrBody.js";
 import { getVersionsByDirectory } from "./util/getVersionsByDirectory.js";
@@ -167,6 +168,15 @@ export async function runVersion({
 
   mutateReleasePlan(releasePlan, isMainBranch ? "main" : "patch");
 
+  for (const release of releasePlan.releases) {
+    const versions = await packageVersionsOrEmptySet(release.name);
+    if (versions.has(release.newVersion)) {
+      throw new FailedWithUserMessage(
+        `The version ${release.newVersion} of ${release.name} is already published on npm`,
+      );
+    }
+  }
+
   const touchedFiles = await applyReleasePlan(
     releasePlan,
     packages,