What lies on the far side of that line
Grouped by the questions a solution architect asks.
Build
- Drag-and-drop builder (SurveyJS Creator) with 30+ question types: text, dropdown, checkboxes, date/time, rating, slider, file upload, signature, address, image marker, image picker, rich text editor, matrix and dynamic matrix (repeating rows, like a One2many).
- Logic without code: show/hide, skip and branching conditions, validators, calculated values, and dynamic panels and matrices for repeating rows.
- Connect fields with Odoo: go further with built-in APIs to connect form fields to Odoo: pre-fill, change, validations and domain filters.
- Evidence-grade question types: signature pad with anti-blank validation, image marker (place weighted markers on a default or uploaded image: a roof, a floor plan, a schematic).
- Structured data in answers, not blobs: even the rich types are stored as structured JSON: rich text as a document tree rather than an HTML string, image marker as placed coordinates with their weights. An answer can therefore be parsed, mapped onto a record and reported on.
- Multilingual by default: builders and forms carry translations; language follows the website or the logged-in user, with a switcher in the form.
- Theming, built in: style forms to the customer's brand from inside the builder: background, colours, fonts, header and logo, no CSS required. Start from a supplied theme or save a custom one, and apply it across many builders at once.
- AI authoring: build or edit a design from a prompt, every prompt recorded as a revision with one-click undo. It also covers porting an existing form from another tool: describe it, or paste its definition.
Publish
One design, four rendering contexts. Build once, deploy anywhere it is needed:
Context 01BackendInternal users, on the Forms app or bound to a record.
Context 02PortalAssigned to a portal user, or selected and filled in by them, with their history and in the company’s own branding.
Context 03WebsiteDrag-and-drop Form block on any page.
Context 04EmbeddedCopy-paste snippet on a third-party site.
Technically, rendering happens in an encapsulated DOM rather than an iframe:
The form’s (and form builder’s) markup and styles are encapsulated from the page around it.
So the form designer and form are part of the Odoo page itself (backend, portal, website).
Neither leaks into the other: no resizing, no style collisions with the host site, no cross-origin friction, and the same behaviour in all four contexts.
Public forms get a built-in proof-of-work captcha: no external service, no cookies, invisible to the visitor, verified server-side.
Bind to Odoo
- Record Mapping: configure, in the builder, that a submission creates or updates records. Dropdowns resolve to Many2one by lookup; dynamic matrix and panel rows become One2many children. Chain several mappings so a later one uses the record an earlier one created.
- Field APIs: Prefill loads values from Odoo records or any source; Change reacts to a field change and updates others; Domain filters a dropdown's choices dynamically. This is how a form shows live (for example) product, serial, picking or contact data instead of a frozen copy.
- Server actions: Python on submit for anything beyond configuration, with the submission data available as ordinary values.
- PDF generation: Odoo's own report engine, printed or emailed on submission, in the user's or the customer's language.
- Form receipt: a PDF report of the submission sent back to whoever filled it in, as confirmation of what was recorded and when.
- App integrations: ready-made bindings for CRM, Contacts, Sales, Purchase, Projects, Inventory, Helpdesk, Employees, Events and eCommerce.
Operate
- Drafts and autosave: save on page change, on value change, or "save in progress", so a long form survives an interruption (even with required fields unanswered).
- Reminder rules: per builder, with mail templates, on an interval: the mechanism behind any recurring inspection or periodic declaration.
- Recurring forms, prefilled from last time: a periodic form can be copied with the previous submission’s data already in it (field exclusion by a property in the builder), so each round starts from what was recorded last time and the answers that changed are the only ones to enter.
- Concurrent-edit protection: a builder being edited is claimed by that user, with a heartbeat and automatic release, so two consultants cannot silently overwrite each other.
- Versions and revisions: a published form resolves to whichever version is live; superseded versions are refused.
- AI document extraction: a photo or PDF of a filled-in paper form becomes a draft submission mapped to the form's own fields, with per-field confidence, review flags and optional auto-completion. Engines: Anthropic, OpenAI, Mistral, self-hosted Ollama, or any OpenAI-compatible endpoint.
Analyse
The ETL interface generates a model, table, views and menu from a form design and loads submissions into it as ordinary records that can be queried, exported and reached by any BI tool. Useful for trend reporting across many submissions of the same form.
Why not the Survey app, or Studio?
Neither carries the question types this work needs (signature, file upload, image marker, repeating matrices and panels), which on its own rules them out for evidence capture. Thirty-plus against nine, each one wired to Odoo through the field APIs: an image picker that lists a product’s own images for one or several to be chosen, a dropdown filtered against live records, a rating or slider whose value maps onto a field like any other.
Survey is built for questionnaires: nine question types, all of them choice, text, number, date, scale or matrix. Choices are typed into the survey, so a dropdown cannot show live products, contacts or assets, and logic is display-only: a question appears because an earlier answer was picked, with no calculated values and no API-driven rules.
Nor is a survey an artefact you ship. A submission links to a contact, but beyond saving an answer as the respondent’s email or nickname, nothing writes answers onto that contact, a task or an asset; they stay in the survey’s own tables. And there is no pack to version alongside the module and import into the next customer’s database, which is the whole of §04.
Studio is the module side of the §02 line: every question becomes a field and a view change in that database. It is not the tool for extensive logic, and each customisation is weight carried into the next Odoo upgrade. Right for what the ERP must enforce or derive; wrong for the twenty-eight questions a roof survey asks this year.