If you’d rather not read all of this, here’s a short video I recorded of myself walking through the steps and explaining it all. It’s my very first n8n adventure so thanks in advance!
My company gets hundreds of feature requests a month and our system for handling is is terrible so I’m trying to automate the more tedious parts of it. Namely, associating a feature request to “ideas” in our project backlog and “pulse” items that represent opportunities/challenges. Ideally, there would be pulse items and project ideas to support every feature request that comes in so we can get better data/reporting.
So my n8n workflow kicks off by getting product information from Notion as well as the entire pulse database for a given product (typically 10 or less pages with minimal body content). Then it gets just the titles and IDs of projects in the ideas database (typically 100+ with lots of body content for most products in our suite). Then I get all unprocessed feature requests and loop through them.
In this main loop, the first step is to hit an AI node which is fed the product information alongside the feature request title and body content to assess if this FR does indeed belong to the specified product or not. It outputs JSON with its decision, confidence level, and notes.
I’ll just talk about the golden path for now. If it’s a match for the current product, it goes into another AI node where it is fed all of the previous information + all of the pulse doc information to determine matches/alignment between the FR and the pulses. So far so good.
Then, the next step is I feed an AI node all of the product & FR information with all of the project idea titles so it can create a low-confidence shortlist of ideas that sound like they may be loosely related to the FR. I then take the IDs from this shortlist and loop through the ideas database and get the page content of every idea doc, aggregate it into a single object, and then feed into one final AI node which has all of the product context + FR content + title&content of all of the shortlisted idea pages to determine matches.
At each step when it determines a match, it will actually update the relation property of the page accordingly (this is the magic and power of this whole flow!)
Next, it creates an audit log in a separate Notion database saying all of the things it did.
This all works great with a truly surprising degree of accuracy. However, it only works on the first loop. As soon as it starts the loop again with a new feature request it errors out and I simply can’t figure out why. There aren’t really any system errors, just really weird output from certain nodes that I cannot debug.
For example, the first time through the loop node where I get all of the “idea” page content the object it returns is perfect — each item has ID, title, and body content as it should. The second time its loops through with a new FR it has all of that plus duplicate idea page IDs at the bottom of the object in a completely different format.
I fear this has something to do with my use of the “Aggregate” node in a loop. Additionally, I have a code node that comes after that idea doc content aggregation which shoves all of the idea doc content into a single object. All nodes after this code node can no longer reference .item and force me to reference .first() which I also believe is breaking things.
If anyone would be willing to help me talk through it or even hop on a video call to look at it I’d be greatly appreciative. Thanks in advance.





