- Home
- Apps
- Multichannel & PIM Tools
- Advanced Catalog Visibility for Multi-Website eCommerce
Illustrative previewA made-to-order Odoo module that governs which products and categories appear on each of your websites,
with user- and group-based restrictions layered on top.
ECOSIRE builds, installs, and supports it against your exact multi-website setup.
What is Advanced Catalog Visibility for Multi-Website eCommerce?
A made-to-order Odoo module that governs which products and categories appear on each of your websites, with user- and group-based restrictions layered on top. ECOSIRE builds, installs, and supports it against your exact multi-website setup. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Running several storefronts from one Odoo database sounds tidy until you try to keep each one showing the right catalog. Out of the box, a product is published or unpublished globally, and the website_id field on product.template only pins a record to a single site rather than letting you curate distinct assortments across many. Teams end up cloning products, toggling is_published by hand, or writing throwaway overrides on the website.published.mixin that break the next time the catalog changes. Add B2B requirements — where a signed-in dealer should see wholesale lines that a public visitor never should — and Odoo's native website eCommerce runs out of road. There is no first-class notion of "this SKU is visible on Site A, hidden on Site B, and restricted to these customer groups everywhere."
We build a dedicated visibility layer that treats per-website assortment and audience restriction as real, queryable data instead of a pile of manual flags. The module adds a many-to-many relation between product.template / product.public.category and website, plus an optional link to res.groups and/or a partner tag for user-based restriction. A stored computed field on the product — for example visible_website_ids, driven by @api.depends on the assortment and category rules — resolves effective visibility so the storefront controller can filter the /shop queryset in a single indexed pass rather than post-filtering in Python. Because the logic lives in the ORM, it applies consistently to the website search, category navigation, product suggestions, and the sitemap, not just the grid the shopper first lands on.
Enforcement is done the Odoo-correct way. We extend the _search_get_detail / website controller path and add ir.rule record rules keyed on the current website.get_current_website() and request.env.user, so a hidden or restricted product cannot be reached even by guessing its slug URL — the record rule denies the read, returning a clean 404 rather than a leaking 403. Category trees are pruned per site so empty branches never render, and ir.model.access.csv covers the new configuration models for the manager group. Admins get a clear management surface: list and form views (XML plus OWL widgets where a matrix helps) showing the website-by-product visibility grid, batch actions to publish or restrict an entire category to a site, and optional base.automation rules so newly created products inherit a default assortment. Everything is read/written over the standard XML-RPC and JSON-RPC API, so a PIM or middleware can drive assortments programmatically.
Because this is built to order, we start from your real database — how many websites, whether you are on Community or Enterprise (this works on both; we note where Enterprise-only website features change the approach), your pricelist and B2B rules, and any existing customizations that touch the shop. We deliver on a staging clone first, run UAT against your actual catalog, and only then schedule the production cutover with a rollback path. Typical delivery is one working week from confirmed scope, targeting Odoo 17.0, 18.0, or 19.0. Pricing starts from $999 (indicative, single-company base scope); additional websites, deeper B2B/pricelist-driven visibility rules, multi-company record-rule design, and PIM/API integration increase the quoted scope.
What you get
- Installable module source code for your Odoo version (17.0, 18.0, or 19.0), Community or Enterprise
- Installation and configuration on your staging environment, then production cutover
- Technical documentation: data model, computed fields, record rules, and controller extension points
- End-user guide plus a live training session for your catalog/website administrators
- UAT on a staging clone against your real catalog, with a documented rollback plan for the production deploy
- Post-go-live support window for defect fixes and configuration questions
- Git repository handover with tagged release and commit history
- Security review notes covering the new `ir.model.access.csv` entries and record rules
Who this is for
Multi-brand eCommerce manager
Runs three or four Odoo websites from one database and needs each storefront to show a curated assortment without cloning products or manually toggling publish flags every time the catalog shifts.
B2B / wholesale operations lead
Needs signed-in dealers and wholesale groups to see restricted product lines that public visitors never can, enforced at the record level so a guessed URL cannot leak a restricted SKU.
Odoo administrator / integrator
Owns the Odoo instance and wants visibility logic in the ORM with proper record rules and access control, driveable over XML-RPC/JSON-RPC from a PIM, rather than brittle manual overrides they have to maintain.
Marketplace / franchise operator
Manages many regional or franchise sites and needs per-site catalogs plus a bulk grid to assign categories to sites quickly, with new products inheriting a sane default assortment.
How Advanced Catalog Visibility for Multi-Website eCommerce Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Per-website assortment | First-class many-to-many product/category-to-website model, curated per site | Possible but you design and maintain the data model yourself | Often a fixed visibility flag with limited multi-site nuance | `website_id` pins to one site; global publish only |
| User / group restriction | Built-in `res.groups` and partner-tag restrictions for B2B audiences | Buildable per project, no reusable pattern | Sometimes offered, rarely both site- and user-scoped together | No native per-group catalog visibility |
| Direct-URL security | `ir.rule` record rules deny read and return a clean 404 | Depends on whether the developer adds record rules | Frequently filters the grid but leaks via slug URL | Unpublished products can still be probed inconsistently |
| Fit to your setup | Scoped to your websites, edition, and B2B rules; UAT on your catalog | Fully bespoke but slower and costlier to reach parity | Generic; you adapt your process to the app | Manual flags and cloning to approximate the need |
| Performance | Stored compute + single indexed shop query | Depends on the developer's approach | Varies; some post-filter in Python | Fine for one site, awkward across many |
| API / PIM integration | Full XML-RPC / JSON-RPC read-write, optional auto-assortment rule | Whatever you choose to expose | Backend-UI oriented, limited API surface | Generic ORM API, no assortment concept to drive |
| Support & handover | Docs, training, support window, git repo with tagged release | Tied to the developer who built it | Vendor ticket queue; source often obfuscated | Community/your team only |
| Version coverage | Built and tested for your Odoo 17/18/19, Community or Enterprise | Whatever you target and maintain | Depends on the vendor's supported versions | Behavior varies by release |
Frequently Asked Questions about Advanced Catalog Visibility for Multi-Website eCommerce
How long does delivery take?
This is built to order, so typical delivery is one working week from confirmed scope. The timeline depends on how many websites you run, your B2B/pricelist rules, and whether existing customizations touch the shop controller. We confirm the exact schedule in writing after the scoping call, and we always build and UAT on a staging clone before the production cutover.
Does it work on Odoo Community or do I need Enterprise?
It works on both Community and Enterprise for Odoo 17.0, 18.0, and 19.0. The core visibility model, record rules, and controller extensions are Community-compatible. Where an Enterprise-only website feature changes the approach (for example certain website builder or multi-company tools), we note it during scoping and adapt the design to your edition.
How is pricing and scoping decided?
Pricing starts from $999 as an indicative single-company, single-website base scope. Additional websites, deeper B2B/group restrictions, multi-company record-rule design, and PIM/API integration increase the quoted scope. After a short scoping call we send a fixed written quote for your exact requirements — the from-price is a starting point, not the final number.
How do you keep a hidden product from being reached by its direct URL?
Filtering the `/shop` grid alone is not enough — someone could still open a product by guessing its slug. We enforce visibility with `ir.rule` record rules keyed on the current website and user, so a restricted product fails the read and returns a clean 404 rather than leaking through a direct link or the JSON-RPC storefront calls.
What about support and updates after go-live?
Every build includes a post-go-live support window for defect fixes and configuration questions. Because the module targets a specific Odoo major version, we also quote version-upgrade work separately when you move to a newer Odoo release. You receive the full git repository with a tagged release, so your own team or ours can maintain it going forward.
Can our PIM or middleware manage assortments automatically?
Yes. All configuration models are readable and writable over the standard XML-RPC and JSON-RPC API, so a PIM, ETL job, or middleware can assign products and categories to websites and groups programmatically. We can also add an optional `base.automation` rule so newly created products inherit a default per-site assortment on creation.
Will this slow down our storefront?
No — that is exactly why we resolve visibility in a stored computed field and filter the shop queryset in a single indexed pass, rather than loading everything and filtering row-by-row in Python. Enforcement rides on Odoo's own search and record-rule machinery, which is already optimized, so the shop, search, and category navigation stay fast even with large catalogs.
Related Modules

3PL Logistic Company
A build-to-order Odoo module that turns your warehouse into a multi-client third-party logistics operation, with per-client inventory segregation, activity-based storage and handling billing, and a customer fulfillment portal. ECOSIRE scopes, builds, installs, and supports it.

AI Demand Forecasting & Auto-Replenishment for Odoo
ML demand forecasts that replace static reorder rules with dynamic min/max, safety stock and EOQ across every Odoo warehouse.

AI Product Description & Catalog Content Generator
Bulk AI-generate SEO, multilingual product descriptions, titles and meta from your Odoo attributes — built, installed and supported by ECOSIRE.
Advanced Catalog Visibility for Multi-Website eCommerce
A made-to-order Odoo module that governs which products and categories appear on each of your websites, with user- and group-based restrictions layered on top. ECOSIRE builds, installs, and supports it against your exact multi-website setup.
- Many-to-many `visible_website_ids` relation on `product.template` and `product.public.category`, so one SKU can appear on any subset of your sites without cloning
- Stored compute with `@api.depends` resolves effective visibility once in the ORM, keeping `/shop` filtering to a single indexed query instead of per-row Python
- `ir.rule` record rules keyed on `website.get_current_website()` and the current user, so hidden products return a clean 404 on direct-slug access — not just an empty grid
- User- and group-based restriction via optional links to `res.groups` and partner tags for B2B / dealer-only assortments
