# Tag browse function using UDT child tag

**URL:** <https://forum.inductiveautomation.com/t/tag-browse-function-using-udt-child-tag/109878>\
**Category:** Ignition\
**Tags:** scripting\
**Created:** [August 18, 2025, 9:43am UTC](https://forum.inductiveautomation.com/t/tag-browse-function-using-udt-child-tag/109878 "2025-08-18T09:43:44Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mario.lopez](https://avatars.discourse-cdn.com/v4/letter/m/9f8e36/32.png) [@mario.lopez](https://forum.inductiveautomation.com/u/mario.lopez)\
**Post date:** [August 18, 2025, 9:43am UTC](https://forum.inductiveautomation.com/t/tag-browse-function-using-udt-child-tag/109878/1 "2025-08-18T09:43:44Z")

</div>

I am using the system.tag.browse to search recursively a specific UDT instances in my tag directory. The UDT I want to find has a memory tag defined with a string value. I would like to use the browse function to get the path to all the UDT’s with a specific name and a specific value in that tag. So I am wondering if it is possible to set in the browse function a value that a child tag of the UDT must match in order to retrieve the UDT’s path? Or is it something that can not be done within the function and must be filtered outside of it using a loop?

Thanks in advance!

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [August 18, 2025, 11:57am UTC](https://forum.inductiveautomation.com/t/tag-browse-function-using-udt-child-tag/109878/2 "2025-08-18T11:57:30Z")

</div>

I believe you'll need to first use the browser function to retrieve a list of all the tags matching your UDT datatype, then loop through those to generate a list of all the tags you want to read. Then do a single readBlocking call to read them all at once and loop through those values to build a new list of tags that have the matching value you're looking for.

---

<div class="post-metadata">

**Author:** ![robertm](https://avatars.discourse-cdn.com/v4/letter/r/ea5d25/32.png) [@robertm](https://forum.inductiveautomation.com/u/robertm)\
**Post date:** [August 18, 2025, 12:18pm UTC](https://forum.inductiveautomation.com/t/tag-browse-function-using-udt-child-tag/109878/3 "2025-08-18T12:18:53Z")

</div>

After Tag Browse, use a for Tag in Tag\_Paths to parse what you need. I have some examples here where I was working through something similar.

> [@Iterating selectively through Tag Folders to build Power Table](https://forum.inductiveautomation.com/t/iterating-selectively-through-tag-folders-to-build-power-table/109600):
>
> I have some scripting that iterates through the Gateway Devices folder hierarchy and populates a power table showing the Device Name, Enable Status and Connection Status. My Python skills are kindergarten level and it takes me hours of reading, trial and error, searches, etc. I marvel at the ease of some of your coding skills. To that end, the following two scripts accomplish the same thing. I started with the 1st one, but realize it wasn’t optimum due to the numerous read blocks. So I deve…

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [August 18, 2025, 2:04pm UTC](https://forum.inductiveautomation.com/t/tag-browse-function-using-udt-child-tag/109878/4 "2025-08-18T14:04:36Z")

</div>

As others have said, you’ll have to browse for the UDT Instances first, and then filter those based on the value of the tag that you want to look at.

Something like this:

```python
#filter to find UDTInstance of your UDT
tagFilter = {'typeID':'YourUDTName','tagType':'UDTInstance','recursive':True}

#adds the member tags name to the end of the UDT path
paths = [str(result['fullPath']) + '/memberTagName' for result in system.tag.browse('Starting\Tag\Path',tagFilter).results]

returnPaths = [path[:path.rfind('/')] for path,qv in zip(paths,system.tag.readBlocking(paths)) if qv.value == 'yourStringValue']

```

After execution returnPaths will have a list of paths to all of `yourUDTName` instances within `Starting\Tag\Path` where the value of `memberTagName` is equal to `yourStringValue`

> **CAUTION:** This is a recursive function and should not be run on the EDT in Vision, or in Tag Value Change Events.
