diff --git a/samples/web-components-events/README.md b/samples/web-components-events/README.md
new file mode 100644
index 00000000..c7d8b898
--- /dev/null
+++ b/samples/web-components-events/README.md
@@ -0,0 +1,41 @@
+# Google Maps JavaScript Sample
+
+## web-components-events
+
+This sample demonstrates map events using the Maps JavaScript API web components.
+
+## Setup
+
+### Before starting run:
+
+`npm i`
+
+### Run an example on a local web server
+
+`cd samples/web-components-events`
+`npm start`
+
+### Build an individual example
+
+`cd samples/web-components-events`
+`npm run build`
+
+From 'samples':
+
+`npm run build --workspace=web-components-events/`
+
+### Build all of the examples.
+
+From 'samples':
+
+`npm run build-all`
+
+### Run lint to check for problems
+
+`cd samples/web-components-events`
+`npx eslint index.ts`
+
+## Feedback
+
+For feedback related to this sample, please open a new issue on
+[GitHub](https://github.com/googlemaps-samples/js-api-samples/issues).
diff --git a/samples/web-components-events/index.html b/samples/web-components-events/index.html
new file mode 100644
index 00000000..f6f8b939
--- /dev/null
+++ b/samples/web-components-events/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+ Add a Map Web Component with Events
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/web-components-events/index.ts b/samples/web-components-events/index.ts
new file mode 100644
index 00000000..c7c820af
--- /dev/null
+++ b/samples/web-components-events/index.ts
@@ -0,0 +1,35 @@
+/**
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+// [START maps_web_components_events]
+// This example adds a map using web components.
+async function initMap(): Promise {
+ await google.maps.importLibrary("maps");
+ await google.maps.importLibrary("marker");
+
+ console.log('Maps JavaScript API loaded.');
+
+ const advancedMarkers = document.querySelectorAll("#marker-click-event-example gmp-advanced-marker");
+
+ for (const markerElement of advancedMarkers) {
+ const advancedMarker = markerElement as google.maps.marker.AdvancedMarkerElement;
+
+ customElements.whenDefined(advancedMarker.localName).then(async () => {
+ advancedMarker.addEventListener('gmp-click', () => {
+ const infoWindow = new google.maps.InfoWindow({
+ content: advancedMarker.title,
+ });
+
+ infoWindow.open({
+ anchor: advancedMarker,
+ });
+ });
+ });
+ }
+}
+
+initMap();
+// [END maps_web_components_events]
diff --git a/samples/web-components-events/package.json b/samples/web-components-events/package.json
new file mode 100644
index 00000000..91e619b9
--- /dev/null
+++ b/samples/web-components-events/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "@js-api-samples/web-components-events",
+ "version": "1.0.0",
+ "scripts": {
+ "build": "tsc && bash ../jsfiddle.sh web-components-events && bash ../app.sh web-components-events && bash ../docs.sh web-components-events && npm run build:vite --workspace=. && bash ../dist.sh web-components-events",
+ "test": "tsc && npm run build:vite --workspace=.",
+ "start": "tsc && vite build --base './' && vite",
+ "build:vite": "vite build --base './'",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+
+ }
+}
diff --git a/samples/web-components-events/style.css b/samples/web-components-events/style.css
new file mode 100644
index 00000000..a2eaae43
--- /dev/null
+++ b/samples/web-components-events/style.css
@@ -0,0 +1,18 @@
+/**
+ * @license
+ * Copyright 2026 Google LLC. All Rights Reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+/* [START maps_web_components_events] */
+
+/*
+ * Optional: Makes the sample page fill the window.
+ */
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+
+/* [END maps_web_components_events] */
\ No newline at end of file
diff --git a/samples/web-components-events/tsconfig.json b/samples/web-components-events/tsconfig.json
new file mode 100644
index 00000000..5ba470c0
--- /dev/null
+++ b/samples/web-components-events/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "rootDir": "."
+ },
+ "include": [
+ "./*.ts",
+ ]
+}