Karsten outlined the only two real native paths accurately. The checkbox aggregation workaround technically works, but only when your product catalog is very small and stable. Once you have dynamic products, quantities, pricing changes, or bundles, it becomes fragile and painful to maintain. Most teams abandon it quickly.
The custom code action route is the only scalable option inside HubSpot. With Ops Hub Pro or Enterprise, you can fetch the deal’s line items via the CRM API, format them into a readable string or table, and then write that output into a custom text property on the deal. That property can then be safely used in the notification. HubSpot’s docs confirm this pattern for advanced workflow logic and API use (https://developers.hubspot.com/docs/api/crm/line-items).
One small architectural tip I’ll add: instead of trying to render everything inside the notification itself, some teams store a preformatted “Deal summary” property at close-won time. That summary becomes reusable across notifications, internal emails, Slack alerts, and even deal views, which reduces future friction.
If this is critical for your process, it’s also worth upvoting or adding to the Ideas forum. Line item iteration in workflows has been a long-standing request, and product teams do look at demand there (https://community.hubspot.com/t5/HubSpot-Ideas/idb-p/HubSpot_Ideas )
You’re not missing anything. It’s just one of those edges where HubSpot still shows its seams. Hope this helps.
