The workflow existed before the test did. It was not something I designed to make a point. It was a real client automation I had been maintaining for about four months, a lead processing pipeline that pulled form submissions from Typeform, enriched the contact data via two sequential HTTP calls to Clearbit and Hunter, ran a scoring function in a Code node, routed leads into three different branches based on score thresholds using IF nodes, pushed to HubSpot, sent conditional Slack notifications, and wrote a summary row to Google Sheets. Forty-seven nodes in the n8n canvas. Working in production. I rebuilt it in Zapier and Make because I was genuinely curious how each platform would handle the same logic, not because I wanted content. The answer was more instructive than I expected.
Zapier went first. I want to be fair: the simple parts were fast to set up. The Typeform trigger worked immediately, the HubSpot push at the end was cleaner than n8n’s connector honestly, and if the workflow had been twenty steps I probably would have finished it in an afternoon. The problem started at the enrichment stage. The second HTTP call depended on a field from the first HTTP response, a nested value three levels deep inside the JSON that Zapier’s field mapper exposed as a flat dotted path that worked in the test step and then stopped resolving during a live run. I spent an hour on that. The fix, when I found it, was to use a Formatter step to extract the value first and then reference it downstream, which added two steps to do something that a single expression in n8n would handle inline. By the time I got to the branching logic, Zapier’s path tool was doing what it does, which is making you create a separate path for every condition rather than letting you write compound logic in one place. The workflow ended up at sixty-one steps to replicate forty-seven, and it was still not handling the edge case where Clearbit returns a 422 on unverifiable emails. I parked it there.
Make.com was genuinely more capable in the branching sections. The router module is better than Zapier’s paths for complex conditional logic, and the visual representation of what is happening across branches is clearer. I will say that plainly because it is true. What broke Make for this particular workflow was the iterator behaviour when processing the Google Sheets write at the end. The workflow was passing an array of enriched fields to be written as a row, and Make’s Google Sheets module was iterating through the array and writing each value as a separate row instead of a single row with multiple columns. The documentation for that module says to use the array aggregator before the Sheets module to handle this correctly. I added the aggregator. It still wrote separate rows. I found a community post from eight months ago where someone had the same problem and the accepted answer was to map each field individually rather than passing the array, which means dismantling the data structure I had spent an hour building upstream. I did not dismantle it. I noted where Make broke and moved on.
n8n ran the full forty-seven nodes on the third test execution. The first two failed, which I am including because leaving that out would be the kind of thing that makes technical writing useless. The first failure was a credentials issue with the HubSpot node, specifically the token refresh timing out in a way that only happens when the workflow runs longer than about ninety seconds end to end, which this one does. The fix was switching from OAuth to a private app token, which the documentation does mention but not in the section you are reading when you set up the node for the first time. It is in a separate HubSpot-specific guide that is linked from a note at the bottom of the credentials page. The second failure was my own fault, a Set node where I had mapped a field name with a trailing space that the Code node downstream was not trimming. Green in the test panel because the test data I was using did not trigger that branch. Failed immediately on the first live record that did.

After that it ran. All forty-seven steps. The branching logic handled the 422 from Clearbit through an IF node checking the HTTP status code output, the Google Sheets write used a single Sheets node with field mapping rather than array iteration, and the Slack notifications fired conditionally off the score thresholds without needing separate branches for each condition. The Code node in the middle, about fifteen lines of JavaScript doing the scoring calculation, is the part that Zapier and Make would both have made ugly. In n8n it is just a Code node. You write the function, you return the object, it passes to the next node.
The honest version of this comparison is not that n8n is perfect. It is that n8n’s failure modes are debuggable. When something breaks, you have an execution log with the input and output of every node, you can pinpoint exactly where the data went wrong, and you can fix it without restructuring the workflow around the tool’s limitations. Zapier’s failure modes often require adding steps. Make’s failure modes sometimes require rethinking your data structure.
The tool that breaks in ways you can actually fix is worth more than the tool that breaks less but obscures why.

Olaitan Oladipo holds a BSc in Sociology from Olabisi Onabanjo University. He is a self-taught automation builder who has spent years inside n8n doing the work that most tutorials skip: debugging OAuth errors at 2am, migrating client automations from Make.com mid-project, fighting reverse proxy misconfigurations on AWS EC2, and figuring out through trial and error what actually holds up in production versus what only looks clean in a demo.
He is not a developer by training and not a SaaS founder. He is the person in the Discord server who actually answers the question instead of linking to the docs.
His writing on n8n Automation Tutorial covers self-hosting, AI agent workflows, tool comparisons, and the security vulnerabilities the automation industry would rather not discuss. He has built AI-assisted invoice approval flows using OpenAI function calling, connected Claude via HTTP Request nodes, and holds considered opinions about Zapier, Make.com, LangChain, and CrewAI that their marketing teams would not appreciate.
He writes for people who are technical enough to follow a tutorial but experienced enough to want the honest version.

