Skip to content
Apsan Works

Workflow Automation

The process that eats your week, running without you

Every company has a handful of processes held together by a person, a spreadsheet, and a recurring calendar reminder. They work, technically. They also cap how fast you can grow and break the moment that person takes a holiday.

What this looks like

Checkpoints, not a black box

Each stage is a durable checkpoint with its own failure handling. Confident cases go straight through; anything uncertain routes to a person instead of guessing.

IngestDocuments arrive from anywhereNormaliseEvery format becomes one shapeClassifyWhat kind of document is thisExtractFields pulled into a strict schemaValidateChecked against rules that don't guessAuto-completeHigh confidence · no touchReview queueFlagged for a person

The problem

Manual process is a tax you pay every single week

The cost is rarely one big number, which is why it survives so long. It is four hours here, a re-keyed record there, a report that is always two days stale. Add it up across a year and it is usually a headcount, spent on work nobody wanted to do in the first place.

Sound familiar?

  • A spreadsheet that only one person truly understands
  • The same data typed into two systems that do not talk
  • Reports assembled by hand on a fixed day every month
  • Work that stops entirely when one person is away
  • Errors found downstream, weeks after they were introduced

What we build

Workflow Automation, specifically

Document processing pipelines

Invoices, contracts, applications, statements, forms, pulled from email, storage, or an API, parsed with the layout intact, checked against your rules, and written straight into the systems that need them.

Data enrichment and cleanup

Deduplication, normalisation, entity matching, enrichment from outside sources. It runs continuously, so the cleanup never piles up into an annual project everyone dreads.

Multi-system orchestration

The glue between tools that were never designed to talk. Durable workflows with retries, idempotency, and dead-letter handling, so a third-party outage does not silently drop work.

Monitoring and alerting agents

Systems that watch a data source (a registry, a feed, a competitor, a regulator) and surface only what actually matters, with the context needed to act.

Automated reporting

Numbers pulled from every source, reconciled, and delivered as a live dashboard or a scheduled document. The monthly reporting scramble stops being an event.

Human-in-the-loop review

Full automation is not always the right answer. We build review queues that surface the uncertain cases to a person and let the confident majority through untouched.

How we work

The sequence that makes this ship

Every engagement follows the same spine. The order matters more than any individual step.

  1. 01

    Map what actually happens

    Not the documented process. The real one, including the workarounds. We sit with whoever runs it today and trace every input, decision, exception, and handoff.

  2. 02

    Cost the steps

    Time per run, frequency, error rate, and downstream cost of mistakes. This is what tells us which steps are worth automating and which are cheaper left alone.

  3. 03

    Automate the confident path

    The cases the rules handle cleanly go first, usually the large majority of volume. Exceptions keep routing to a person from day one, so nothing breaks during the transition.

  4. 04

    Run in shadow mode

    The pipeline runs alongside the manual process and the outputs get compared. Nobody switches over on faith; you switch when the numbers agree.

  5. 05

    Instrument and hand over

    Dashboards for throughput, failure, and cost. Alerting on anomalies. Documentation written for whoever inherits it, including how to turn it off.

Stack

Tools chosen per problem, not per habit

What we reach for most often on this kind of work. The right answer changes with the problem, and we will argue for a different one when it fits better.

  • Temporal
  • Inngest
  • Cloud Run
  • Postgres
  • BigQuery
  • Playwright
  • Vision models
  • Python
  • TypeScript

Evidence

Where we have done this

PropTech / Civic dataLive

Next Door Notice

A geospatial monitoring platform that watches every planning application in London and tells people when one lands near them.

Next.js 15Neon PostgresPostGISDrizzle
Read the case study
Media / AutomationIn development

AwesomeGene

A fully automated video production pipeline: one brief in, a finished, published video out, with no human in the middle.

PythonFastAPICeleryRedis
Read the case study
Sales / Internal platformInternal

Email Automator

A multi-step email outreach engine (sequencing, A/B variants, send-window throttling) with an MCP interface so an AI agent can operate it directly.

FastAPISQLiteAPSchedulerGmail API
Read the case study
AdTechIn development

AdSelf

A self-serve ad platform where advertisers fund and launch their own campaigns, with creative review as the one human checkpoint.

Next.jsTypeScriptDrizzleRecharts
Read the case study
Marketing / Internal platformInternal

WhatsApp Dashboard

A local-first WhatsApp campaign and CRM platform running two connector types behind one schema, so a number's connection method is a config value.

Next.jsFastifyPostgresDrizzle
Read the case study
Media / Creative automationLive

Video Pipeline (Stick dashboard)

A local production dashboard that takes a video from title idea to a scheduled YouTube upload, with every stage (script, voice, render, metadata) one click away.

FastAPIHTMXSQLiteKokoro TTS
Read the case study
Internal toolingInternal

Commission Tracker

A reconciliation dashboard that replaced a spreadsheet nobody could fully trust.

Next.js 15TypeScriptNeon PostgresDrizzle
Read the case study

Further reading

On this subject

Email Outreach at Scale: Why the State Machine Is the Product

Outreach at volume is a state machine problem. Tracking each lead's position, enforcing send limits, and routing replies correctly are the real work.

Durable Pipelines: Why One Retry Policy Is Not Enough

When a pipeline chains slow stages, retrying from the start discards prior work. Stage boundaries need to be checkpoints, not just function calls.

Automated Reporting: Turning Scattered Numbers Into One You Trust

The monthly reporting scramble is a trust problem, not a scheduling one. Automating the pull without the trust just delivers the wrong number faster.

Data Enrichment Automation: Keeping Two Systems From Quietly Disagreeing

Enrichment is the easy part. Deciding which record is correct when two sources disagree, automatically and at volume, is where these systems earn their keep.

Building a Monitoring Agent That Does Not Cry Wolf

The hard part of watching a data source is deciding which changes are worth telling anyone about, not catching every single one.

Zapier, n8n, or Custom: How to Actually Choose

No-code automation is the right answer more often than agencies admit, and the wrong answer in five specific situations. Here is where the line falls.

Automating Document Processing With AI: A Practical Guide

Invoices, contracts, applications, claims. The architecture that works, the failure modes nobody warns you about, and how to know when it is ready.

The Spreadsheet Ceiling: Knowing When You Have Hit It

Spreadsheets are excellent software. But there is a specific point where they start costing more than they save. Here is how to recognise it.

Questions

Straight answers

How is this different from Zapier or n8n?

Those are excellent for connecting two systems with predictable, structured data, and we will tell you when they are the right answer. Custom becomes worth it when the work needs judgement on unstructured input, when the branching logic exceeds what a visual builder stays readable at, when volume makes per-task pricing painful, or when you need real error handling and observability.

What if our process changes constantly?

That is an argument for automating it well rather than not at all. We separate the rules from the plumbing so business logic can change without touching the pipeline. If the process changes weekly because it is genuinely unsettled, we would tell you to wait.

Will this replace people on our team?

In practice it moves them off the repetitive part. Every engagement we have run ended with the same people handling exceptions, judgement calls, and the work they were actually hired for, at higher volume than before.

How do we know it is not making mistakes silently?

Shadow mode during rollout, then continuous monitoring: throughput, error rates, confidence distributions, and anomaly alerts. Every run is logged and reconstructable. Silent failure is the specific thing these systems are designed to prevent.

What does a typical automation project cost?

It is scoped against what the manual process costs today. If a process consumes twenty hours a week, the arithmetic is usually straightforward. We scope a fixed-price discovery first so you can make that call on real numbers rather than an estimate.

Tell us what is slowing you down

A short conversation is usually enough to tell whether this is a build, an automation, or something you should not do at all. We will tell you which.