The short answer: use RPA when the process is rule-bound, stable, and high-volume, and the only reason a human touches it is that two systems refuse to talk to each other. Use an AI agent when the process requires reading unstructured input, judging ambiguous cases, or deciding what to do next based on context that cannot be enumerated in advance. If a competent new hire could follow a one-page checklist and produce identical output every time, that is RPA territory. If the new hire would need a month of exposure to the business before their judgment was trustworthy, that is agent territory — and quite possibly a process you should not automate end to end at all.
Most enterprise workflows are not purely one or the other. A typical invoice-to-payment flow has a messy reading step (the invoice arrives as a PDF, a scan, or an email body), a judgment step (does this match a purchase order, and if not, who should decide?), and a deterministic step (post the approved record to the ERP with exact field mappings). The reading and judgment belong to a model; the posting belongs to a deterministic integration. The teams that get burned are the ones that force the whole chain into a single tool because that tool was already licensed.
Where deterministic RPA still wins
RPA gets a bad reputation because of how it has been sold, not because of what it does. As a category, it is still the right choice under conditions that are easy to state:
- The rules are complete and written down. Every branch in the process can be expressed as a condition on structured data. There is no residual "and then you check with Maria in Treasury."
- Inputs are already structured. Fixed-format files, database rows, API responses, spreadsheet columns in known positions.
- The cost of a wrong action is high and the cost of a stopped action is low. Payment execution, ledger postings, provisioning, regulatory filings. You want a system that fails loudly rather than one that improvises.
- Volume is high and variation is low. The economics of deterministic automation come from repetition. A thousand identical transactions a day is the ideal shape.
- You need to explain exactly what happened. A deterministic bot produces the same output for the same input, forever, and the logic is auditable line by line. That matters to internal audit in a way that "the model decided" does not.
There is a second, less obvious advantage: deterministic automation is cheap to run per transaction and its cost does not scale with how hard the thinking is. Model inference costs money on every call and gets more expensive as you give the model more context. For a high-volume, low-judgment step, running a model is paying for capability you are not using.
Where model-based agents win
Agents earn their place wherever the input is unstructured or the path through the process is not knowable in advance. Concretely:
- Reading documents that arrive in arbitrary formats. Supplier invoices, claims packets, contracts, remittance advice, lab reports, inbound email. The same logical field appears in a different place in every one. This is the core of our document and data intelligence work.
- Classification and routing where the categories are fuzzy. Deciding whether a customer message is a billing dispute, a cancellation risk, or a product question — and what evidence supports that call.
- Exception handling. Most of the labor in a mature operation is in the exceptions, not the happy path. An agent can read the exception, gather the relevant records, propose a resolution, and hand a human a decision instead of a research project.
- Multi-step work with a variable path. "Reconcile this discrepancy" may require checking three systems in an order that depends on what the first check returns. Encoding every path as rules is possible in principle and miserable in practice.
- Drafting and summarizing. Responses, case notes, internal summaries — anything where the output is language and a human reviews it.
The trade is that agents are probabilistic. The same input can produce a slightly different output. That is acceptable when a human reviews the output, when the action is reversible, or when you have a deterministic validation layer behind the model that rejects anything out of bounds. It is not acceptable when the agent's output goes straight into a system of record with no check.
Why screen-scraping breaks
The most common failure mode in first-generation automation programs is a bot driving an application's user interface — clicking coordinates, reading pixels, tabbing through fields. It works in the demo and degrades from there, for structural reasons:
- The UI is not a contract. Vendors change layouts, rename fields, insert modals, and roll out A/B tests without notice. An API has versioning and deprecation policy. A screen has neither.
- Timing is unstable. Bots wait fixed intervals for elements that load in variable time. Under load, the wait is too short; the bot acts on a page that has not finished rendering.
- Failure is silent and partial. A UI bot that loses its place mid-sequence may have already committed half a transaction. Reconciling that afterward is often more work than the bot saved.
- Environments drift. Browser updates, screen resolution, certificate prompts, session timeouts, MFA challenges. Every one of these is a production incident for a UI bot and a non-event for an integration.
- Credentials live in the wrong place. UI automation usually means a service account with a human's permissions logging into a human's session. That is a harder story to tell your security team than a scoped API credential. We write about how we handle this in our approach to security.
Adding an AI model to a screen-scraping bot does not fix this. A vision model that finds the "Submit" button is more resilient to layout changes than coordinate clicking, which is a real improvement — but it is still operating against an uncommitted interface, still subject to timing, and now slower and more expensive per action. Use UI automation when there is genuinely no other door into the system: a vendor product with no API, a mainframe green screen, a legacy application nobody can modify. Treat it as a bridge with a known expiry, not an architecture.
The hybrid architecture that actually holds up
The pattern we build most often separates the process into layers with different reliability characteristics and different failure behavior.
An ingestion layer takes whatever arrives — email, portal download, SFTP drop, API webhook — and normalizes it into a single internal representation. This layer is deterministic. It does not interpret; it collects and timestamps.
An understanding layer uses models to turn unstructured content into structured fields with confidence signals attached. This is where extraction, classification, and entity resolution happen. Its output is a proposal, not a fact.
A validation layer is deterministic and non-negotiable. It checks the model's output against business rules, reference data, and tolerances: does this vendor exist, does the math add up, is this amount within the approval band, does the date make sense. Anything that fails goes to a human queue with the specific reason attached. This layer is the reason the architecture is trustworthy — it means a model error becomes a routed exception rather than a bad transaction.
An action layer writes to systems of record through APIs, with idempotency keys so a retry cannot double-post. This layer is deterministic and should be boring.
An observability layer records every input, every model output, every rule decision, and every action, linked by a case identifier. When someone asks in six months why a particular transaction was handled the way it was, you can answer in minutes.
The important property of this design is that the probabilistic part is contained. Models do what models are good at — reading and judging — and never get direct write access to anything that matters. That is how we build intelligent process automation that operations teams are willing to leave running unattended.
How to choose, per process
Run each candidate process through these questions in order. The first one that gives a clear signal usually settles it.
| Question | If yes | If no |
|---|---|---|
| Are the inputs already structured? | Lean deterministic | You need a model somewhere in the chain |
| Can every decision rule be written down completely? | Lean deterministic | Agent for the judgment step, rules for the rest |
| Is there an API for every system involved? | Build integrations | Scope the UI-driven parts separately and price the fragility |
| Is a wrong action expensive or hard to reverse? | Human in the loop, deterministic write path | Agent can act, with logging |
| Is the process itself stable? | Automate now | Fix the process first |
When the answer is "don't automate this yet"
We turn work down, or push it back a quarter, when we see these signals. Saying so early is cheaper than discovering it during a build.
- Nobody can describe the current process consistently. If three people who do the job daily describe it three different ways, you do not have a process, you have a set of habits. Automating it freezes the disagreement into code.
- The volume does not justify anything. A task done a handful of times a month by someone who is good at it is usually not worth a build, a deployment pipeline, and an on-call rotation.
- The upstream data is broken. If the vendor master is full of duplicates, automation will process duplicates faster. Fix the source first — or make cleaning it the project.
- The system is being replaced. If the ERP migration lands next year, building against the outgoing system buys a few months of benefit and a full rebuild.
- The real bottleneck is a decision, not the work. If cases sit for days waiting for someone to approve them, shaving minutes off processing changes nothing. Fix the approval path.
- There is no owner. Automation needs someone accountable for the exception queue and the rules. Without that, it quietly degrades and everyone routes around it.
What drives cost and effort in each
Neither approach has a fixed price, but the drivers differ in ways worth knowing before you budget.
Deterministic automation costs are dominated by integration surface: how many systems, how well documented their APIs are, how much reference data has to be mapped, and how many edge cases the business actually has versus claims to have. Build effort is front-loaded; the ongoing cost is maintenance when connected systems change. Per-transaction running cost is negligible.
Agent-based automation costs are dominated by evaluation. Building a first version that works on sample documents is fast. Getting to a version you trust unattended means assembling a representative test set, measuring accuracy by field and by document type, tuning, and setting confidence thresholds that route the right cases to humans. That evaluation work is the project. Running cost is per transaction and scales with volume and context size, so it belongs in the operating budget rather than the capital line. Our delivery approach puts the evaluation set in place before the build, because it is the only honest way to know when something is done.
For a hybrid, the integration effort and the evaluation effort both apply, offset by the fact that the deterministic validation layer lets you ship at a lower model accuracy than you would otherwise need — exceptions route to people instead of causing errors. If you want to sanity-check whether a given process is worth the effort before talking to anyone, our value calculator works through the volume and handling-time inputs that drive the answer.
A practical sequence
Start with the process, not the tool. Map where the time actually goes — usually it is a reading step and an exception queue, not the keystrokes. Automate the deterministic spine first so you have a reliable path to act on. Then add the understanding layer in front of it, with a human reviewing output until the numbers hold. Then raise the confidence threshold for straight-through processing one category at a time, with the ability to lower it again. Processes that involve customer contact often follow a similar arc in our AI customer operations work: draft-and-review first, autonomous handling for narrow categories once the evidence supports it.
If you have a specific process in mind and want a straight answer about which approach fits — including whether it is worth automating at all — talk to us. A short scoping conversation about volumes, systems, and where the exceptions come from is usually enough to tell you.
Questions we get asked about this
No. Deterministic automation is still the right answer for rule-bound, high-volume steps where the same input must always produce the same output. What is obsolete is the assumption that a single RPA platform should handle the reading and judgment parts of a process too. The category is narrowing, not disappearing.
Sometimes, and it is often the fastest route to value. If your bots break mostly on document variation or classification, putting a model in front of them solves the real problem. If they break because they drive fragile user interfaces, adding a model makes them slower without making them reliable — that needs an integration, not a better reader.
Do not let the model write directly to a system of record. Put a deterministic validation layer between the model's output and any action: business rules, reference-data checks, tolerance bands, approval limits. Anything that fails validation becomes a routed exception with a reason attached rather than a posted transaction.
Then UI automation may be the only option, and it can be the right call for a legacy or vendor system nobody will change. Treat it as a bridge with a known expiry: isolate it behind an internal interface so the rest of your architecture does not depend on its details, budget for ongoing maintenance, and revisit it whenever the vendor ships an API.
There is no universal threshold, and chasing one is the wrong frame. What matters is the confidence threshold at which you let a case pass without review, and whether the exception queue at that threshold is a volume your team can absorb. Start conservative with most cases reviewed, then raise the threshold category by category as your evaluation data supports it.
Someone on the business side has to own the exception queue and the rules, and someone technical has to own the integrations and model performance. Automation degrades quietly when connected systems change or input patterns drift. If no one is accountable for watching it, the process will slowly revert to manual without anyone deciding that it should.
It depends far more on your integration surface and data quality than on the automation itself. Processes touching one or two well-documented systems with clean reference data move quickly; those touching half a dozen systems, some without APIs, take considerably longer. We scope the integration and evaluation work separately because they have different risk profiles.
Process first, always. Platform-first programs tend to pick processes that suit the tool rather than processes that matter, which is how organizations end up with dozens of bots automating trivial work. Once you know the shape of two or three real processes, the tooling decision is usually straightforward and sometimes turns out not to need a platform at all.
Bring us the process you were reading this for
Confidential assessment led by senior engineers. No obligation.
