diff --git a/clay.h b/clay.h
index 437f433..66f10b7 100644
--- a/clay.h
+++ b/clay.h
@@ -393,6 +393,14 @@ typedef struct
     bool found;
 } Clay_ScrollContainerData;
 
+typedef struct
+{
+    Clay_BoundingBox elementLocation;
+
+    // Indicates whether an actual Element matched the provided ID or if the default struct was returned.
+    bool found;
+} Clay_ElementLocationData;
+
 typedef enum {
     CLAY_RENDER_COMMAND_TYPE_NONE,
     CLAY_RENDER_COMMAND_TYPE_RECTANGLE,
@@ -481,6 +489,7 @@ bool Clay_IsDebugModeEnabled(void);
 void Clay_SetCullingEnabled(bool enabled);
 void Clay_SetMaxElementCount(uint32_t maxElementCount);
 void Clay_SetMaxMeasureTextCacheWordCount(uint32_t maxMeasureTextCacheWordCount);
+Clay_ElementLocationData Clay_GetElementLocationData (Clay_ElementId id); 
 
 // Internal API functions required by macros
 void Clay__OpenElement(void);
@@ -3848,6 +3857,22 @@ Clay_ScrollContainerData Clay_GetScrollContainerData(Clay_ElementId id) {
     return CLAY__INIT(Clay_ScrollContainerData) {};
 }
 
+CLAY_WASM_EXPORT("Clay_GetElementLocationData")
+Clay_ElementLocationData Clay_GetElementLocationData(Clay_ElementId id){
+    Clay_LayoutElementHashMapItem * item =Clay__GetHashMapItem(id.id);
+    if(item == &CLAY__LAYOUT_ELEMENT_HASH_MAP_ITEM_DEFAULT) {
+        return CLAY__INIT(Clay_ElementLocationData){
+            .found=false,
+            .elementLocation=CLAY__INIT(Clay_BoundingBox){}
+        };
+    }
+
+    return CLAY__INIT(Clay_ElementLocationData){
+        .elementLocation=item->boundingBox,
+        .found = true
+    };
+}
+
 CLAY_WASM_EXPORT("Clay_SetDebugModeEnabled")
 void Clay_SetDebugModeEnabled(bool enabled) {
     Clay__debugModeEnabled = enabled;