Skip to main content

The work, step by step.

One in-house system crews use every day, two in-house automations, and a set of working example builds. Every workflow diagram below is drawn from the real thing.

Case study

Every van leaves loaded, and the office knows by 8 AM.

A phone checklist and a live office board that replaced a 3-page paper form at the concrete floor coating company where Max runs operations.

of paper per van, per day, replaced
3pages
became items the crew actually counts
38tick boxes
to scope, build and launch it
6days

Read the case study

In-house automations

Built for the same concrete floor coating company, where the paperwork is real and mistakes cost real money.

Supplier invoices, read and checked into a sheet

Supplier invoices arrive by email as PDFs. Each one is read, and every line item, plus shipping and tax, becomes a row in the invoice sheet.

The detail that matters: Nothing is written unless the rows add up to the invoice total. If they don’t, or the PDF can’t be read, a review email goes to the office instead.

Runs on: Gmail, Claude, Google Sheets

New InvoiceEmailSplit PDFAttachmentsRead PDF TextExtract InvoiceFieldsTotalsReconcile?Build SheetRowsAppend toInvoice SheetAlert: TotalsMismatchAlert: ParsingFailedClaude viaOpenRouter
Scroll sideways to see every step.Starts the workflowAI stepRegular step
  1. New Invoice Email
  2. Split PDF Attachments
  3. Read PDF Text
  4. Extract Invoice Fields
  5. Totals Reconcile?
  6. Alert: Parsing Failed
  7. Build Sheet Rows
  8. Alert: Totals Mismatch
  9. Append to Invoice Sheet

A monthly inventory report that builds itself

Someone uploads the month’s stock movement report in a simple form. A new tab named for the month appears in the inventory sheet.

The detail that matters: AI reads the lines, but plain code does all the adding, so the AI never totals anything. If a line is missing it refuses to write, and re-uploading a month makes a new tab instead of overwriting.

Runs on: n8n form, GPT-5 mini, Google Sheets

Upload themovement reportExtract PDFTextParse LineItems (AI)Build ReportCreate MonthTabTab Exists -Create DatedTabPrepare RowsWrite Rows toTabShow ResultNew TabCreated?GPT-5 mini(OpenRouter)Line Item Schema
Scroll sideways to see every step.Starts the workflowAI stepRegular step
  1. Upload the movement report
  2. Extract PDF Text
  3. Parse Line Items (AI)
  4. Build Report
  5. Create Month Tab
  6. New Tab Created?
  7. Tab Exists - Create Dated Tab
  8. Prepare Rows
  9. Write Rows to Tab
  10. Show Result

Example builds

Working demos built to show a pattern. They are examples, not client results, and they run on sample data where a live account would go.

Everyday questions answered from approved replies

Emails asking the usual questions get the answer the business already wrote. Anything else stays in the inbox for the team.

The detail that matters: The AI only picks which approved question an email matches. The reply is sent word for word from a table, so it can never invent an answer.

Runs on: Gmail, n8n Data Table, AI label only

Run the demoSample emailfrom a prospectMatch it to oneapprovedquestionIs it aconfidentmatch?Fetch thestudio'sapproved answerSend theapprovedanswer, word f…Leave it in theinbox for theteamThe model thatreads the email
Scroll sideways to see every step.Starts the workflowAI stepRegular step
  1. Run the demo
  2. Sample email from a prospect
  3. Match it to one approved question
  4. Is it a confident match?
  5. Fetch the studio's approved answer
  6. Leave it in the inbox for the team
  7. Send the approved answer, word for word

Support emails triaged, with a person approving every ticket

Each new support email is checked, de-duplicated and drafted into a ticket, then sent to Slack for approval.

The detail that matters: Nothing is created until a person clicks approve. Unreadable emails and off-spec AI answers are parked for manual triage, never lost.

Runs on: Gmail, Claude Haiku, Slack

New supportemail (Gmail)Run the testset manually5 samplesupport emails(test set)Normalize theemail into oneshapeIs the emailusable?Quarantine theunusable emailDrop repeatsinside thisbatchAlready triagedin an earlierrun?Skip: alreadyin the queueNew email - notseen beforeClassify anddraft theticket (AI)Manual triage -AI wasunavailableIs the AIoutput in spec?Manual triage -output was offschemaBuild the draftticketSave the draftas awaitingreviewAsk a human toapprove theticketRecord:reviewer couldnot be reachedApproved?Mark the ticketapprovedCreate theticket in yourhelpdeskMark the ticketrejectedTriage model -Claude Haiku 4.5via OpenRouter
Scroll sideways to see every step.Starts the workflowAI stepRegular stepSwitched off until an account is connected
  1. Run the test set manually
  2. 5 sample support emails (test set) (switched off)
  3. New support email (Gmail)
  4. Normalize the email into one shape
  5. Is the email usable?
  6. Drop repeats inside this batch
  7. Quarantine the unusable email
  8. Already triaged in an earlier run?
  9. New email - not seen before
  10. Classify and draft the ticket (AI)
  11. Skip: already in the queue
  12. Is the AI output in spec?
  13. Manual triage - AI was unavailable
  14. Build the draft ticket
  15. Manual triage - output was off schema
  16. Save the draft as awaiting review
  17. Ask a human to approve the ticket
  18. Approved?
  19. Record: reviewer could not be reached
  20. Mark the ticket approved
  21. Mark the ticket rejected
  22. Create the ticket in your helpdesk (switched off)

Documents read into a table, with the figures checked

Invoices and documents arriving as PDFs or pasted text are read into one operations table.

The detail that matters: Subtotal plus tax must equal the total, and scanned PDFs with no text are stopped before AI can guess at them. Anything that fails is held, not written.

Runs on: Gmail, Claude Sonnet, n8n Data Table, Slack

New documentemail (Gmail)Run the sampledocumentsmanually3 sampledocuments (testset)Is there a PDFattached?Read the textout of the PDFUse the emailbody as thedocumentPut everydocument intoone shapeIs there enoughtext to read?Hold: nothingreadable inthis documentDrop repeatsinside thisbatchAlreadyimported in anearlier run?Skip: alreadyin the tableNew document,not importedbeforeRead the fieldsoff thedocument (AI)Hold: thereader wasunavailableDo the figuresadd up?Hold: thefigures do notreconcileBuild the rowWrite it to theoperationstableAlso write itto your Excel /Google SheetAlso write itto yourdatabaseFlag it inSlack for ahumanReading model -Claude Sonnet 4.5via OpenRouter
Scroll sideways to see every step.Starts the workflowAI stepRegular stepSwitched off until an account is connected
  1. New document email (Gmail)
  2. Run the sample documents manually
  3. Is there a PDF attached?
  4. Read the text out of the PDF
  5. Use the email body as the document
  6. 3 sample documents (test set)
  7. Put every document into one shape
  8. Is there enough text to read?
  9. Drop repeats inside this batch
  10. Already imported in an earlier run?
  11. New document, not imported before
  12. Read the fields off the document (AI)
  13. Hold: nothing readable in this document
  14. Skip: already in the table
  15. Do the figures add up?
  16. Build the row
  17. Hold: the figures do not reconcile
  18. Hold: the reader was unavailable
  19. Flag it in Slack for a human
  20. Write it to the operations table
  21. Also write it to your Excel / Google Sheet (switched off)
  22. Also write it to your database (switched off)

New leads into the CRM in seconds, with an alert

Form leads are checked, matched or created in HubSpot, and the owner hears about them by Slack and email straight away.

The detail that matters: If the CRM is down, the form gets a clear error back instead of the lead quietly disappearing.

Runs on: Web form, HubSpot, Slack, Gmail

Lead FormSubmissionRun Demo LeadSample Lead(Demo)Normalize LeadLead Is Valid?Respond:Invalid LeadFind ExistingContactContact Exists?Update ExistingContactCreate NewContactMerge CRMResultBuild LeadSummaryNotify SlackEmail OwnerText OwnerMergeNotificationsRespond:SuccessRespond: CRMUnavailable
Scroll sideways to see every step.Starts the workflowAI stepRegular stepSwitched off until an account is connected
  1. Lead Form Submission
  2. Run Demo Lead
  3. Sample Lead (Demo)
  4. Normalize Lead
  5. Lead Is Valid?
  6. Find Existing Contact
  7. Respond: Invalid Lead
  8. Contact Exists?
  9. Update Existing Contact
  10. Create New Contact
  11. Merge CRM Result
  12. Respond: CRM Unavailable
  13. Build Lead Summary
  14. Notify Slack
  15. Email Owner
  16. Text Owner (switched off)
  17. Merge Notifications
  18. Respond: Success

Leads scored, with a first reply drafted

Each new lead is scored and gets a drafted first email based on what they actually wrote. Cold leads stop there.

The detail that matters: Sales gets the draft in Slack to check and send. Nothing goes to a customer automatically.

Runs on: AI scoring, Slack

Run the demoSample newleadsScore the leadand draft afirst emailSkip cold leadsSave lead andscore toActiveCampaignSend sales thelead and draftemailScoring model
Scroll sideways to see every step.Starts the workflowAI stepRegular stepSwitched off until an account is connected
  1. Run the demo
  2. Sample new leads
  3. Score the lead and draft a first email
  4. Skip cold leads
  5. Save lead and score to ActiveCampaign (switched off)
  6. Send sales the lead and draft email

A morning summary written for each client

Every morning a short status message is written for each client from their numbers, in their own language, ready to send by WhatsApp.

The detail that matters: A failure for one client is logged and the rest of the run carries on.

Runs on: GPT-4.1 mini, WhatsApp (switched off in the demo)

Run the morningpulseTwo samplebookkeepingclientsWrite theclient messageSend theWhatsAppmessageLog thedeliveryLog the failureand keep goingGPT-4.1 Mini viaOpenRouter
Scroll sideways to see every step.Starts the workflowAI stepRegular stepSwitched off until an account is connected
  1. Run the morning pulse
  2. Two sample bookkeeping clients
  3. Write the client message
  4. Send the WhatsApp message (switched off)
  5. Log the failure and keep going
  6. Log the delivery

Want one of these for your business?

Tell us what eats your week on a free 30-minute call.

Book a free call