RPA for Python: TagUI's automation in an import rpa
Python package for doing RPA
At a glance
- What is it?
- RPA for Python is an Apache-2.0 Python package for robotic process automation, a thin API over a forked TagUI engine providing web automation, computer vision, OCR, and keyboard and mouse control from one module. Installed with pip install rpa and driven through functions like init, url, type, click and snap, it runs on Windows, macOS, Linux and even Raspberry Pi, carries enterprise security by design, works without internet after install, and rewards bug reports with gift cards, with v1.50 the current release.
- Who is it for?
- Use RPA for Python when repetitive tasks span websites, desktop applications and the command line and a simple English-adjacent API beats assembling Selenium, OpenCV and keyboard tooling separately, particularly for non-developers maintaining their own scripts. Choose Selenium or Playwright when the job is purely browser automation in a developer-run codebase, since their ecosystems are larger and better documented for that single case.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 68 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A TagUI engine behind a Python API
RPA for Python is a Python package for RPA, robotic process automation, and its architecture is the interesting part, the simple API wraps AI Singapore's TagUI open source RPA tool, specifically a forked version optimized for the rpa package, installed and invoked through an overridable tagui_location setting. The package metadata still names itself tagui, author Ken Soh, and the capabilities out of the box are website automation, computer vision automation, optical character recognition, and keyboard and mouse automation, four disciplines that normally mean four different dependencies. Installation is one line, pip install rpa, usage is one import, import rpa as r, and the setup classifiers claim Production/Stable across Windows, macOS and Linux for audiences from developers to education. The promise is the API's brevity, complex automation written as a short sequence of readable calls rather than a web-driver programming exercise.
Web automation with XPath and snapshots
The web mode is the flagship, and the README's example is six lines that carry the whole style:
r.init()
r.url('https://duckduckgo.com')
r.type('//*[@name="q"]', 'decentralisation[enter]')
r.wait() # ensure results are fully loaded
r.snap('page', 'results.png')
r.close()Elements are addressed by XPath, typed input embeds special keys as bracketed tokens like [enter], and snap captures a page to an image file for verification or record keeping. The general notes extend the basics with the operational details that matter, headless mode to run Chrome invisibly, turbo mode to run ten times faster than normal human speed with caveats the README insists on reading, a download_location override for fine-grained control of browser file downloads, and error handling managed by setting error(True) to raise Python exceptions you catch with try-except, converting silent failures into ordinary Python control flow.
Visual automation by clicking pictures
The visual mode automates what has no DOM, desktop applications and anything that renders pixels, by targeting image files instead of selectors:
r.init(visual_automation = True)
r.dclick('outlook_icon.png')
r.click('new_mail.png')The full example drives an email client by double-clicking an icon image, clicking a button image and typing into a message box located by picture, with snap providing the screenshots that become the next script's targets. The platform notes map the prerequisites, Windows wants display zoom at the recommended level, macOS needs PHP installed manually plus documented workarounds for PhantomJS and Java popups, and Linux requires the OpenCV and Tesseract setup that visual recognition rides on. This is SikuliX-style automation exposed through the same API as the web mode, so one script can start in a browser and finish in a native application without changing tools or mental models.
OCR, keyboard and mouse as first-class modes
Three more modes complete the surface. OCR automation reads the screen, print(r.read('pdf_report_window.png')) extracting text from a captured window, and reads regions by coordinates anchored to a found element, hovering an anchor image then reading a rectangle computed from mouse_x and mouse_y, the pattern for screens whose text lives in canvases or PDF viewers. Keyboard automation types raw key sequences with bracketed modifiers:
r.init(visual_automation = True, chrome_browser = False)
r.keyboard('[cmd][space]')
r.keyboard('safari[enter]')Mouse automation works in coordinates, clicking at positions, typing at them, and performing drags by hovering an image, holding mouse down, moving relative and releasing, with the example dragging a button three hundred pixels. The chrome_browser False flag in these examples turns the web engine off entirely, pure desktop sessions, the same init call configuring which of the four disciplines a script exercises.
Runs on a Raspberry Pi, or a phone browser
The deployment surface is broader than the usual automation library. A setup guide covers running the package on Raspberry Pi, positioned as low-cost automation servers, which pairs naturally with the without-internet property, the package can be installed, updated and used with no network connection after setup, and the project describes itself as having enterprise security by design, inheriting the claim from TagUI's documentation. At the other end of the scale, a Colab notebook lets RPA run in a phone browser, with up to five concurrent Colab sessions for data scraping, the cloud pattern for people whose only computer is a phone. The notes also handle the mundane internationalization failure, non-English operating systems hitting an invalid continuation byte error fixed by setting the code page to UTF, the kind of small-country detail that marks software used globally rather than demonstrated locally.
Gift cards for bugs, Telegram for chat
The project's community economics are unusual and stated in the README's own voice, as a token of appreciation, any new bug reported earns a US$200 gift card from the reporter's preferred merchant, and any accepted feature suggestion earns US$100, a bounty program small enough to feel personal and large enough to signal seriousness. Support and discussion run through a Telegram chat, and a PyCon talk video introduces the tool for those who prefer watching to reading, alongside a sample script, an RPA Challenge solution and a groceries example linked from the general notes. The README itself is translated into a dozen languages through linked machine translations, Chinese, Hindi, Spanish, French, Arabic, Bengali, Russian, Portuguese, Indonesian, German and more, an accessibility effort aimed squarely at the non-developer audiences the classifiers name.
A 2023 release, maintained into 2026
Version history clusters around functional patches named for what they fixed, v1.48 adding secure temporary storage to bin, v1.49 fixing snap and adding focus, and v1.50 fixing a macOS issue where Python was not found, tagged in July 2023, with the repository still pushed as recently as 2026-07-25, the long maintenance tail of a tool whose engine underneath moves separately. The relationship between the package and the TagUI fork it vendors is the adopter's main structural fact, updates arrive through the rpa package's own cadence, and the tagui_location setting exists precisely for deployments that need to control where that engine lives. For teams choosing today, the honest framing is a mature, simple, generously documented automation API that trades the richness of dedicated frameworks for breadth, one import covering web, vision, OCR and input, with the trade-off that each mode is only as deep as TagUI's engine underneath it.
Editorial conclusion
Use RPA for Python when repetitive tasks span websites, desktop applications and the command line and a simple English-adjacent API beats assembling Selenium, OpenCV and keyboard tooling separately, particularly for non-developers maintaining their own scripts. Choose Selenium or Playwright when the job is purely browser automation in a developer-run codebase, since their ecosystems are larger and better documented for that single case. Verify first that your platform prerequisites are in place, PHP on macOS and OpenCV with Tesseract on Linux for visual mode, keep display zoom at the recommended level on Windows, and read the turbo mode caveats before trading human-speed delays for throughput.
Frequently asked questions
What is RPA Python?
RPA for Python, installed as the rpa package, is a Python wrapper over a forked TagUI engine providing robotic process automation across websites, desktop applications and the command line. Its API covers web automation, computer vision, OCR, and keyboard and mouse control from one module.
How do you install RPA for Python?
Run pip install rpa, then import rpa as r in a script, notebook or interactive shell. Platform prerequisites apply for visual automation, PHP on macOS and OpenCV with Tesseract on Linux.
What can RPA for Python automate?
Websites through XPath-driven web automation with headless and turbo modes, desktop applications through image-targeted visual automation and coordinate-based mouse control, on-screen text through OCR reads of images and screen regions, and raw keyboard input with bracketed modifier keys, all from the same API.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/tebelorg-rpa-python)