Found a python solution to get all the instances in the depsgraph. By filtering with "is_instance" you can get the names of the instance object that corespond with the source objects.
context = bpy.context
dg = context.evaluated_depsgraph_get()
counter = 0
for i in dg.object_instances:
obj = i.object
if not i....
To add materials go as you would for other objects. Material properties/new or brows.
The material of a Alt D object is always linked by data until you change it under the material properties shown in the image below to object.
Thank you Robin!