# Odoo AI Builder: Build and Customize Odoo Addons

Canonical: https://erpfly.com/odoo/
Last updated: September 14, 2026

Describe the change in plain words. erpfly writes a proper addon for Odoo 17, 18 or 19, tests it on a sandbox, and hands you the code.

Versions: Odoo 19, 18, 17. Delivered as: Odoo addon. Deploy with: Odoo.sh or your server.

### Build a new Odoo addon

For things Odoo doesn’t ship, or only ships in Enterprise: equipment rentals, inspections, a helpdesk on Community. You get models, views, menus, access rules and tests, packaged with a manifest.

- Models with mail.thread and activities
- Form, list and kanban views
- ir.model.access.csv and record rules
- QWeb reports and ir.cron jobs

More: https://erpfly.com/odoo-module-development/

### Customize the Odoo you run

For changes to quotations, invoices, deliveries and contacts. New fields, view changes and report tweaks go into a small addon, so an update to Odoo doesn’t wipe them out.

- Fields added with _inherit
- View changes with xpath
- QWeb report inheritance
- Automation rules and server actions

More: https://erpfly.com/odoo-customization/

### Example requests

- **Request:** Quotations over $10,000 need Sales Manager approval before confirmation.
  **Result:** sale.order inherited with a To Approve state, an Approve button added by xpath, and a group check in action_confirm. (https://erpfly.com/modules/sales-order-management/)
- **Request:** Warn the warehouse lead 30 days before a lot expires.
  **Result:** An ir.cron job reading expiration_date on stock.lot, a mail template, and a setting for how many days ahead to warn. (https://erpfly.com/modules/inventory-management/)
- **Request:** A helpdesk for Community edition, with tickets from email and a customer portal.
  **Result:** A ticket model with mail.thread and a mail alias, stages in kanban, an SLA deadline field and a portal controller. (https://erpfly.com/modules/helpdesk/)
- **Request:** Technicians fill in a job sheet with photos and get the customer to sign it.
  **Result:** A job sheet model linked to the task, attachments for photos, a signature field and a QWeb report emailed on completion. (https://erpfly.com/modules/field-service/)
- **Request:** Monthly invoices from contract lines, without the Enterprise Subscriptions app.
  **Result:** A contract model with lines and a next invoice date, and an ir.cron job that creates draft account.move records. (https://erpfly.com/modules/subscription-billing/)
- **Request:** Delivery windows on sales orders, printed on the delivery slip.
  **Result:** Two fields on sale.order, related fields on stock.picking, and an inherited QWeb template for the slip. (https://erpfly.com/odoo-customization/)

### How it fits the Odoo you already run

**Odoo Online can’t run custom addons.** The Odoo Online SaaS plan only installs Odoo’s own apps and Studio changes. A custom Python addon needs Odoo.sh or a server you host. If you’re on Online today, moving to Odoo.sh is the first step, and it’s worth pricing before anything else.

**Community or Enterprise.** Generated addons depend only on what they use. An addon that extends helpdesk or account_accountant will only install on Enterprise, and the manifest says so up front. A lot of what people ask for (approval steps, extra fields, reports, scheduled jobs) works on Community.

**The version matters.** Odoo 17 dropped attrs and states in views in favour of plain expressions like invisible="state != 'draft'". Odoo 18 renamed tree views to list. Code written for one version often won’t load on the next, so erpfly writes for the exact version you pick.

**Inherit, don’t copy.** Changes to standard models use _inherit and view changes use xpath, so an update to the sale or stock module doesn’t overwrite your work. The difference between _inherit and _inherits trips up a lot of teams, and we wrote a guide on it.

### FAQ

### Can erpfly build addons for Odoo Online?

Not ones you can install there. Odoo Online doesn’t accept custom Python addons. The code works on Odoo.sh or a self-hosted server with the same version and edition, so moving to Odoo.sh is usually the answer.

### Does it work with Community and Enterprise?

Both. Tell erpfly which edition you run and it only depends on modules you have. If a request really needs an Enterprise app, such as Helpdesk or full Accounting, it says so before writing anything.

### Which Odoo versions does it support?

Odoo 17, 18 and 19. View syntax and a few model APIs changed between them, so the addon targets the version you pick. Odoo’s own schedule ends standard support for 17 in September 2026, so if you’re on 17 it’s worth planning the move to 18 or 19 now.

### Can it change an addon we already have?

Yes. Connect the repository and erpfly reads your existing addons before it writes anything. Changes arrive as a pull request against them, so your developer sees a normal diff.

### How do I deploy the addon to Odoo.sh?

Merge the pull request into a staging branch first. Odoo.sh builds it with a copy of production data, and once you’ve checked it there, merge into the production branch. The module then shows up under Apps to install or update.

### What happens when I type in the chat box on this page?

It opens the erpfly builder with your description, the Odoo version and the Build or Customize choice already filled in. Nothing is generated until you sign in and confirm.

### Sources

- [Odoo Online, Odoo 19 documentation](https://www.odoo.com/documentation/19.0/administration/odoo_online.html)
- [Odoo editions comparison, Odoo S.A.](https://www.odoo.com/page/editions)
- [ir_ui_view.py (17.0), Odoo source code](https://github.com/odoo/odoo/blob/17.0/odoo/addons/base/models/ir_ui_view.py)
- [Chapter 6: Basic Views, Odoo 18 developer tutorial](https://www.odoo.com/documentation/18.0/developer/tutorials/server_framework_101/06_basicviews.html)
- [Branches, Odoo.sh documentation](https://www.odoo.com/documentation/19.0/administration/odoo_sh/getting_started/branches.html)