Skip to main content

odoo-rpc-sweep

Find the code that still calls Odoo through XML-RPC or JSON-RPC, before Odoo removes those APIs.

pip install odoo-rpc-sweep                          # or: pipx run odoo-rpc-sweep ...
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

No dependencies. Python 3.9+. It reads files and prints a report. Nothing is sent anywhere.

Why

From Odoo's own documentation:

  • /xmlrpc, /xmlrpc/2 and /jsonrpc are deprecated in Odoo 19.
  • The db service (create, duplicate, drop or list databases) is removed in Odoo 20 (fall 2026) and in Odoo Online 19.1.
  • The common and object services 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 (Python xmlrpc.client / ServerProxy, PHP, the JS xmlrpc package), an endpoint whose service is chosen at runtime (f"{url}/xmlrpc/2/{service}", "/xmlrpc/2/" + svc, which could be db), the old positional execute(db, uid, password, model, method, ...), or an n8n Odoo node that can't be classified

It reads code (.py .js .mjs .cjs .ts .php .rb .java .cs .go .sh .json .yml .yaml) and the config and deploy files where an endpoint often lives instead (.env, .env.*, .ini .cfg .conf .toml .properties .tf .tfvars, Dockerfile*, Containerfile*). A user:password@ inside a URL is masked as ***@ in the report. 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.
  • An endpoint that only exists in a deployed environment (a secret store, a CI variable, a server's environment) isn't in any file it can read. Point it at your deploy config as well as your code, or use the scanner module below to see the calls that actually arrive.
  • 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)

  1. Bump __version__ in src/odoo_rpc_sweep/__init__.py and date the CHANGELOG.md entry.
  2. git tag vX.Y.Z && git push origin vX.Y.Z
  3. Approve the pypi environment in the Actions run. The upload uses PyPI trusted publishing, with no stored token.

Metadata

Release files for odoo-rpc-sweep 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for odoo-rpc-sweep 0.1.2
File Size Uploaded
odoo_rpc_sweep-0.1.2.tar.gz 13.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for odoo-rpc-sweep 0.1.2
File Interpreter ABI Platform
odoo_rpc_sweep-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 23.1 kB

Release files / odoo_rpc_sweep-0.1.2.tar.gz

Download URL odoo_rpc_sweep-0.1.2.tar.gz
Size 13.0 kB
Tags Source
SHA-256 checksum
How to use checksums
46b3efd66d9b97c73e48c580a78b4201d98fba513f26890589ac0543e9ac10e9
BLAKE2b-256 checksum
How to use checksums
99d3ca7513c91c5d217b4098a6e668558f9f694802c8d3aa0efd063ce134e57e
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 Oct 1, 2026.

Transparency log

Release files / odoo_rpc_sweep-0.1.2-py3-none-any.whl

Download URL odoo_rpc_sweep-0.1.2-py3-none-any.whl
Size 10.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3e8c82679191df191b862f9c62b9f55600ed47d4b6aad423822df9bda931ca36
BLAKE2b-256 checksum
How to use checksums
2bc0e051db35d0b5c7b8a13fd07c7ec908632382502e64a943cd33c227e33320
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 Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page