CASE FILE 06/13CLASS: SAMPLE BUILDDATA: REALISTIC, NOT CLIENTTYPE: Workflow automation
Sample build: realistic data, built to show how I'd handle this work. Not client work.
Sample buildWorkflow automation
Booking form to CRM, invoice and Slack in one workflow (n8n)
12 of 14 test bookings carried from form to CRM, invoice and Slack, 2 rejected with a reason
- 14test submissions
- 12processed end to end
- 2rejected with a reason
- 4,089.80invoiced in the test run
01Summary
- A booking form feeds one n8n workflow (14 nodes) that validates, prices, finds or creates the CRM contact and raises the invoice.
- In the test run 12 of 14 bookings went through end to end and 2 were rejected with a reason.
- 4,089.80 was invoiced across 7 contacts, with a Slack message for each booking.
In the test run 12 of 14 bookings went through end to end and 2 were rejected with a reason.
Key point, computed from the sample files
02The scenario
In this scenario every booking is handled three times by hand: once in the inbox, once in the CRM and once in the invoicing tool. Pricing mistakes and missed messages are the usual result.
Source: sample files
03Issues in the data
Source: sample files
04How I approached it
- A webhook that receives the booking form and a code step that validates and prices it from a rate card.
- Find-or-create logic for the CRM contact, so returning customers are not duplicated.
- Invoice creation and a Slack message with the key details; a review alert for rejected submissions.
- An n8n export with 14 nodes, tested against local stand-ins for the CRM, invoicing and Slack.
Source: my design and the sample files
05How this applies to your business
- Assess and designMap the current process, size the gaps from your own data, agree the design and a written scope.
- Build and testBuild in your own tools with the checks built in, then run real cases end to end.
- Document and hand overSOPs, a walkthrough and a handover, so your team runs it without me.
| Activity | Business owner | Specialist (me) | Your team |
|---|---|---|---|
| Agree the rate card | A | C | R |
| Build and test the workflow | A | R | I |
| Handle review alerts | I | C | R |
| Change prices | A | C | R |
Source: sample plan
06Controls and checks
| Check | What it catches | Status |
|---|---|---|
| Valid bookings processed end to end | Steps that fail silently | 12 of 14 |
| Invalid email rejected | Contacts that cannot be invoiced | PASS |
| Unknown service rejected | Invoices priced off the rate card | PASS |
| Repeat customers reuse their contact | Duplicate CRM contacts | PASS |
Source: sample files (Checks / Controls tab, test output or run log)
07What the files show
- 14test submissions
- 12processed end to end
- 2rejected with a reason
- 4,089.80invoiced in the test run
Source: sample files, measured by script. Sample data, not a client result.
- 12 accepted submissions created 12 unique invoices for 7 contacts (returning customers matched).
- 2 submissions were rejected with a clear reason (bad email, service not on the rate card).
- The run log in the download shows every request and response.
08Risks and how the build handles them
| Risk | Mitigation built in |
|---|---|
| Bad data creates junk records | Validation step rejects with a reason before any write |
| Duplicate contacts | Returning customers are matched to their existing contact before one is created |
| Workflow stops unnoticed | Failures post a review alert; every run is logged |
Source: sample design
09Appendix: files
A. Screenshots of the deliverable

Exhibit 8: Workflow diagram: form webhook, validate and price, find or create CRM contact, create invoice, Slack message, review alert
Source: sample files
const errors = [];
const email = String(b.email || '').trim().toLowerCase();
if (!/^[^@\s]+@[^@\s]+\.[a-z]{2,}$/.test(email)) errors.push('A valid email address is required');
const titleCase = s => String(s || '').trim().toLowerCase().replace(/\b[a-z]/g, c => c.toUpperCase());
const name = titleCase(b.name);
if (!name) errors.push('Name is required');Source: 01_validate.js
B. Downloadable files
| File | What it is | Size |
|---|---|---|
| booking-crm-invoice-slack.n8n.json | n8n workflow export (import into n8n) | 16.7 KB |
| 01_validate.js | Code node source | 2.7 KB |
| 02_build_invoice.js | Code node source | 998 B |
| 03_slack_message.js | Code node source | 1.1 KB |
| run-log.txt | Run log: 14 test submissions and each response | 1.3 KB |
| test-submissions.json | Test submissions used for the run | 5.4 KB |
Sample build: realistic data, built to show how I'd handle this work. Names are placeholders and no client data is used.
Have a similar problem in your business?
Hire me on Upwork (opens in a new tab)
