Automate a legacy Windows app with no API

Send one HTTP call or MCP tool call with the task in plain English. Sai opens the desktop app on a Windows computer, works it from the screen like a person, asks before anything it should not do alone, and returns the result. Once a run works, save it as code and replay it with new inputs.

Paste into Sai, or send it from your agent
Use Sai to enter this week's vendor bills into our desktop accounting app. It has no API and no import.

Computer: the Windows cloud computer where "Acme Ledger" is installed.
Input: bills.csv (attached). Columns: vendor, bill_number, date, due_date, amount, gl_account.
Sign-in: send me an approval link for the Acme Ledger login. Don't ask for the password in chat.

For each row:
1. Open Vendors > Enter Bills and pick the vendor by name. If the vendor doesn't exist, skip the row and note it.
2. Fill bill number, dates, amount and GL account exactly as in the CSV.
3. Before you click Save for the first bill, show me the filled form and wait for my approval. After that, save the rest without asking.
4. If a bill number already exists, don't create a second one. Mark the row "duplicate".

When you finish, give me a table with every row: saved, skipped or duplicate, with the reason and a screenshot of each error.
Then save these steps as a replayable skill named enter_vendor_bills, with the CSV file as its input.

Watch it run

What Sai does with this prompt

To automate a legacy Windows app that has no API, you need something that can use the app the way a person does: read the screen, click, type and check the result. Sai does that on a Windows computer, from one HTTP call or MCP tool call your agent makes. It asks before risky steps, and a run that worked can be saved as code and replayed with new inputs.

What a Windows desktop automation API is

A Windows desktop automation API lets your code drive a desktop application through its user interface instead of through a programming interface of its own. You send the task, the API operates the app's windows, fields and menus, and you get back the result.

This matters because most business software was never connected to anything. In MuleSoft's 2025 Connectivity Benchmark, the average enterprise ran 897 applications and only 29% of them were integrated (MuleSoft, 2025). Old Windows clients for accounting, ERP, claims and scheduling make up a large part of that gap.

Why legacy Windows apps resist automation

  • No API and no import. The only way in is the screen: the vendor never shipped an API, or the version you run predates it.
  • Controls that UI Automation cannot see. Standard Win32, WinForms and WPF controls are exposed to Microsoft UI Automation, but custom controls need a provider written by the app's developer (Microsoft). Owner-drawn grids and third-party control suites often show up as one blank pane.
  • Frameworks that need their own bridge. pywinauto's win32 backend covers MFC, VB6 and VCL apps and its UI Automation backend covers WinForms, WPF and Qt5, but it does not support Java Swing (Apriorit). Java clients need the Java Access Bridge.
  • Remote sessions are just pictures. In Citrix or Remote Desktop, Power Automate for desktop can only see an image of the remote screen, so Microsoft points to image and text recognition instead (Microsoft).
  • Drivers that went quiet. WinAppDriver's last release was built on .NET 5, and its tracker had more than 1,000 open issues when users asked Microsoft about its future (Microsoft Q&A).

Jobs agents hand to legacy Windows apps

  • Entering bills, orders or claims from a CSV into a desktop accounting or ERP client.
  • Looking up a customer, policy or part number and returning the fields your agent needs.
  • Running an end-of-day report in the app and saving the export to a shared folder.
  • Updating records in bulk after your agent decides what should change.
  • Copying data between two desktop apps that were never connected.

Ways to automate a legacy Windows app, compared

ApproachWhat you buildCustom or owner-drawn controlsCitrix or RDPWhen the UI changesCalled from an agent
pywinauto or FlaUIPython or C# scripts against UI AutomationOnly if the control exposes itselfNo, the app is an imageUpdate control lookupsYou write the wrapper
WinAppDriver or AppiumSelenium-style tests on WindowsOnly if the control exposes itselfNoUpdate locatorsYou write the wrapper
Power Automate Desktop or UiPathRecorded or designed flows, with image and OCR fallbackThrough image matching or computer visionThrough image matching or computer visionRe-record or fix the flowThrough the vendor's orchestrator
AutoHotkey or coordinatesKeystrokes and fixed clicksYes, blindlyYes, blindlyBreaksYou write the wrapper
SaiA plain-English taskYes, works from what is on screenYes, works from what is on screenRe-plans the step; saved code is repaired from the failed runOne HTTP call or MCP tool

If the app's controls are exposed and the job runs thousands of times a day, a pywinauto or FlaUI script is cheaper per run. A Gartner analyst has warned that AI agents can cost far more than RPA bots on high-frequency work (Gartner via CXOToday). That is why Sai lets you save a working run as code instead of reasoning through every click again.

How to automate a legacy Windows app with Sai

  1. Put the app on a computer Sai can use. Install it on a Windows cloud computer Simular hosts, or run Sai on your own Windows PC where the app already lives. Check the app's license terms for a hosted machine.
  2. Write the job as a task. Name the screens, the input file and what "done" looks like. The full prompt is in the Start with a prompt tab above.
  3. Approve the sign-in. Sai sends a link for the app's login, so the password never passes through your agent. See approvals.
  4. Approve the first commit. Ask Sai to stop before the first save or post, check the filled form, then let it continue.
  5. Save it as code. Ask Sai to save the steps as a replayable skill with the input file as a parameter. Next time your agent runs the skill instead of the whole task.

On the official OSWorld 2.1 leaderboard, which tests agents on real desktop apps, Sai has the highest partial score, 79.38%, at $14.34 per task. See the leaderboard and method.

Call it from your agent

From a coding agent, add the MCP server once, then ask for the job in chat:

claude mcp add sai -e SAI_API_KEY=sapi_YOUR_KEY -- npx -y @simular-ai/sai-mcp

From your own agent or backend, send the task to POST /v1/agents/message. Name the inputs so the run can become a reusable skill, and record the steps:

curl -s https://api.simular.ai/v1/agents/message \
  -H "Authorization: Bearer $SAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "In Acme Ledger, enter every bill in {{file}} under Vendors > Enter Bills. Ask before the first save.",
    "options": { "inputs": { "file": "bills.csv" }, "recordTrajectory": true },
    "wait": false
  }'

Attach the CSV with /upload, read the result with /turns, and turn a good run into code with learned code (research preview). The quick start walks through the first call.

Limitations

  • Slower than an API. Working from the screen takes seconds per step. If the vendor offers an API or a database export, use that.
  • The app has to run on the computer Sai uses. Apps tied to one office PC need Sai on that PC; Simular's cloud computers run Windows or Linux.
  • Learned code is a research preview. It cannot ask a person anything mid-run, so keep approvals in the agent-driven run until you trust the job.
  • Sign-ins stay human. Link-only approvals, such as typing a password, always wait for a person, even in unattended runs.

Related use cases: give your agent a computer as a tool, enter CSV rows into a web app with no import and turn a runbook into a scheduled job.

Last reviewed October 17, 2026.

Frequently asked questions

Can you automate a Windows application that has no API?

Yes. Tools that work through the user interface can drive it: UI Automation libraries such as pywinauto and FlaUI, RPA platforms such as Power Automate Desktop and UiPath, and computer-use agents such as Sai, which work from what is on screen.

What is the Windows desktop automation API?

Microsoft UI Automation is the accessibility API Windows provides for reading and operating controls. It covers standard Win32, WinForms and WPF controls; custom controls need a provider from the app developer. A computer-use API like Sai works from the screen instead, so it does not depend on those providers.

Is WinAppDriver still maintained?

Its last release was built on .NET 5, which is out of support, and users asking Microsoft about a roadmap have not had one. Many teams have moved to FlaUI, pywinauto, the Appium NovaWindows driver or computer-use agents.

How do I automate an app inside Citrix or Remote Desktop?

Inside a remote session the automation tool sees only an image, so selector-based tools cannot find controls. You need image and text recognition, which RPA tools call surface automation, or an agent like Sai that works from the screen.

Can my AI agent call Sai to use a desktop app?

Yes. Coding agents use the @simular-ai/sai-mcp MCP server. Your own agent or backend calls POST /v1/agents/message with the task, or uses the Python SDK.

Does Sai need automation IDs or the accessibility tree?

No. Sai finds fields, grids and buttons by what they show on screen, the way a person does, so custom-drawn controls and Java or VB6 clients work the same way.

Is a computer-use agent more expensive than RPA?

Per run, reasoning through every click costs more than a fixed script. Sai lets you save a run that worked as code and replay it with new inputs, so repeat jobs do not pay for the reasoning again.

Can Sai run on my own Windows PC?

Yes. Install the Sai desktop app on your Mac or Windows computer and pass its machineId, or use a Windows or Linux cloud computer that Simular hosts.

Give your agent the desktop apps it cannot reach

One call from your code or coding agent. Sai works the app on a Windows computer and reports back with screenshots.