What is Odoo Domain Builder?

A focused developer tool that turns writing Odoo domain expressions into a visual, error-resistant workflow.

Odoo filters — the values of domain attributes on actions, views, and server code — are plain Python-ish lists such as [('state', '=', 'draft')]. Learning the exact technical field names and operators for every model is tedious and error prone.

Odoo Domain Builder connects to your logged-in Odoo session and loads the real field metadata your account can see. You pick a model, browse its fields (searchable, along dotted relation paths), set operators and values with type-aware inputs, and get a ready-to-paste expression.

The domain is generated entirely on your device. Click Load data on Review & Copy to send the domain to your selected Odoo server and preview matching records. Records are never changed.

Connect in seconds and produce expressions like:

[('partner_id.country_id.code', '=', 'BD')]

or with multiple conditions and groups:

[('state', '=', 'draft'), '&', ('active', '=', True), ('amount_total', '>', 100.0)]

Ideal for Odoo developers, technical consultants, functional consultants, and implementers who work with Odoo filters and domain syntax every day.

Key features

Local syntax and value checks use your model metadata. Record searches and previews follow your Odoo access rights.

Model search

Search models by label or technical name through ir.model — including custom models — with paginated results and live server search.

Real field metadata

Load every field fields_get exposes to your account, including custom and inherited fields. Non-searchable fields are clearly marked.

Child-field navigation

Drill into many2one, one2many, and many2many relations up to eight levels and build dotted paths like partner_id.country_id.code.

Type-aware inputs

Selection dropdowns plus validated boolean, integer, float/monetary, date, and UTC datetime inputs. Related fields can select records by name and insert their IDs.

17 domain operators

Comparisons, membership (in / not in), text matching (ilike, =like, …), and hierarchy operators (child_of, parent_of).

Logical groups & validation

Combine conditions with AND / OR / NOT, up to five nested group levels and 100 conditions, with inline error reporting.

Review, format & copy

Preview the generated domain, switch between compact and formatted output, and copy it to your clipboard in one click.

Local drafts & themes

Drafts, model context, and your light/dark theme preference are saved in local extension storage and restored on reopen.

Select records by name

Search products or other related records and insert their IDs automatically. List values support multiple selections.

Load matching data

Read matching records in 50-row pages, then use Load more. Records are never modified.

Choose your columns

Select up to 12 columns, including child-model fields. Multiple related values appear together in each main-model row.

Offline manual mode

No Odoo connection? Build domains with manual fields, operators, and values with full syntax and logical-structure validation.

Screenshots

Version 1.2.0: child fields → product selection → chosen columns → matching data. Screenshots show the actual interface with fictional demo metadata and records.

Tip: Open the wizard by logging in to Odoo in a tab, then clicking the extension toolbar icon in that tab. Drag the title bar to move the window, and click the × or Done to close it.

How it works

Install, connect, build your domain, and copy it or preview matching records.

On Review & Copy, click Load data to list matching records below the domain. Use Choose fields to search and select up to 12 columns before clicking Load data. Use Related fields → to select related-model columns such as partner_id.email or partner_id.country_id.name. Multiple related values appear separated by semicolons. Binary fields are excluded. Changing the selection clears the previous results. Load more fetches the next 50 records. Each row has an Open in Odoo link to its form view in a new tab on the same server and database. Your Odoo account’s access rights apply.

Install. Open Odoo Domain Builder on the Chrome Web Store and click Add to Chrome. Chrome 116 or newer is required.

Log in and click. Open your Odoo backend in a regular tab and log in normally. Click the extension toolbar icon while that Odoo tab is active to grant temporary access.

Choose a model. Search by label or technical name (for example sale.order, res.partner, project.task, or a custom model). Select a suggestion or type a technical name and click Load fields.

Build conditions. Click Browse fields, search all fields returned by Odoo, or click a relation to open its child fields. Use Use record IDs for the relation itself, then Select record… to search by name. Select an operator and value.

Combine and review. Add conditions or nested AND / OR / NOT groups, then choose Review domain → to validate everything and view the generated expression.

Copy. Click Copy Domain to place your domain on the clipboard and paste it into Odoo.

Reconnect anytime: clicking the toolbar icon reuses the existing wizard; clicking from a different Odoo tab switches its connection and refreshes metadata.

Build with purchase-order child fields

Choose purchase.order, open Browse fields → Order Lines → Product → Name, or select Order Lines → Quantity. To choose a specific product, use the Product relation itself and click Select record….

[('order_line.product_id.name', 'ilike', 'Chair')]
[('order_line.product_qty', '>', 10.0)]
[('order_line.product_id', '=', 42)]

The example ID is illustrative; pick the actual product from your server. Domains filter purchase orders. Separate one-to-many conditions can match different child records. Preview columns show accessible related records, not only matching child lines.

Operators and value types

The builder supports 17 common Odoo domain operators and nine value types.

Supported Odoo domain operators
OperatorMeaningValue type
=, !=Equal / not equalString, Boolean, Integer, Float, Date, Date/time
>, <, >=, <=Numeric / date comparisonsInteger, Float, Date, Date/time
in, not inMembership in a listList (JSON)
ilike, not ilike, like, not like, =like, =ilikeCase-sensitive / case-insensitive text matchingString
child_of, parent_ofRecord hierarchy traversalInteger (ID) or List of IDs
=?Unset-aware equalityAny
Supported value types
Value typeExample inputGenerated output
Stringdraft'draft'
BooleanTrue / FalseTrue / False
Integer1010
Float10.510.5
False / unset—False
List (JSON)["draft", "sent"]['draft', 'sent']
Date2026-09-17'2026-09-17'
Date/time (UTC)2026-09-17T09:30'2026-09-17 09:30:00'
Empty string—''

Example domains

  • [('state', '=', 'draft')] — draft records.
  • [('amount_total', '>', 100.0)] — orders over 100.
  • [('partner_id.country_id.code', '=', 'BD')] — related-field path.
  • [('state', 'in', ['draft', 'sent'])] — multiple states.
  • [('parent_id', 'child_of', 3)] — hierarchy traversal.

Limits

  • Up to 100 conditions and five nested logical group levels.
  • Up to eight related-field levels in dotted paths.
  • Up to 12 preview columns, 50 main-model rows per page; binary columns excluded.
  • Datetimes are entered in UTC.
  • Relational values can be selected by name; the domain uses IDs or lists of IDs.
  • Domains are sent to Odoo only for requested record previews; arbitrary Python / context expressions and server operators are out of scope.

Security, permissions, and privacy

Temporary tab access, no credential entry, and read-only requests to your selected Odoo server.

Permissions requested

  • activeTab — temporary access to the tab where you click the extension icon, used for metadata, record searches and requested previews in your selected Odoo session.
  • scripting — runs a packaged, self-contained function in that tab's isolated world for session checks, metadata, record searches and previews.

No host permissions, cookies, tabs, browsing-history, webRequest, or storage permissions are requested. There is no remote code and no auto-injected content script.

The injected code verifies the session, lists models through ir.model, reads field definitions via fields_get, and uses search_read for record-name searches and requested data previews. It does not scrape the page or write business records.

Privacy

  • No credentials: you are never asked for a password or API key; the existing session is reused.
  • Selected server only: metadata, record-search and preview requests go only to your selected Odoo origin and follow its normal access controls.
  • Record previews: Load data sends the domain and values only to your selected Odoo server. Loaded records remain in memory and are never changed.
  • Record selection: search text goes to your Odoo server; selected IDs become draft values. Result names stay in memory.
  • Local storage: drafts and preferences live in extension Web Storage and are deleted on uninstall.
  • The extension has no analytics, advertising, or telemetry.

This documentation website uses Google Analytics 4 to measure website usage.

Odoo access rights are respected — visible models and fields match what your account can see; non-searchable fields and restricted accounts are handled gracefully.

Read the privacy policy for data use, storage and website analytics details.

Release notes

Version 1.2.0 — September 18, 2026

  • Load data with 50-row pages and Load more.
  • Choose up to 12 result columns, including related-model fields.
  • Navigate child fields directly with breadcrumbs and Child fields shortcuts.
  • Select related records by name and automatically insert one ID or a list of IDs.
  • Updated privacy disclosures, screenshots and release documentation. No additional permissions.

Version 1.1.0 — September 17, 2026

  • Automatic model and field loading from your logged-in Odoo session via activeTab and scripting.
  • Searchable model list, live server search, and Load more models pagination.
  • Related-field browsing with dotted paths, selection dropdowns, and type-aware value inputs.
  • Connected-mode validation of fields, searchable status, value types, and selection choices.
  • Draft restoration scoped to your Odoo origin, database, and model; reconnect refreshes metadata.
  • Manual-field mode retained for offline domain construction.

Version 1.0 — Original release

  • Offline visual domain builder with the full operator set and logical group support.
  • Zero permissions and no network access in the original offline release.

Frequently asked questions

What is an Odoo domain?

An Odoo domain is a list of conditions used to filter records, written as tuples such as [('state', '=', 'draft')]. Domains are the value of the domain attribute on actions, sidebars, computed fields, and server code.

Does the extension send my generated domains to Odoo?

Only when you click Load data or Load more. The domain and its values are sent to your selected Odoo server to read matching records using your account’s access rights.

Do I need to enter my Odoo password or an API key?

No. Clicking the toolbar icon in a logged-in Odoo tab reuses that tab's existing session. The extension does not read cookie values or store credentials.

Does it read or change my business records?

Select record reads IDs and names; Load data reads matching records and selected related values. Requests use your account’s access rights. Results stay in memory. The extension never writes business records.

Can I use it without a connection to Odoo?

Yes. Manual-field mode builds domains offline without model validation or any Odoo connection, while still validating syntax, values, and logical structure.

Does it support custom models and custom fields?

Yes. Connected mode loads every field your Odoo account can see — including custom and inherited fields — and lets you browse relations up to eight levels. Accounts that cannot list ir.model can still type a known technical model name.

Which browsers and versions are supported?

It is a Manifest V3 Chrome extension and requires Chrome 116 or newer.

Where is my draft data stored?

Your current domain draft, selected model, Odoo origin/database identifier, and UI preferences are saved in the extension's local Web Storage. Nothing is sent to the developer; uninstalling the extension deletes the data.

What are the limits?

Up to 100 conditions, five nested group levels, and eight related-field levels. Values are bounded (strings up to 10,000 characters; lists up to 1,000 items). Datetimes are entered in UTC.

Is this tool affiliated with Odoo S.A.?

No. Odoo Domain Builder is an independent community tool and is not affiliated with or endorsed by Odoo S.A. Odoo and related names are trademarks of Odoo S.A.