Dear Jes,
Thank you for your sample model.
Now, I'll step through the process for you, as I have done repeatedly in the past for others.
I regularly document these steps in an attempt to teach people how to fish instead of feeding them eternally.
Unfortunately, it never seems to end...
So, this is what your sample model looks like:

- Open spool_testing.rvt
- I see one free-floating run of MEP pipework and one MEP pipework assembly
- Select the assembly
- Use RevitLookup Snoop Objects on it
- It is an AssemblyInstance object
- Click on the GetMemberIds method
- It returns a list of 11 Element and 11 FabricationPart objects
- The Element objects have an empty Name property
- The FabricationPart objects are named 'Default'
- Therefore, the Name property does not seem very useful in this case
- If I dig deep enough into their properties, I find useful descriptive strings on each
- For instance, 'FP Description' seems more useful
On one of the Element objects, I discovered the shared parameter 'FP Description' with a GUID value 'ac6ed937-ffb7-4b18-9c69-7541f5c0319d' saying 'Victaulic 741 Vic Flange Adapter'.

One of the FabricationPart objects has that parameter as well.
Let's grab the description from that on the assembly itself also.
Then, we can implement the following to list them:
List<string> ListElementsInAssembly(
Document doc )
{
// 'FP Description' shared parameter GUID
Guid guid = new Guid(
"ac6ed937-ffb7-4b18-9c69-7541f5c0319d" );
FilteredElementCollector assemblies
= new FilteredElementCollector( doc )
.OfClass( typeof( AssemblyInstance ) );
List<string> descriptions = new List<string>();
int n;
string s;
foreach( AssemblyInstance a in assemblies )
{
ICollection<ElementId> ids = a.GetMemberIds();
n = ids.Count;
s = string.Format(
"\r\nAssembly {0} has {1} member{2}{3}",
a.get_Parameter( guid ).AsString(),
n, Util.PluralSuffix( n ), Util.DotOrColon( n ) );
descriptions.Add( s );
n = 0;
foreach( ElementId id in ids )
{
Element e = doc.GetElement( id );
descriptions.Add( string.Format( "{0}: {1}",
n++, e.get_Parameter( guid ).AsString() ) );
}
}
Debug.Print( string.Join( "\r\n", descriptions ) );
return descriptions;
}
Running this method in your small sample model generates the following output in the Visual Studio debug window:
Assembly L6-AHU-31-32-CS-CHWR-17 has 22 members:
0: Victaulic 90 Elbow No 10
1: Victaulic 90 Elbow No 10
2: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
3: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
4: Chicago Area A53 ERW Sch 40 Blk GRV Pipe
5: Chicago Area A53 ERW Sch 40 Blk GRV Pipe
6: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
7: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
8: Victaulic 761 10PosHndl AlBzTrim E Seat
9: Victaulic 761 10PosHndl AlBzTrim E Seat
10: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
11: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
12: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
13: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
14: Chicago Area A53 ERW Sch 40 Blk GRV Pipe
15: Chicago Area A53 ERW Sch 40 Blk GRV Pipe
16: Chicago Area A53 ERW Sch 40 Blk GRV Pipe
17: Chicago Area A53 ERW Sch 40 Blk GRV Pipe
18: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
19: VICTAULIC COMPANY 2-QUICKVIC STYLE 107N COUPLING
20: Victaulic 741 Vic Flange Adapter
21: Victaulic 741 Vic Flange Adapter
Is that what you are after?
I added this code to The Building Coder samples:
https://github.com/jeremytammik/the_building_coder_samples
Best regards,
Jeremy