Group Bundles and turn them into an array

Hi everyone,

I’m working on a scenario that connects Microsoft Dynamics 365 → Iterator → Google Slides.

Here’s what I have:

  • I’m retrieving listings from Dynamics 365 (mag_listings) using a filter.

  • The Iterator successfully outputs all the bundles (there are about 37 bundles in total).

  • Each bundle contains fields like:

    • mag_city

    • mag_sales_base

    • mag_totalaskingprice_base

    • int_tangibles

    • mag_listingnumber

    • _ownerid_value@OData.Community.Display.V1.FormattedValue

I’m trying to map these fields into a Google Slides template that has a table with 4 rows — each row corresponds to a listing.
The slide looks like this (see image):

  • {{location1}}, {{rev1}}, {{EBITDA1}}, {{tang1}}, {{invest1}}, {{contact1}}, {{listingid1}}

  • {{location2}} … and so on up to {{location4}}

What I need help with:

  • How do I group the bundles into sets of 4 so each set creates a new slide in the same Google Slides deck, using the same template layout?

  • Is there a built-in Make.com module or technique to:

    • batch every 4 bundles together,

    • pass those 4 to one “Create Slide from Template” step,

    • then loop to the next 4 bundles, and so on?

Right now, the Iterator sends each bundle individually, so each slide only gets one row filled, instead of four.

Any suggestions on how to:

  • combine bundles into chunks of 4,

  • or restructure the data so each “Google Slides” module receives four mapped bundles at once?

Thanks in advance for your help! I’ve attached screenshots of both my Iterator output and my Google Slides template to show what I’m trying to achieve.

1 Like

Hi Jamie_L_Huillier,
I didn’t tested this solution, but I think it will work for you.
You can do this cleanly in Make with an Array aggregator that chunks the iterator stream into groups of 4, then feed each group to Google Slides › Create a slide from template.

Tools › Array aggregator (place it right after the Iterator)

  • Source module: your Iterator.
  • Group by: use the bundle index to batch every 4 items into one group.
    {{ floor( ( 20.__ IMTINDEX __ - 1 ) / 4 ) }} ← remove spaces, it was done to omit text formatting
    This yields: 0 for items 1–4, 1 for 5–8, etc., so the aggregator outputs one bundle per group of four.
  • Target structure: create an array (call it rows) of collections with just the fields you need:
    rows:
    location: {{mag_city}}
    rev: {{mag_sales_base}}
    ebitda: {{int_tangibles}}
    invest: {{mag_totalaskingprice_base}}
    contact: {{_ownerid_value@OData.Community.Display.V1.FormattedValue}}
    listingid: {{mag_listingnumber}}

Google Slides › Create a slide from template Connect it right after the aggregator. It will run once per aggregated bundle, i.e., once per slide of four rows.

  • In Text replacements, map your placeholders exactly as they appear in the slide (including braces).
  • Use get() and length() so it’s safe when the last group has fewer than 4 items.

Example mappings (copy/paste and adapt):
{{location1}} → {{ if( length(rows) >= 1; get(rows;1).location; “” ) }}
{{rev1}} → {{ if( length(rows) >= 1; get(rows;1).rev; “” ) }}
{{EBITDA1}} → {{ if( length(rows) >= 1; get(rows;1).ebitda; “” ) }}
{{tang1}} → {{ if( length(rows) >= 1; get(rows;1).ebitda; “” ) }} // or your tangibles field
{{invest1}} → {{ if( length(rows) >= 1; get(rows;1).invest; “” ) }}
{{contact1}} → {{ if( length(rows) >= 1; get(rows;1).contact; “” ) }}
{{listingid1}}-> {{ if( length(rows) >= 1; get(rows;1).listingid; “” ) }}

{{location2}} → {{ if( length(rows) >= 2; get(rows;2).location; “” ) }}
{{rev2}} → {{ if( length(rows) >= 2; get(rows;2).rev; “” ) }}
{{EBITDA2}} → {{ if( length(rows) >= 2; get(rows;2).ebitda; “” ) }}
{{tang2}} → {{ if( length(rows) >= 2; get(rows;2).ebitda; “” ) }}
{{invest2}} → {{ if( length(rows) >= 2; get(rows;2).invest; “” ) }}
{{contact2}} → {{ if( length(rows) >= 2; get(rows;2).contact; “” ) }}
{{listingid2}}-> {{ if( length(rows) >= 2; get(rows;2).listingid; “” ) }}

{{location3}} → {{ if( length(rows) >= 3; get(rows;3).location; “” ) }}
…and so on…

{{location4}} → {{ if( length(rows) >= 4; get(rows;4).location; “” ) }}
… map the rest for “4” similarly …

Best regards,