Aarone Den PatayanAarone Den Patayan
← Back to Laneframe
Capstone · Four platforms · One specification

Four Platforms, One Specification

The same lead-intake system, built four times, on Zapier, Make, n8n and GoHighLevel, for the same client by the same person, instrumented identically, and put through the same five failure probes as far as each platform allowed. This page reports what came out. Its argument is that the meter matters more than the price, and the right platform depends on where the work happens.

Zapier · Z1 Make · M1 n8n · N1 GoHighLevel · G1 16 capture fields · 5 failure probes

Watch first

The whole build in under three minutes

A sample business, not a real client. The walkthrough covers the job, the four builds, the break tests and the results. The proof it comes from is further down this page.

  1. The scenario
  2. The four builds
  3. The break test results
  4. The measured findings The cost figures The 12 trick questions (Make page)
  5. The recommendations
See the real proof

Screenshots and findings from each build: n8n, Make, Zapier, GoHighLevel

Read the transcript

The results first 0:00

About 10 seconds. From a new lead to the first text message. Measured on the n8n build. The whole run on Make took under 3 seconds. The two were timed to different end points, so this is not a speed ranking.

12 of 12. Trick questions handled correctly. The AI helper on Make got all 12, with a second try on one of them. The Zapier version got 8 of 12: it answered four questions it should have passed to a person.

$5.35 a month. To run the n8n version. That is the cost of its own server, backup included. Backup is included.

What this film shows 0:05

the choice: I built three systems for a sample software company, on four automation tools.

the catch: A build that works once proves little, so I tried to break every version.

watch for: What each tool does well, and where it struggles.

What happened 2:32

The job: Three systems for a sample software company: lead sorting and demo booking, failed-payment follow-up, and an AI helper that hands the rest to a person.

The tests: Four tools, five break tests planned for each, 16 of the 20 run, eight requirements and sixteen details recorded per build.

What showed up: About 10 seconds to a first text on n8n (Make was timed to a different end point). 12 of 12 trick questions on Make, 8 of 12 on Zapier. $5.35 a month to run n8n.

Key takeaway: Building it four times shows what each tool does well and where it struggles, so you can pick the right one for your business.

The full build 2:54

Aarone Den Patayan. www.adautoteam.top. Sample business, not a real client.

The story, line by line

0:21 Circuit: I built three systems for a sample software company.

0:26 Circuit: One sorts new leads and books demos.

0:32 Circuit: One follows up failed card payments.

0:37 Circuit: One is an AI helper that hands the rest to a person.

0:45 Circuit: Then I built the whole set on four tools.

0:51 Circuit: Four builds of the same job.

0:59 Circuit: Next question: how do they hold up?

1:11 Flow: Now I try to break every one of them.

1:17 Flow: Five break tests planned for each tool. 16 of the 20 were run.

1:30 Flow: Eight requirements and sixteen details per build.

1:41 Circuit: Here is what the testing showed.

1:45 Circuit: A new lead gets a first text in about 10 seconds on n8n.

1:54 Circuit: On Make, the whole run took under 3 seconds, timed to a different end point.

2:02 Flow: On trick questions, Make got 12 of 12.

2:10 Flow: Zapier got 8 of 12, answering four it should have passed.

2:17 Circuit: n8n runs on its own server for $5.35 a month.

2:23 Circuit: Make: one real problem fixed, two small ones open.

2:29 Circuit: Let's recap what happened.

The rule that governs this page

Every number here is either measured during a build, or it is a formula with its inputs named. There is no third category.

Comparison pages are where invented numbers are conventional. The genre is dominated by affiliate listicles with confident tables, so a comparison built from first-hand builds is hard to fake and worth publishing. That advantage disappears once one cell is estimated and shown as though it were observed.

Placeholders render as placeholders. Where a build hasn't run, the cell shows an em-dash and the page says so. And prices are quoted with a date, or not at all: third-party sources agree closely on billing models and contradict each other on prices. The models are stable enough to build an argument on; the prices are not. The primary currency on this page is therefore meter units, with dollars derived at publication time from each vendor's own pricing page.

The short version, in my words.
  • I built the same lead-routing job on four platforms and broke each one on purpose, so you can see how they bill, how they fail and how hard they are to leave. The client is fictional and the data is synthetic.
  • The same guard-halted lead cost 1 Zapier task, 4 Make credits, 1 n8n execution or 2 GoHighLevel premium items, so plan prices alone don't compare the platforms.
  • Where the downstream-failure test ran, a failed step did not show as a failed run unless an alert or check had been added.
  • On the plans I used, only n8n and Make gave me an exportable file of the build: a 59,260-byte workflow JSON and a 28,052-byte blueprint. Zapier offers JSON export only on Team and Enterprise plans, and GoHighLevel moves automations as snapshots and share links, not files.
Status (published 13 October 2026). All four builds have run and been captured. Cells show a measured value, a derived value with its inputs named, or an em-dash not measured where nothing was measured. Where a probe or field did not apply to the build as built, it says n/a. No spine is claimed to satisfy all eight requirements: SMS and enrichment are absent from Zapier and GoHighLevel, the GoHighLevel build ran on a trial account, and the Zapier parent never ran live. Those deviations are listed in §2 and §10.

1 · The scenario, specified onceBefore any platform is named, so a reader can check that four implementations were held to one specification.

The client

Laneframe is a transport management platform for small freight brokerages and asset-light 3PLs. Thirty-one people. Three self-serve tiers at $149, $279 and $449 a month, so a won deal is worth roughly $3,300 a year. The motion is self-serve trial plus inbound demo request: about 40 trial signups and 25 demo requests a week, handled by two SDRs and one account executive, with the founder taking anything above 40 trucks. The average deal closes in 19 days or dies.

Laneframe is a composite client, not a real one: a specification written to a real sales motion so the system could be built against something with actual constraints. The builds are real and the failure conditions were induced deliberately. The company is the fiction; nothing else is.

The problem, in the client's words

Leads arrive from five places in four shapes and get worked by three people with different jobs. The founder should see the 40-truck brokerage whose owner filled in the demo form. The SDRs should see everything else worth a phone call, quickly. Nobody should see the student researching a dissertation, and nobody should call the same person twice because they started a trial on Tuesday and asked for a demo on Thursday.

The input contract

This section is the specification as written before the builds; §2 reports where each build departed from it. All four implementations accept the same five sources in the same four shapes. Any platform that needs the payload pre-normalised before it arrives has failed part of the test, and that fact is recorded rather than worked around.

SourceShape
Website demo formJSON, full_name single field
In-product trial signupJSON, first_name / last_name, plus product-usage fields
Paid-search landing pageJSON, nested: answers inside an array of question objects
Call-tracking toolJSON, phone-primary, often no email
Forwarded referral emailUnstructured prose, human-written, no schema at all

Required behaviour

  1. Normalise all five shapes to one contact record: name, email, phone in E.164, company, company domain, fleet size, role, source.
  2. Guard the input. Missing usable email or missing company halts and routes to human review. Nothing falls through to a default score.
  3. Enrich on company domain. Free-mail domains are flagged, not enriched.
  4. Score for fit on fleet size, role, industry, and whether the lead is product-qualified (already in the trial) or marketing-qualified (filled in a form).
  5. Deduplicate against existing contacts on normalised email and company domain. A returning lead routes to re-engagement, not to the bin.
  6. Route three ways: founder (deal, instant SMS, Slack alert), SDR (deal, round-robin, task due within the hour, acknowledgement email), self-serve (nurture tag, no human alerted).
  7. Log every lead, including rejects and duplicates.
  8. Respond inside 60 seconds on the founder and SDR paths.
Definition of done. A build counts as complete when it satisfies all eight requirements, survives all five failure probes, and has all sixteen capture fields recorded. A build that satisfies seven of eight is reported as satisfying seven of eight.

The five failure probes, run identically on all four

ProbeHow it's induced
Malformed payloadSubmit the nested paid-search shape with the answer array empty
Duplicate arrivalSubmit the same email twice, then a third time with the existing record backdated 40 days
Downstream timeoutRevoke the SMS provider credential and fire a founder-tier lead
Enrichment unavailablePoint the enrichment step at a dead endpoint
Out-of-hours arrivalFire a founder-tier lead at 02:00 client time

The third probe is the discriminating one. The platforms diverge most sharply there, and the result is least flattering to one of them.

2 · The four implementationsSame shape each time: what was built, what was measured, what was not. Every spine was built and captured; none is claimed to satisfy all eight requirements.

Evidence status per spine

SpineBuildProbes runDisclosed gaps
Zapier Z140 steps over 3 Zaps; parent still Draft; no export on the plan used2 of 5 (probes 1, 2); 3, 4, 5 not applicable (SMS and enrichment removed)No live parent run, so success-path meter and first touch are not measured
Make M147 modules; blueprint on disk5 of 5Probe 3c could not be induced (Make rejects a bad connection at save); probe 5 send-time bug was open at capture; build time and per-module timing not recorded
n8n N137 nodes, live self-hosted; export JSON on disk5 of 5Real lead mix not tallied; 3b and 3c execution ids not pinned
GoHighLevel G1About 61 actions (±3) over 4 workflows; trial account; no per-workflow file export found4 of 5 run (1, 2, 3 variant, 5); probe 4 not applicableSMS removed; flat payloads only; no enrichment; probe 3 email variant not run; 40-day duplicate not run; G1·02 and G1·03 never enrolled anyone; the G1·01 canvases predate two later additions

Step counts are not a like-for-like unit (nodes, modules, steps, actions); they are shown for scale only.

The five probes, as run rather than as specified

Probe Zapier Make n8n GoHighLevel
1 · MalformedPass; Sub-Zap logged, +1 taskPass; 4 ops, no enrichment billedPass; 4 of 37 nodesPass; guard halt, raw payload kept, routed to human review
2 · Duplicate, then 40-day backdatePass in two halves; HubSpot createdate is read-only, so no single dormant runPass including the 40-day backdate (after a real bug fix)Pass including the 40-day backdate (cosmetic bug fixed)Failed first (no stamp, repeat re-processed, Assign errored); passes after fix; 40-day run not run (cannot backdate on trial)
3 · Downstream failuren/a3a and 3b caught by the error handler and a Slack alert; 3c not inducible3a silent success until fixed; 3b 2 min 20.5 s hang; 3c 1.91 s 401; no retryHTTP-send variant against the telemetry webhook only; email variant not run; no retry, no alert
4 · Enrichment downn/aPass; 11 ops, native degradePass; hand-built not_enriched flagn/a
5 · Out of hoursn/aHold confirmed; logged send time wrong by 9 h (bug, open at capture)Hold confirmed; log bug fixed; Wait later resumed exactly on targetPass: held 6 h, released 4 min 26 s late, email sent 08:04:28 CDT
Two like-for-like caveats. Probe 3 hit a different kind of target on each platform (an SMS provider over HTTP on n8n and Make, the telemetry webhook on GoHighLevel, nothing on Zapier). Probe 5 on GoHighLevel tests an email hold, while n8n and Make tested an SMS hold.

2.1 · Zapier (Z1)

Architecture. Three Zaps, not two: a parent of 31 steps and two Sub-Zap children (4 and 5 steps), 40 steps in all. The split was forced by Zapier's 32-step ceiling per Zap. Formatter for normalisation, Filter as the input guard, Code by Zapier for scoring, HubSpot lookups for dedupe.

Finding. The step ceiling changed the finished shape of the build. Twilio SMS never delivered (caller-ID and carrier filtering) and was dropped. The enrichment step errored with "Invalid API key" and was deleted to stay inside the step budget. Zapier surfaced no retry or backoff setting in any step editor and none was built; retry was never probed, because probe 3 had nothing left to fail.

Also measured. A Sub-Zap run billed +1 task against a documented 2; unresolved. HubSpot's dedupe is read-then-branch, and the race was not tested. The parent Zap never ran live, so the success-path meter and time to first touch are not measured and appear as em-dashes below.

2.2 · Make (M1)

Architecture. One scenario of 47 modules. Webhook, Parse JSON, Set Variables for normalisation, Data Store lookups then a write for dedupe, a filter before any paid step, a Router, and per-module error handlers that raise a Slack alert and then Resume.

What was observed. The error handlers work: probes 3a and 3b were caught and alerted, and the top-level status still read SUCCESS. On this spine build (M1) no retry or backoff was exercised or observed; the SMS module fired once and the run billed 19 operations. The separate M2 billing build did exercise a manual three-attempt retry once, with the waits shortened from minutes to 2, 4 and 8 seconds for the test. Repeat exists on the platform and was not tried, so "genuine exponential backoff" is a platform capability this page does not claim to have seen. Make also rejects a bad connection at save time, which is why probe 3c could not be induced.

The downside. An unhandled error silently deactivated the scenario and queued incoming webhooks behind it. Build friction recorded: a wrong Gmail connection, a Data Store .data. prefix, and the auto-deactivate and queue drain. The free plan caps the account at 1,000 operations a month and two active scenarios. On a per-module meter, every module of failure handling is a module you pay for; see §4.4.

2.3 · n8n (N1)

Architecture. One workflow of 37 nodes, self-hosted and live. Webhook with an immediate Respond node, a JavaScript Code node for normalisation, a Postgres ON CONFLICT claim for dedupe (a single statement, atomic by construction), a Switch for routing, a Merge to write one log row, and a global Error Trigger workflow behind it.

What was measured. Every run, whichever route, was one execution; the guard-halt (4 of 37 nodes) and the full founder route cost the same. The workflow export is 59,260 bytes. The VPS is a real invoice: $5.35 a month including VAT, backup included (period 2026-08-02 to 2026-09-01), attributed 100% to N1 so far. Tool-active build time was about 28 h 44 m over 5 calendar days, by the gap-sum method.

Failure behaviour, before and after. Probe 3a was a silent success before a fix: the run Succeeded, no alert fired, and the lead was logged as routed. After the added assert it throws and alerts. 3b hung for 2 min 20.5 s; 3c failed in 1.91 s with a 401. Retry On Fail was off on every node tested, so no retry was observed. The native setting is fixed-interval with a maximum of 5 tries (a configuration fact, not exercised), so true backoff would be hand-built. The cost of running it is the invoice above plus the attention.

2.4 · GoHighLevel (G1)

Architecture. About 61 actions over four workflows on a trial account. Native triggers, If/Else bands for scoring, a stamped custom field as the dedupe guard, round-robin assignment, and an email hold for out-of-hours leads. SMS was removed (A2P 10DLC unregistered, and the cost). G1·03 is therefore an email missed-call follow-up with zero enrollments; it was never run.

Where the platform did not meet the specification. The nested paid-search answers[] array was not unwrapped, so flat payloads were used: the input contract was not met for the nested shape, and that is recorded here as a failed part of the test. Runs were contactless until an explicit Create/Update Contact action was added. The dedupe failed until a stamp step was added. There is no code step and no text-parsing primitive, so a forwarded prose referral cannot become a contact record inside the platform. A prose referral payload (from, subject, body; no email key) was sent on 5 Oct 2026: the Create/Update Contact step errored (no value for any mapped field), the input guard's no-email branch executed, the review-inbox notification fired, and the tag and telemetry steps were skipped for lack of a contact. Measured: it halted for human review and did not reach scoring.

Failure behaviour. In probe 3 a failed Webhook action ran once and ended: no retry, no alert, and no backfill in 16 minutes. The failure stayed in the child workflow while the parent reported the handoff as executed.

What the comparison cannot say. The claims that GoHighLevel is the fastest to first touch, has the fewest moving parts, or has a missed-call text-back with no equivalent elsewhere are argued, not demonstrated: the text-back was never run, and the only first-touch measurement is an after-hours email (§6, finding 9). The data model is the platform's, and there is no per-workflow export.

Why this client size: sub-$500-a-month product, self-serve trial plus inbound demos, about thirty people. Without it a technical reader correctly asks why not HubSpot. Laneframe is also the client in §7's first row, and the matrix there says plainly what the data does and does not support.

3 · Four platforms, four metersMeasured where the captures reached it, billing models from each vendor's own pages.

These four platforms do not bill for the same thing, so their unit counts are not comparable and their headline prices are not either. Comparing meters is more useful than comparing prices, and the same input produced four different meters.

The same lead, four different meters

A lead that the guard check stops early.

Zapier

0 task

Make

0 credits

n8n

0 execution

GoHighLevel

0 premium items

The same guard-halted lead cost 1 Zapier task, 4 Make credits, 1 n8n execution or 2 GoHighLevel premium items, so plan prices alone don’t compare the platforms. A task, a credit, an execution and a premium item are different things, so these counts are not a ranking. (Zapier is 1 task, or 3 if two Formatter steps bill.)

Zapier Make n8n GoHighLevel
UnitTaskOperation (credit)ExecutionPremium execution plus email, each billed per use
What one unit isOne successful action; trigger, filtered and errored steps are 0 (vendor rule, plus one observed delta)One module call, including the trigger and error-handler modules (1:1 merge confirmed from account data)One complete workflow run, any number of nodesThe premium items are the inbound webhook trigger and the Webhook action, not messages; no per-run meter appears in the UI
Scales withAction steps × runsModules × runsRuns onlyPremium items and emails, on top of a $297 monthly plan
Adding a step costsMoreMoreNothing (measured: guard-halt and full route are both 1)Nothing for standard actions; a usage charge for each premium one
Free tier100 tasks/mo, two-step Zaps only1,000 credits/mo, 2 active scenariosCommunity Edition, self-hosted. Cloud tiers are paid, with a trialNone. 14-day trial
At the limitSwitches to pay-per-task billing at a higher per-task rate——Usage bills as incurred
Can it charge you by accident?Yes, through the overage rate——Yes. No free tier; the trial converts to a $297 charge at expiry unless cancelled (this build's trial was cancelled before it converted)
Agent meteringnot measuredAgent add-on pricing was not measured or re-verified for this page, and no agent-meter claim is made.

VERIFIED 2026-10-05, RE-READ 2026-10-13 Free tiers, plan prices and the Zapier overage behaviour were read from the vendors' pricing pages on 2026-10-05 and re-read on 2026-10-13 with no change. Cells shown as em-dashes were not re-read and are therefore not asserted.

Two observations

Unit counts across platforms are meaningless. The same guard-halted lead was 1 task on Zapier's Sub-Zap (3 if two Formatter steps bill), 4 credits on Make, 1 execution on n8n and 2 premium items on GoHighLevel. Any table that puts those four numbers in a column and invites comparison is misleading. Only cost per thousand leads is comparable, and only when computed on the day.

Two of the four can charge money you didn't plan to spend. Zapier moves you to a higher per-task rate when the plan's tasks run out. GoHighLevel has no free tier, and a trial converts to the full plan price unless it is cancelled. That is a real selection criterion for a client who will forget.

4 · Cost accountingPublishing the method is what makes this section falsifiable.

4.1 · Method, stated before any number

  1. Fix a lead mix, measured from real traffic, and state it. No lead mix was measured on any platform; all traffic so far is probe and test traffic. So this page shows per-outcome figures and all-one-outcome bounds, and publishes no blended per-1,000 figure.
  2. Measure meter consumption per run for each routing outcome separately, because averaging hides the most interesting effect on this page.
  3. Cost per 1,000 = the sum over outcomes of (meter units per run × count of that outcome in 1,000) × price per unit, at the tier the build requires, on the publication date.
  4. Convert to dollars from the vendor's own pricing page. State the date.
  5. Name what is excluded (§4.5).

4.2 · The arithmetic

Lead mix at 1,000 inbound leads a month

Founder-tierSDRSelf-serveDuplicate or spam
————

not measured No real traffic mix exists. Every blended figure would be a function of it.

Meter units per run, by routing outcome

Per run Zapier · tasks Make · credits n8n · executions GoHighLevel · premium items
Guard-halted1 measured (Sub-Zap); 3 if the Formatter steps bill (vendor rule)4 measured1 measured2, derived (about 9 actions executed)
Self-serve—11 measured1 measured—
SDR—13 measured1 measured2, derived (about 15 actions, free-mail path)
Founder, first touch attempted—19 measured (17 if out of hours and queued)1 measured2, derived, plus 1 to 2 emails on the non-free-mail path
Duplicate / re-engagement—13 measured1 measured2, derived, plus 1 email (about 12 actions)

On the GoHighLevel premium items. One of the two is the Webhook action in G1·04, which exists only to send telemetry to the n8n sink. A deployment without the benchmark instrumentation would carry 1 premium item for webhook-sourced leads and 0 for form-sourced leads. That reading is derived from the in-account price list and was not measured: trial usage read $0.00. This page shows the as-built figure and this sentence, never the production-equivalent alone.

Per 1,000 leads, all-one-outcome bounds

Meter units per 1,000Dollars per 1,000Basis
Zapier1,000 to 3,000 tasks, guard-halted only; others ——Cost not computed: the vendor page does not tie a plan price to a task allowance, so no per-task figure is given
Make4,000 (all guard-halted) to 19,000 (all founder with SMS attempt) credits$4.80 to $22.80Derived at $12 per 10,000 credits (Core, monthly billing; listed 2026-10-05, re-read 2026-10-13). 19,000 credits needs more than one Core allotment
n8n1,000 executions, whatever the mix$5.35 ÷ monthly volume × 1,000: $53.50 at 100 a month, $10.70 at 500, $5.35 at 1,000, $1.07 at 5,000, $0.535 at 10,000Derived. The VPS invoice is measured; volume is the assumed input and must be stated beside any cell. For reference, n8n Cloud Pro lists €50/month billed annually for 10,000 executions (read 2026-10-05, re-read 2026-10-13)
GoHighLevel2,000 premium items; 0 to 2,000 emails—Usage rates were read only from the in-account list on 2026-10-02 and not confirmed on a vendor page, so no usage dollar figure is given, and none was ever incurred on the trial. Plus the $297/month Unlimited plan (confirmed on the vendor page 2026-10-05 and re-read 2026-10-13)

Reading the plan floors and usage together at 1,000 leads a month: GoHighLevel is the $297 plan plus usage (not computed); n8n $5.35, flat; Make $4.80 to $22.80 (subject to the allotment); Zapier not computed.

4.3 · The short-circuit finding

Make: the guard sits before the expensive branches, so a guard-halted lead costs 4 credits against 19 for a founder lead (measured). n8n: guard-halt and the full route are both 1 execution (measured). GoHighLevel: the short-circuit runs about 9 actions against about 15, but both bill 2 premium items, because the inbound trigger bills before the guard (derived). The same guard that saves 15 credits per lead on Make saves nothing on the meter here.

On a per-execution meter you order your steps for clarity; on a per-step meter you order them for cost.

4.4 · Resilience is the part of the build that has a meter on it

On a per-step meter, each guard, error handler and alert module is billed on every run it executes. Make's measured numbers show it: a founder run with a live SMS attempt billed 19 operations, with the trigger and error-handler modules counted, against 1 execution for the whole of N1's route.

The same arithmetic explains why published automation work tends to be happy-path: resilience is the part of the build that adds recurring line items and produces nothing visible when it works. It also answers a client who asks why the quote includes work they can't see.

It also reframes the n8n case. The better argument for self-hosting is that per-execution metering removes the financial disincentive to build properly, whatever the cost at volume. The measurement covers n8n and Make's cost of guards. It says nothing about whether the other platforms can be built resiliently.

4.5 · What is not in any of these numbers

  • Model tokens. Billed by the provider and not included.
  • Enrichment API calls. The free tier used on n8n returned 429 on roughly 1 in 3 calls.
  • SMS. A paid SMS provider was used on n8n and Make; none exists on Zapier and GoHighLevel as built (A2P 10DLC unregistered).
  • The VPS split and the operator's attention. 100% of the VPS is attributed to N1 until other builds run on it, and the GoHighLevel telemetry sink is hosted on that same VPS.
  • Build time, which is in §5 and which dominates the above for the first year.
  • The cost of being wrong. Migration between these platforms is manual. GoHighLevel documents snapshots shared by link or invite and no per-workflow file export (found 2026-10-10), and Zapier's JSON export is limited to Team and Enterprise plans, which this build did not use.

5 · Complexity accountingCost is the easy half. Measured rows are marked; the rest are the builder's assessment and are labelled argued.

Zapier Make n8n GoHighLevel
Build time— (7 to 8 calendar days)— (4 to 5 calendar days)About 28 h 44 m tool-active (5 calendar days)—
Machine-readable export (measured)None on the plan used (export menu checked); JSON export is listed for Team and Enterprise plansBlueprint JSON, 28,052 bytesWorkflow JSON, 59,260 bytesNo per-workflow file export found (snapshots and share links only); a hand-written manifest stands in
Retry observed (measured)None built or surfacedNone observed on M1 (error handler then Resume; Repeat not used); M2 exercised a manual three-attempt retry once, with waits shortened to secondsNone observed (Retry On Fail off)None observed
Failure visibility (measured)Probes 1 and 2 onlyAlert and Sheets row; top-level status SUCCESSSilent before the fix; throws and alerts after itContained in the child workflow; parent shows executed; no alert
Dedupe mechanism (measured)Two HubSpot lookups + Filter; race untestedData Store search ×2 then write; race untestedPostgres ON CONFLICT, single statementStamped field tested by a branch; not atomic; failed until a stamp step was added
Build friction (recorded)Step cap (32; UI says 30), Sub-Zap billing mismatch, CSP on the hooks hostWrong Gmail connection, Data Store .data. prefix, auto-deactivate and queue drainPublish state of the error workflow, Postgres parameter array, On-Error replacing $jsonContactless runs, mapping from last sample only, non-idempotent Assign, branches never merge, re-entry off by default
Maintenance surface (recorded)3-Zap topology, step budget, no version historyConnection brittleness, 1,000-op cap, silent deactivationVPS, Docker, TLS, a single encryption key4 workflows, 3 custom fields, usage billing with no meter, non-atomic guard, dependency on the n8n sink
Skill floor, debuggability, lock-in, who can take it over (argued)argued, not measuredThese rows were judgements by the builder and were not tested; they are left off the table rather than presented as findings.

Two trade-offs

Zapier's export gap is measured on the plan used, and it is worse than its retry gap. On the Free and Professional plans a Zap exists only inside Zapier and the migration path is a person rebuilding it by reading it; Zapier lists JSON export of Zaps on Team and Enterprise plans, which were not tested. For a client whose operations depend on it, that is a more consequential property than any per-task price.

n8n's ownership advantage is also its liability. The same sentence, you own the server, is the reason to choose it and the reason not to. The recommendation against n8n for a client with nobody to run it is argued, not tested; the $5.35 invoice and the 59,260-byte export show what the ownership side of the trade looks like.

6 · FindingsEach is tagged: measured, derived, or reworded from the original specification because the captures narrowed it. If only three survive, they are 1, 3 and 4.

  1. The meter matters more than the price. Measured. The same guard-halted input was 1 task, 4 credits, 1 execution and 2 premium items. A client comparing headline prices is comparing four different products.
  2. Per-execution metering removes the cost of building properly. Measured. On n8n the guard-halt and the full route are both one execution (#168 against #186); on Make the same guard measures 4 against 19 credits.
  3. A downstream failure did not surface as a failed top-level run on any platform where probe 3 ran. Measured. n8n before its fix: Succeeded, no alert, logged as routed. Make: status SUCCESS, with an alert only because an error handler was hand-built. GoHighLevel: the parent reports the handoff executed, the child shows Failed, no alert. Only n8n after the added assert, and Make because someone built the alert, produce a visible signal.
  4. Step ceilings and plan limits changed the finished shape of two builds. Measured. Zapier's 32-step cap removed SMS and enrichment and forced three Zaps. GoHighLevel's SMS was removed for A2P cost. Only n8n and Make shipped an SMS path to probe.
  5. GoHighLevel's short-circuit saves actions but no meter cost. Derived. About 9 against about 15 executed actions, 2 premium items on both: the inbound trigger bills before the guard.
  6. GoHighLevel did not accept the nested input contract. Measured. Nested answers[] was not unwrapped, runs were contactless until Create/Update Contact was added, and the spec rule applies: this is a failed part of the test.
  7. Hold precision differs. Measured, one run each. n8n's Wait resumed at 09:00:00.000 exactly; GoHighLevel released 4 min 26 s after its 08:00:00 schedule; Make queued a send time 9 h wrong (a bug).
  8. The platform's own documentation can disagree with its meter. Measured. A Zapier Sub-Zap billed +1 task against a documented 2 (unresolved). GoHighLevel's wallet ledger logged 45 premium items between 1 and 6 Oct 2026 (39 inbound webhook, 5 custom webhook, 1 Slack message), every one at $0 under a "Free Tier" label on the trial; the free tier's size is not shown.
  9. The measured first-touch evidence does not rank GoHighLevel first. Measured. n8n about 10.4 s excluding the hold; Make 2.3 to 2.6 s for the whole run; Zapier not measured; GoHighLevel measured only after hours (6 h designed hold plus about 4 min 28 s scheduler lag). No two of the four are comparable, so the original "fastest first touch" claim is dropped.
  10. Instrumentation cost leaks into the benchmark. G1's second premium item is the telemetry webhook, and first touch has to be read from the execution log rather than the telemetry row.
  11. Zapier buys breadth, and pays in exit and, as far as it was probed, resilience. Reworded. The export gap is measured on the plan used. The resilience claim rests on no retry being surfaced, with three of five probes not applicable. Speed was not measured and is dropped.
  12. Make's failure handling is the best observed of the hosted three, with limits. Reworded. Observed: per-module error handlers, Resume, Slack alerts, and a save-time guard on connections. Not observed on the spine build: any retry or backoff (M2's manual three-attempt retry fired once, with waits shortened to seconds for the test). Also observed: an unhandled error silently deactivated the scenario.
  13. Owning the platform is a different decision from owning the maintenance. Argued, with a measured $5.35 and export. "Cheapest" depends on stated volume: at 100 executions a month n8n is $53.50 per 1,000.
  14. GoHighLevel can charge you by accident, and that is the part of the original finding the evidence keeps. Reworded. Supported by the no-free-tier plan and the trial conversion; "fewest moving parts" is not supported by the captures.

7 · Recommendation matrix by client typeEach row commits to one platform, names what is given up, and names the condition that would change the answer. The matrix is argued, not demonstrated: it rests on the four spine builds above, and the GoHighLevel rows rest on SMS and missed-call text-back that were neither built nor run.

Client typeRecommendWhyWhat they give upRevisit when
SMB-motion B2B SaaS vendor
~30 staff, sub-$500 ACV, self-serve + inbound demos
Make, with n8n if there's an engineer to spare The work is data integration between systems the company already owns: product DB, Stripe, CRM. Needs real failure handling because billing and provisioning are involved, and per-module error handlers at credit prices are the affordable way to get it (backoff was not exercised). GoHighLevel would mean moving the customer record out of the product's own database, which is backwards for a software company. Expression-heavy logic gets harder to hand over than code would An engineer has capacity to own a server, or credit consumption crosses the point where self-hosting pays for the attention
Freight brokerage or 3PL
25–60 staff, dispatch-led, phone and SMS heavy
GoHighLevel The work happens in the conversation, not in the data. Speed-to-quote is the competitive edge, missed calls are the leak, and SMS is the channel. On the other three, all of that would be an SMS-provider integration bolted to a CRM integration; here it is the platform. Data model ownership, and a genuinely difficult exit Quote logic outgrows workflow builders, or they hire someone technical
Non-technical solo operator or micro-business Zapier, deliberately Lowest skill floor, largest app catalogue, most forgiving failure surface for someone who will be reading the error email themselves. The resilience gap is real and mostly doesn't matter at this scale. Backoff, and any export path Volume makes the per-task bill visible, or an automation becomes load-bearing
Agency reselling automation under its own brand GoHighLevel, with eyes open Sub-accounts, white-label and rebilling are the actual product requirement, and no other platform in the set has them. AI add-on pricing per sub-account (not measured or re-verified for this page). Model it before pricing client packages The add-on economics stop clearing at the intended markup
Technical team with data-residency or compliance constraints n8n self-hosted The only option that keeps data on infrastructure the client controls. Everything else is a vendor's cloud, and no amount of contract language changes that. Vendor-managed uptime, and the certification paperwork a managed vendor would have provided Never, on this criterion. It's a constraint, so the answer doesn't depend on preference
High-volume, heavily-branching operations
10k+ runs/month
n8n self-hosted, otherwise Make Per-execution metering means complexity is free; on a per-step meter, both volume and branching multiply. On the measured meters the gap shows up as 1 execution against 4 to 19 credits per lead. The maintenance burden, which grows with how load-bearing the system becomes Volume drops, or the team loses the person who runs it
Comms-heavy local services
bookings, missed calls, reminders
GoHighLevel Missed-call text-back, reminder ladders and two-way SMS with an owned contact record, natively (argued: G1·03 had zero enrollments and SMS was removed from the build). Assembling this from parts on the other three costs more and works less well. Exportability, and per-sub-account AI pricing The business's centre of gravity moves from conversations to systems integration
Choose by where the work happens. If it happens in the conversation, buy the platform that owns the conversation. If it happens in the data, buy the platform that gets out of the way, then decide separately whether anyone is there to run it.

8 · The finding that only an ecosystem produces

The client these four builds were written for sells software to a second kind of business: freight brokerages and 3PLs. They are in the same industry, adjacent in the same supply chain, and they need different automation stacks for structural reasons.

The software vendor's leads are digital-first and its automation's centre of gravity is data. A trial signup is a database row before it is a person. The work is enrichment, scoring, deduplication against an existing account table, provisioning into a product tenant, and keeping entitlements aligned with billing. Volume is high, per-lead urgency is moderate, and almost every system involved is one the company already owns and wants to keep owning. That points at Make or n8n.

The brokerage's leads are conversation-first and its automation's centre of gravity is the channel. A quote request is a phone call from a dispatcher who will call the next broker in ninety seconds if nobody picks up. The work is answering, capturing, routing to whoever covers that lane, and escalating when the SLA burns down. Volume is lower, per-lead urgency is extreme, and the systems involved are the phone, the text message and the calendar. That points at GoHighLevel.

The software vendor and its own customer needed different systems because one company's automation lives in its database and the other's lives in its phone.

Status of this section: the argument currently rests on the four spine builds plus the specification for the second client type. It is an argued conclusion, not a demonstrated one. If the optional second-client build lands (a quote-request router with an SLA timer), this section carries a demonstrated comparison instead.

9 · What would change these recommendationsEach of these, if it moved, would change a recommendation.

  • Zapier ships native retry with backoff (re-check on the day). Finding 11 weakens and the solo-operator recommendation gets stronger.
  • Make's free-tier scenario ceiling moves. It changes how the platform is evaluated and leaves its performance as it is.
  • GoHighLevel ships a per-workflow export path (none was found in this build). The lock-in objection largely dissolves and three rows of the matrix get easier to recommend.
  • n8n Cloud pricing moves. Cloud Starter listed at €20/month for 2,500 executions on 2026-10-05; a cheaper or free tier would weaken the maintenance objection.
  • Volume assumptions change. Every blended number would be a function of a lead mix, and none was measured. The formula in §4.1 lets a client re-run it with their own mix.
One limitation. This compares four implementations built by one person over four weeks, learning three of the four platforms at production depth for the first time in that period. Build times reflect that. A Make specialist would build the Make version faster. What this comparison does have that vendor-neutral listicles don't is that the same person built all four, to the same specification, and broke all four the same way.

10 · Evidence indexEvery claim in §2 and §5 resolves to an artefact, or is marked as not on disk.

Claim on this pageArtefactStatus
Four implementations, one specificationN1 canvas, M1 blueprint export, Z1 canvas, G1 canvas setCaptured; G1·01 canvases predate two later additions
Malformed payload caughtRun screenshots and logs on all fourCaptured
Duplicate caughtN1 and Z1 run screenshots; M1 verified in capture text and Data Store snapshot; G1 logsM1 screenshot absent; G1 Dup One, Dup Three and Fail One execution-log screenshots captured 2026-10-06
Timeout behaviour differsN1 3a run; M1 3a/3b described; G1 404 logPartial; M1 has no screenshot on disk
Meter per outcomeThe four capture filesCaptured; gaps shown as em-dashes
Time to first touchN1 #219 text, M1 duration text, G1 probe-5 hold-and-release logsCaptured; Zapier not measured
Export gap is real, on the plans usedN1 and M1 export files, the G1 export manifest, and the Zapier absence on the plan used (Zapier lists JSON export on Team and Enterprise plans, read 2026-10-10)Captured
GoHighLevel business-hours ruleFour B5 configuration screenshotsCaptured
The absent Zapier export on the plan used is itself evidence, and so is the GoHighLevel absence of a per-workflow file export. On the plans used, two platforms produce a machine-readable file; two do not.
Disclosed deviations, in one place. Zapier: parent never run live; probes 3 to 5 not applicable; SMS and enrichment removed. GoHighLevel: SMS removed; flat payloads; no enrichment; probe 3 email variant and the 40-day duplicate not run; trial account, so no wallet figure; prose referral: one run captured 5 Oct 2026 (halt for review; contact step errored because no mapped field had a value). Make: probe 3c not inducible. All four: probe 3 hit a different target on each platform, and no lead mix was measured. All builds are demonstration systems; N1 is the live self-hosted exception.
Four platform build sets feed this page: Scenario & Build Guide for Zapier, Make, n8n and GoHighLevel. Each contains the full spine build (Z1, M1, N1, G1) with its sixteen capture fields.

Published: 13 October 2026, from measured captures taken up to 5 October 2026. Corrected 22 October 2026: retry statements limited to the spine builds, with the M2 retry noted. Vendor facts verified 5 October 2026 against each vendor's pricing page: Zapier Free and Professional plans and overage behaviour, Make Free and Core, n8n Cloud tiers, and GoHighLevel plans and the 14-day trial. Re-read 13 October 2026 with no price changes (Zapier Free and Professional, Make Free and Core at $12 for 10,000 credits, n8n Starter €20 and Pro €50 billed annually, GoHighLevel Unlimited $297 and the 14-day trial). Not re-verified: Make and n8n limit behaviour and agent add-on pricing.

VERIFY-DAY-OF Pricing on this page has a shelf life measured in weeks. Every dollar figure carries the date it was read; where a vendor's terms have moved since, the meter row still holds and the price row does not.

Laneframe is a composite client. The builds are real demonstration systems, not client engagements, with one exception: the n8n spine build is a live self-hosted system and carries observed rather than staged numbers.

Want your next automation tested like this before your customers touch it?

Fix My Bottleneck