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
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.
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.
From the platform to the ERP, and back.
Each new contract takes the same path, and waits its turn for the ERP session.
- 01
Watch the platform
Every 20 seconds, the robot checks the platform for new contracts.
- 02
Fetch the data
It pulls the contract data through the platform's API.
- 03
Wait its turn
It asks the orchestrator for the ERP session and waits in the queue.
- 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
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
MeasuredValidation logs · July 9 to 14, 2026
5
postings completed during validation in the production ERP, run from a local machine
MeasuredValidation logs · July 9 to 14, 2026
The robot against manual entry
2.6-4.6 min
per contract for the robot, in validation
MeasuredValidation logs · July 9 to 14, 2026
≈45 min
per contract by hand, for the same entry
Team estimateNot timed
Production volume on the VPS is still being measured. No production number goes on this page until it is measured.
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.
Other projects we built.
2 h 42 min
for 300 invoices, about 32 seconds each
MeasuredExecution logs · May 8, 2026Read the case studyMay 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.
21 of 22
weeks with the report delivered, June to October 2026
MeasuredExecution logs · June to October 2026Read the case studySince 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.
35
redirect rules that send each old sports-portal address to its new page
MeasuredServer configuration · October 31, 2026Read the case studySince 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.
8
modules live, from sales to financial BI
MeasuredClient portal · October 31, 2026Read the case studySince 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.
30 days
of nightly backups kept, each one verified automatically after it runs
MeasuredServer configuration · October 31, 2026Read the case studySince 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.
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.