When the Problem Is the App, Not the Connection
We use n8n and we recommend it for the right situations. Connecting a form submission to a CRM record, triggering an email when a status changes, syncing data between two platforms: these are exactly what automation tools are built for, and they handle them well.
But two of the last three portals we built started with a client who had already tried automation tools and found the ceiling.
Here is where that ceiling usually sits.
Automation connects apps. It doesn't replace the missing one.
Zapier, Make, and n8n all work on the same model: trigger in one app, action in another. The value they deliver is in the connection. The apps themselves have to exist first, and the data each app understands has to be defined by someone else.
Freedom Ag, an agricultural sales company in Indiana, needed to generate spray cards before applicators left for the field. A spray card is a compliance document, a legal requirement for every pesticide application in Indiana. It requires specific product information, the correct label rate for the crop and application type, and a citation of the relevant label section.
There was no app that knew their product catalog, matched applications to label requirements, and produced a compliant document. There was no trigger to automate from. The workflow they needed didn't exist in app form yet.
Homefront, a First Steps early intervention agency, needed session notes that referenced specific IFSP goal language for each child on the caseload. Every note requires a connection to the goals the child is working toward. Different child, different goals, different language required. The provider had to context-switch to the child's file, find the relevant goals, and write toward them, for every session across a 15-20 child caseload.
There was no app that held the child's IFSP, knew the goal language, and assisted with the note. An automation zap from "session started" to "note template created" would produce a blank template with no goal reference, which is what they already had.
The signal that you need a portal instead
A few patterns usually indicate that automation tooling has hit its limit:
The source data doesn't live anywhere structured. Automation reads from structured records in apps. If your product pricing lives in a spreadsheet, your compliance requirements live in a PDF, and your customer history lives in one person's head, there is nothing for an automation to read from.
The output has to meet a compliance standard. Automation tools produce data transfers, not documents. A spray card has specific legal fields. A Medicaid billing note has specific documentation requirements. The format is not negotiable. An automation can send a notification when a session ends, but it cannot produce a session note that meets state billing requirements.
The workflow is the product. The spray card generator isn't a step in a workflow: it is the workflow. The same is true for the quote-to-work-order pipeline, the authorization tracker, the application log. These are not connections between apps: they are the system the business runs on. Building that in Zapier produces a fragile chain of zaps with no central data model and no ability to answer the question "what was on record for this job when the application happened?"
What we built instead
For Freedom Ag: a portal where a sales rep describes a job in plain language, and the AI assistant reads the product label database at runtime, matches the application to the correct label section, and generates the spray card before the truck leaves. The rep reviews it, confirms it, and it is on file. The same record drives the work order, the application log, and the invoice.
For Homefront: a portal where the AI assistant reads the specific child's IFSP goals before drafting a session note, so the provider gets language matched to that child's active goals, not a generic template. The same record drives authorization tracking, report due dates, and billing documentation.
Neither of these was a connection problem. Both were an app-doesn't-exist problem.
If your team is using automation tools to work around a tool that doesn't fit: that is worth solving at the source, not routing around indefinitely.