diff --git a/scouting/www/entry/entry.component.ts b/scouting/www/entry/entry.component.ts
index 230bfec..1a757a0 100644
--- a/scouting/www/entry/entry.component.ts
+++ b/scouting/www/entry/entry.component.ts
@@ -39,6 +39,8 @@
   MatchListRequestor,
   ActionsSubmitter,
 } from '@org_frc971/scouting/www/rpc';
+import {RequestCurrentScouting} from '@org_frc971/scouting/webserver/requests/messages/request_current_scouting_generated';
+import {RequestCurrentScoutingResponse} from '@org_frc971/scouting/webserver/requests/messages/request_current_scouting_response_generated';
 import {ActionHelper, ConcreteAction} from './action_helper';
 import * as pako from 'pako';
 
@@ -136,6 +138,8 @@
   penalties: number = 0;
 
   teamSelectionIsValid = false;
+  searchForDuplicateScouting: boolean = false;
+  duplicateSearchTimer: ReturnType<typeof setTimeout> | null = null;
 
   // When the user chooses to generate QR codes, we convert the flatbuffer into
   // a long string. Since we frequently have more data than we can display in a
@@ -165,8 +169,13 @@
     this.fetchMatchList();
   }
 
+  ngOnDestroy() {
+    clearInterval(this.duplicateSearchTimer);
+  }
+
   goToNextTeam() {
     this.ngOnInit();
+    this.ngOnDestroy();
     this.teamNumber = this.nextTeamNumber;
     this.nextTeamNumber = '';
   }
@@ -184,6 +193,53 @@
     }
   }
 
+  async findOthersScoutingThisRobot() {
+    const builder = new Builder();
+    const teamNumber = builder.createString(this.teamNumber);
+
+    builder.finish(
+      RequestCurrentScouting.createRequestCurrentScouting(builder, teamNumber)
+    );
+
+    const buffer = builder.asUint8Array();
+    const res = await fetch('/requests/request/current_scouting', {
+      method: 'POST',
+      body: buffer,
+    });
+
+    if (!res.ok) {
+      const resBuffer = await res.arrayBuffer();
+      const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
+      const parsedResponse = ErrorResponse.getRootAsErrorResponse(fbBuffer);
+      const errorMessage = parsedResponse.errorMessage();
+      this.errorMessage = `Received ${res.status} ${res.statusText}: "${errorMessage}"`;
+    } else {
+      const resBuffer = await res.arrayBuffer();
+      const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
+      const parsedResponse =
+        RequestCurrentScoutingResponse.getRootAsRequestCurrentScoutingResponse(
+          fbBuffer
+        );
+      const collectedBy = [];
+      for (let i = 0; i < parsedResponse.collectedByLength(); i++) {
+        collectedBy.push(parsedResponse.collectedBy(i).name());
+      }
+      this.duplicateSearchTimer = setInterval(() => {
+        if (this.searchForDuplicateScouting && collectedBy.length != 0) {
+          if (
+            confirm(
+              'This team is currently being scouted by ' +
+                collectedBy +
+                '. Would you like to receive more alerts?'
+            ) != true
+          ) {
+            this.searchForDuplicateScouting = false;
+          }
+        }
+      }, 10000);
+    }
+  }
+
   // This gets called when the user changes something on the Init screen.
   // It makes sure that the user can't click "Next" until the information is
   // valid, or this is for pre-scouting or practice matches.
@@ -314,6 +370,11 @@
       this.updateQrCodeValuePieceSize();
     }
 
+    if (target == 'Init') {
+      this.searchForDuplicateScouting = true;
+      this.findOthersScoutingThisRobot();
+    }
+
     this.section = target;
   }
 
@@ -457,6 +518,7 @@
       this.compType = 'Regular';
       this.matchStartTimestamp = 0;
       this.selectedValue = 0;
+      this.searchForDuplicateScouting = false;
     } else {
       const resBuffer = await res.arrayBuffer();
       const fbBuffer = new ByteBuffer(new Uint8Array(resBuffer));
