How we test our recipes

Every number on this page is computed from our published test results file, generated Oct 28, 2026 (2026-10-28T17:17:33+01:00). This page describes what we ran, where it ran, and what broke. It isn't a performance claim: a passing test means the workflow did what we expected against our test setup, not that it will work unchanged in your business.

Most tests ran against mocks, not the real services. Of 211 test scenarios, 202 ran against a local mock server that stands in for services like Twilio, Jobber, Clio, Open Dental and QuickBooks. The other 9 called the real Stripe API in test mode (no real money moves), in Job complete → invoice → payment-link reminder ladder and Invoice reminders with pay links + trust retainer top-up alerts (Clio, Stripe, LawPay); the other services in those runs were still mocked.

The testbed

The numbers

TradeRecipesScenarios passedAgainst live Stripe test modeKnown limitations listed
HVAC & Plumbing555 / 55816
Law Firms538 / 38123
Dental Practices529 / 29024
Real Estate Agents536 / 36021
Accounting & Bookkeeping526 / 26022
Roofing Contractors527 / 27027
All30211 / 2119133

Source: data/recipes.json, generated 2026-10-28T17:17:33+01:00, built from each recipe's latest published result file. Earlier failed runs aren't in these totals; they're listed below. A shared hardening suite (forged-webhook rejection, Twilio signatures, Clio and Jobber token refresh, Clio rate-limit retries) also runs but isn't counted here.

Failure modes we found

The most useful output of testing is the list of things that go wrong. Each recipe page has a “Known limitations” list; together they hold 133 items. The recurring kinds:

Flaky and failed runs

These are from our run logs. The published totals above use each recipe's latest result file, so a recipe can show a pass there and still appear here.

When (CET)WhatResultWhat happened
Oct 28, 2026, about 02:27voice-memo-to-invoice4 of 5The local AI model listed “flashed tank” (a speech-to-text slip for “flushed the tank”) as an unpriced extra item instead of matching it to the water-heater flush in the price book. The next run passed 5 of 5.
Oct 28, 2026, about 17:30voice-memo-to-invoice3 of 5The local AI model left expected line items out of two draft invoices (memos M2 and M3). An earlier run the same day passed 5 of 5.
Oct 28, 2026, 18:08voice-memo-to-invoice4 of 5For the kitchen-sink memo (M2), the speech-to-text output skipped part of what the technician said, and the draft invoice left out the P-trap and the labor hours. The test caught it because it checks every expected item and the hours.
Oct 28, 2026, about 01:55real-estate-past-client-anniversarytest bugOur test grabbed the unsubscribe link from whichever email arrived first, and the order isn’t fixed. We fixed the test to pick the right recipient’s link; the workflow itself was fine.
Oct 28, 2026, about 01:55HVAC suites using the AI modelfailedThe local AI model server had stopped, so every AI step failed. We restarted it and reran.
Oct 28, 2026whole suitefalse failuresTwo test runs overlapped. They share one n8n, one mock server and one local AI model, and the second run reset the mock log under the first, which caused 3-of-5 flakes. We added a lock so only one full run happens at a time.
Oct 28, 2026, about 17:45whole suitetimeoutOne full run hit our 600-second limit during the final phase; 30 of 31 suites had passed.

The voice-memo recipe is the flakiest one we publish: it chains speech-to-text and a small AI model, and it doesn't pass every run. The workflow writes a draft note for a person to approve before billing, not an invoice.

Download the test log

One row per scenario: recipe, trade, scenario, result, run date, mock or live, result file, and that recipe's known limitations.

What we don't test

Found something wrong? Send a correction. More about us: About and Matron.