odoo-rpc-sweep
Find the code that still calls Odoo through XML-RPC or JSON-RPC, before Odoo removes those APIs.
pipx run odoo-rpc-sweep ./my-integrations # Markdown report
odoo-rpc-sweep ./my-integrations --format csv > sweep.csv
odoo-rpc-sweep workflow-export.json # a single n8n export
Until the first PyPI release, install from GitHub: pipx install git+https://github.com/AIQSO/odoo-rpc-sweep.
No dependencies. Python 3.9+. It reads files and prints a report. Nothing is sent anywhere.
Why
From Odoo's own documentation:
/xmlrpc,/xmlrpc/2and/jsonrpcare deprecated in Odoo 19.- The
dbservice (create, duplicate, drop or list databases) is removed in Odoo 20 (fall 2026) and in Odoo Online 19.1. - The
commonandobjectservices are scheduled for removal in Odoo 22 (fall 2028) and Odoo Online 21.1 (winter 2027). - The replacement is JSON-2:
POST /json/2/<model>/<method>, an API key as a bearer token, named arguments only, one transaction per request.
Sources: Odoo 19.0 External API · Odoo 20.0 External API
So not everything breaks on Odoo 20. Only database-management calls do. The rest keeps working, with deprecation warnings, until Odoo 22. This tool tells you which is which.
What it reports
| Severity | Meaning |
|---|---|
BREAKS-ON-20 |
db-service calls: /xmlrpc/2/db, "service": "db", create_database, duplicate_database, db_exist, change_admin_password |
REMOVED-IN-22 |
/xmlrpc/2/common, /xmlrpc/2/object, /jsonrpc, execute_kw, the odoorpc / erppeek / odoo-xmlrpc / ripcord client libraries, and n8n Odoo nodes that still use JSON-RPC |
CHECK |
Likely legacy but needs a person to look: an XML-RPC client import, or an n8n Odoo node that can't be classified |
It reads .py .js .mjs .cjs .ts .php .rb .java .cs .go .sh .json .yml .yaml. It skips .git, node_modules, virtualenvs, build output and tool caches, and any file over 2 MB (listed as "not read").
n8n: workflow exports are parsed, not just searched. The Odoo node's v2 uses JSON-2 when it's set up with the API-key credential,
and /jsonrpc with the older username/password credential. v1 always uses /jsonrpc. So a v2 node on an API-key credential is reported as clean
(n8n source).
Exit codes
| Code | Meaning |
|---|---|
0 |
Nothing found |
1 |
Legacy calls found |
3 |
Couldn't tell: the path doesn't exist, it held no readable files, or files were skipped and nothing was found |
3 is never reported as clean, so it's safe to use as a CI gate:
- run: pipx run odoo-rpc-sweep . # fails the build while legacy calls remain
Limits (read these)
- It's a pattern match. It finds candidates, and a person confirms each one. A URL built from pieces (
base + "/xml" + "rpc") can slip past it. - It only sees the code you point it at. For the calls actually hitting your Odoo, including ones from code you don't have, install the free RPC Migration Scanner module on Odoo 19. It records every legacy caller by user, API key and method. Store modules can't be installed on Odoo Online, and that's where this tool comes in.
- Third-party connectors (Zapier, Make, a vendor's packaged app) have to be migrated by their vendors.
Help with the migration
Built and maintained by AIQSO, which offers fixed-price Odoo API migrations. Questions and bugs: GitHub issues, or odoo-apps@aiqso.io.
License
MIT
Releasing (maintainers)
- Bump
__version__insrc/odoo_rpc_sweep/__init__.pyand date theCHANGELOG.mdentry. git tag vX.Y.Z && git push origin vX.Y.Z- Approve the
pypienvironment in the Actions run. The upload uses PyPI trusted publishing, with no stored token.
Metadata
Release files for odoo-rpc-sweep 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| odoo_rpc_sweep-0.1.0.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| odoo_rpc_sweep-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.5 kB
Release files / odoo_rpc_sweep-0.1.0.tar.gz
| Download URL | odoo_rpc_sweep-0.1.0.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5bd7fa6fbaf5e0240d9ce6aeb480ad8c053f47de6867afcd7ede899bc23ea327
|
|
BLAKE2b-256 checksum How to use checksums |
db252db88bf197bf860b2946cc189b755aa2b072cfcb744a64b590f3d6841a6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / odoo_rpc_sweep-0.1.0-py3-none-any.whl
| Download URL | odoo_rpc_sweep-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4a22215723a11771ad2760d3f200aac8bbfa44a45fbd9f18e2c4e95c0c2b6589
|
|
BLAKE2b-256 checksum How to use checksums |
3b3c671d886093a67f784ceac61bd0a251f053646a81e662e05d24b7acedca86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log