Skip to content

Case study · ERP integration

Contracts into the ERP in under 5 minutes.

Every contract finalized on the client's internal platform was typed again into the ERP, and robots sharing one login kept kicking each other off. We built a robot for the first problem and an orchestrator for the second.

Client
A Brazilian industrial construction groupPrecast concrete and construction · Name withheld
Period
July 2026 onward
Status
LiveSince September 2026
Result
156-274 sper contract with 2 to 6 items, in validationMeasuredValidation logs · July 9 to 14, 2026
Illustration: the orchestrator giving the ERP session to one robot at a time: the robot holding it, the robots waiting in line and the audit trail of each turn.
Illustrative data
The problem

The same contract, typed twice.

Every contract finalized on the client's internal platform was re-entered by hand in the ERP: supplier, line items with job-cost allocation, payment schedule, direct billing and the attachment.

There was a second problem. Several robots used the same ERP login, and they kept kicking each other out of the session.

Illustrative dataIllustration: a contract finalized on the client's platform being typed again in the ERP, and the session ending because another robot used the same login.
What we did

A robot for the contracts. One session at a time.

The contract robot checks the platform every 20 seconds. When it finds a new contract, it fetches the data through the platform's API, posts the contract in the ERP and sends the status back.

An orchestrator, built with FastAPI and SQLite, decides which robot gets the ERP session: one at a time, in order, with a record of every turn. Both run on a Linux VPS.

Illustrative dataIllustration: the contract robot picks up a new contract from the platform, gets its turn from the orchestrator, fills in the ERP screen by screen and sends the status back.
How it runs

From the platform to the ERP, and back.

Each new contract takes the same path, and waits its turn for the ERP session.

  1. 01

    Watch the platform

    Every 20 seconds, the robot checks the platform for new contracts.

  2. 02

    Fetch the data

    It pulls the contract data through the platform's API.

  3. 03

    Wait its turn

    It asks the orchestrator for the ERP session and waits in the queue.

  4. 04

    Post and report

    It posts the contract in the ERP and sends the status back to the platform.

Inside the orchestrator

  • FIFO queue

    Robots wait in line for the ERP session, first come, first served.

  • Lease and heartbeat

    A robot holds the session for a limited time and renews it while it works. If it stops responding, its turn expires.

  • Fencing token

    Every turn gets a new number, so the orchestrator turns away a robot whose turn has already expired.

  • Audit trail

    Every turn is recorded: which robot, when, and how it ended.

Stack

  • Python + Playwright (CDP)
  • Platform REST API
  • FastAPI
  • SQLite
  • Xvfb
  • systemd
  • Linux VPS
Results

Measured in validation, contract by contract.

Measured in the 5 postings completed during validation, in the production ERP, from July 9 to 14, 2026. The manual time is a team estimate and is labeled as one.

From the validation logs

  • 156-274 s

    per contract with 2 to 6 items

    Measured

    Validation logs · July 9 to 14, 2026

  • 5

    postings completed during validation in the production ERP, run from a local machine

    Measured

    Validation logs · July 9 to 14, 2026

The robot against manual entry

  • 2.6-4.6 min

    per contract for the robot, in validation

    Measured

    Validation logs · July 9 to 14, 2026

  • ≈45 min

    per contract by hand, for the same entry

    Team estimate

    Not timed

Production volume on the VPS is still being measured. No production number goes on this page until it is measured.

Limits and lessons

Validated, with production volume still being measured.

Limits

The times come from validation: 5 completed postings, run from a local machine against the production ERP, July 9 to 14, 2026. Validation had failures, which were fixed.

The robot has run on the VPS since September 2026, and its production volume is still being measured. The internal platform and its API belong to the client; our part is the robot and the orchestrator. The ≈45 min manual time is a team estimate; nobody timed it.

What we learned

Robots that share one login need a referee. A separate service with a queue and an audit trail makes every turn explicit and recorded.

Hold the shared login as briefly as possible: the robot fetches and prepares the data first, and only then asks for the session.

More case studies

Other projects we built.

  1. 2 h 42 min

    for 300 invoices, about 32 seconds each

    MeasuredExecution logs · May 8, 2026

    May to June 2026 · Invoice automation

    300 invoices posted into the ERP in 2 h 42 min

    A system migration left a backlog of outgoing invoices. Robots attached to the team's logged-in browser posted each one and checked it against its total.

    Read the case study
  2. 21 of 22

    weeks with the report delivered, June to October 2026

    MeasuredExecution logs · June to October 2026

    Since May 29, 2026 · Scheduled reports

    A weekly report of contracts about to expire

    Every Monday, a robot runs on its own: it signs in to the ERP, finds the supplier contracts ending within 15 days and emails the report.

    Read the case study
  3. 35

    redirect rules that send each old sports-portal address to its new page

    MeasuredServer configuration · October 31, 2026

    Since May 2026 · Club management

    One platform for a club's members, sports and management

    A club website with a member area on the club system's API, a chat, sports competitions, dashboards and a tournament site, built from May to October 2026. The old sports portal moved into the new website with page-by-page redirects, and its links kept working.

    Read the case study
  4. 8

    modules live, from sales to financial BI

    MeasuredClient portal · October 31, 2026

    Since June 2026 · Manufacturing operations

    An eight-module operations suite for a food manufacturer

    Sales, accounting, finance, production, maintenance, fleet, HR and financial BI modules, built from June to October 2026. Each module has its own database, and payables are read from the ERP the company already uses.

    Read the case study
  5. 30 days

    of nightly backups kept, each one verified automatically after it runs

    MeasuredServer configuration · October 31, 2026

    Since October 4, 2026 · Financial control

    Financial control for a notary office, where nothing is deleted

    Every payable and receivable goes in as a provision, an entry made before it is due, and is then settled in full or in part. Corrections and cancellations are logged with a reason, every change records who made it and when, and the database is backed up and verified every night.

    Read the case study

Free 30-minute automation assessment

Find the three repetitive tasksthat cost you the most.

In 30 minutes we map the three most expensive repetitive tasks in your operation and tell you what automating them would cost.