Software for Wholesale and Distribution Companies in Saudi Arabia: Odoo or Custom
Stock across warehouses, price lists per customer, purchasing and ZATCA invoices in one system. Built on Odoo or custom, quoted by what you need.
A distribution company needs one view of stock across warehouses, the right price for each customer, orders that become invoices, and ZATCA e-invoices tested for rejection cases before go-live. We build that on Odoo, where multi-warehouse stock, price lists, purchasing and Saudi accounting modules exist, or as custom software when your rep or pricing process is unusual. If a ready-made inventory product fits you, buy it; we write for the company it does not fit.
Devvista is an official Odoo partner and a software development company. Contact us with your warehouses and your biggest stock or pricing problem.
Where distribution companies lose time and margin
A wholesaler or distributor in Saudi Arabia usually starts with an accounting package, an Excel stock sheet and WhatsApp orders from sales reps. That works until the same product sits in two warehouses, a customer has a negotiated price nobody wrote down, and the invoice for a delivery is typed after the truck has left. Four things then go wrong together: stock figures disagree between branches, quotes use the wrong price, receivables are chased from memory, and ZATCA invoices are late or inconsistent.
This page is for owners and operations or finance managers of wholesale, trading and distribution companies (food and FMCG, building materials, auto parts, electrical, medical supplies and similar) who want one system for stock, pricing, sales, purchasing and invoices. We build it on Odoo or as custom software, and we say plainly which one fits and when a ready-made product is enough.
Evidence note (Mostaql, 7 November 2026): among about 75 project titles we read, buyers asked for inventory systems, mini ERPs and one distribution system. Our research file records it as a single post, so we treat it as a sign that small distributors do look for this work, not as proof of volume. Search demand for the Arabic phrase for a distribution program returned no data in Semrush Saudi Arabia, so this page is written for buyers who reach us through an Odoo or custom-system search or a referral, not for a head term.
What the system covers, and where each part comes from
Each row says what the part does and what the Odoo documentation (version 19) lists for it. Combining them into one distribution system, and anything marked custom, is our design for your case.
| Part | What it does for a distributor | Source in the Odoo documentation |
|---|---|---|
| Warehouses and locations | Several warehouses and stock moves between them; shelves and bins inside each | Inventory lists Warehouses, Locations and Operation types. The warehouse page says users can set up multiple warehouses and create stock moves between them, with a Resupply From option when there are several warehouses and Multi-Step Routes is enabled in Inventory settings. Warehouses |
| Replenishment | Stock topped up between a minimum and a maximum, or on demand | Reordering rules keep forecasted stock between a minimum and a maximum; a product on the Buy route creates a request for quotation when the rule fires. Inventory also lists Replenish on order (MTO) and Inter-warehouse replenishment. Reordering rules |
| Reserving stock for orders | Decide when a confirmed order takes stock off the shelf | Three methods: at confirmation, manually, or before the scheduled date. Reservation methods |
| Picking and removal | Pick many orders together; choose which stock leaves first | Inventory lists Batch picking, Cluster picking and Wave transfers, and removal strategies FIFO, LIFO, FEFO, closest location and least packages. Inventory documentation |
| Lots and expiry dates | Trace a batch and sell the oldest first, useful for food and medical lines | Inventory lists Lot numbers, Serial numbers and Expiration dates under product tracking. Inventory documentation |
| Purchasing | Requests for quotation, blanket orders, control of vendor bills, vendor pricelists | The Purchase documentation lists Requests for quotation, Blanket orders, Control policies and Import vendor pricelist. Purchase documentation |
| Stock value | Know what the stock is worth, including freight and duty added to cost | Inventory lists Landed costs and inventory valuation. Inventory documentation |
| Price lists and discounts | Different prices for different customers, quantities and dates | See the next section. Pricelists |
| Sales commissions | Pay reps on what they sell | The Sales documentation has a Commissions section; the exact rules we would set up for your reps are confirmed in scoping. Sales documentation |
| ZATCA invoices | Every delivery invoiced in Arabic and sent to Fatoora | Odoo's Saudi localisation, covered below. Odoo Saudi documentation |
Evidence label: the capabilities in the third column are Fact from the pages linked. We left out two things on purpose, customer credit limits and a ready van-sales app, because the pages we opened do not describe them (not verified). Both are discussed below as scoped work.
Price lists for customers, quantities and dates
Distributors rarely sell at one price. The same carton costs a supermarket chain, a corner shop and a contractor different amounts, and prices move by season. Odoo's pricelist documentation describes the mechanism, and this is what it says:
| Need | What the documentation states |
|---|---|
| Turn it on | Sales app, Configuration, Settings: in the Pricing section tick Pricelists, then save |
| A price per customer | On the customer's contact form, under Sales & Purchase, the Pricelist field sets the pricelist for that customer |
| Discount, formula or fixed price | Each line in the Price Rules tab is a rule; its type is Discount, Formula or Fixed Price. A negative discount creates a markup |
| Price by quantity | A Min. Quantity field sets the quantity at which a rule applies |
| Price by date | Start and end dates set when the pricelist can be applied to quotations |
| Price by product category | A rule can apply to a category; if rules exist for both a product and its category, the product's own rule takes priority |
| Overrides | Pricelists suggest prices, and they can always be overridden on the sales order |
| Foreign currency | Each pricelist has a currency field |
Source: Odoo pricelist documentation. The Sales documentation also describes per-line discounts through a Discounts setting (Odoo discounts). Our part is turning your price agreements into rules and checking them on real orders: we take your current price file, load it, and run a sample of last month's orders through it before anyone quotes from it.
Sales reps, credit and van sales: what is configuration and what is custom
Distribution is a field business. Reps visit shops, take orders and sometimes sell from the vehicle. This is how we separate the work, so the estimate has no surprises.
| Need | How we would approach it | Label |
|---|---|---|
| Reps enter orders from the road | Odoo's quotations and sales orders are the base. If your reps need a phone app that works with poor signal and Arabic screens, that is a separate mobile app talking to the system; see mobile app development in Saudi Arabia | Custom for the app; not claimed as a standard Odoo feature |
| Credit limits and overdue blocking | The Odoo pages we opened do not describe a customer credit limit control, so we do not promise one. We scope it as a rule you define (limit per customer, what happens when it is passed, who can override), built and tested in staging | Scoped rule or custom; not verified as standard |
| Rep targets and commission | A commission section exists in the Sales documentation. We confirm how your reps are paid before saying how much is configuration | Confirm in scoping |
| Orders from shops through a portal or store | Possible when you want customers to order by themselves; see online store development in Saudi Arabia | Separate scope |
If you sell mostly from vans with cash collection, ask us what the van process looks like before you assume Odoo alone covers it. We would rather scope a small custom piece than hide it.
ZATCA e-invoicing when you issue invoices all day
A distributor issues many invoices, from several warehouses or branches, and each must reach ZATCA. ZATCA's roll-out page says phase two (integration) starts from 1 January 2023 and is applied in waves, with at least six months' notice (ZATCA roll-out phases). For Wave 25, the notice of 24 July 2026 includes taxpayers whose revenue subject to VAT exceeded SAR 187,500 in 2022, 2023, 2024 or 2025, and the latest integration date is 1 February 2027 (Wave 25 notice). Your own notice decides your date, and you can compare your figures with our Wave 25 checker.
What Odoo's Saudi documentation says matters for a distributor:
- Each sales journal must be onboarded separately, so a company with several branch or warehouse journals repeats onboarding for each.
- Phase two uses clearance for business-to-business sales (tax invoices); for business-to-consumer sales (simplified tax invoices) Odoo generates a QR code and reports to Fatoora.
- Invoices rejected by ZATCA stay in a Rejected state and are not legally valid until you fix the issue and retry. Someone must own that daily check.
- Returns are credit notes, and each credit or debit note needs a ZATCA-approved reason.
- Tax invoices and simplified tax invoices, and their notes, must be issued in Arabic; English can be added.
- Counter sales can go through the point-of-sale modules (l10n_sa_edi_pos). Standard VAT is 15%.
Source: Odoo Saudi Arabia documentation. The practical risk is data: a customer without a correct VAT number or address produces rejections at volume. We clean that data before go-live. Read more in Odoo ZATCA e-invoicing and accounting and e-invoicing software.
Odoo, custom or a ready-made product: how to choose
All three are legitimate, and the honest answer depends on your process.
| Path | Fits when | Watch out for |
|---|---|---|
| Ready-made distribution or inventory SaaS | One or two warehouses, standard pricing, a few users, and the vendor confirms ZATCA phase-two support in writing | Limits on price rules, branches and integrations. We do not recommend vendors by name, since we have not verified any |
| Odoo | Several warehouses, customer-specific price lists, purchasing and accounting in one system, growth planned | Data migration, onboarding of each journal and training. See Odoo implementation in Saudi Arabia |
| Custom software | Your pricing, dispatch or rep process is unusual, or you already run a system worth keeping and need pieces added | You own more of the maintenance. See custom software in Saudi Arabia |
Mixing is common: Odoo for the standard core and a custom rep app or integration for what is unique. If you also deliver your own goods, the delivery side overlaps with our logistics software page. Manufacturers who sell what they make should read ERP for manufacturers, and contractors software for contracting companies.
How a distribution project runs
This is how we already work, not a package. We have no Saudi distribution client to point to, and Odoo projects are under NDA, so the process below is what we offer in place of references.
| Step | What happens | What you see |
|---|---|---|
| 1. Scoping call | Warehouses, products, price files, reps, journals, current invoice system and the date that matters | A written scope and an estimate |
| 2. Data from Excel | Products, customers, opening stock and price lists cleaned and loaded; duplicate and missing VAT data fixed | A list of what was fixed and what is still open |
| 3. Staging build | Warehouses, routes, price lists and invoice layout set up on a staging site, never on live stock first | A staging site and a weekly demo |
| 4. Rehearsal | A sample of real orders, returns and credit notes run through, including ZATCA rejection cases | Test results you can read |
| 5. Go live and hand over | Stock count and cut-over with you present; documentation, access and code handed over | Documents and code that are yours |
We work in Arabic and English. Tell us your case and we will say honestly whether we are a fit.
What changes the cost
We quote by need after a scoping call and publish no packages. The drivers, roughly in order of impact:
| Driver | Why it moves the estimate |
|---|---|
| Warehouses, branches and journals | Each warehouse needs setup and each sales journal is onboarded for ZATCA on its own |
| Number of products and price rules | More price lists and categories mean more rules to load and test |
| Data quality | Dirty customer, product and stock data is the main cause of slow go-lives and rejected invoices |
| Rep app and offline needs | A mobile app is its own piece of work |
| Integrations | Store, carrier, payment or old-system links each add scope |
| Training and number of users | More users and sites mean more training and support |
Our published ranges, in US dollars: a fixed price from $500 to $100,000 depending on complexity, or $10 to $100 per hour depending on developer type and level. As an illustration only, at $40 an hour 50 hours of work is $2,000, an estimate and not a quote. See ERP implementation cost in Saudi Arabia for how competitors state their own ranges.
Ready to talk? Contact us with your warehouses, rough product count and the system that issues your invoices. Global English pages: Odoo implementation, hire Odoo developers and our work.
Contact Devvista
Our address, phone and opening hours.
Amna Bint Wahb St, road, Jeddah 23622, Saudi Arabia
- SundayOpen 24 hours
- MondayOpen 24 hours
- TuesdayOpen 24 hours
- WednesdayOpen 24 hours
- ThursdayOpen 24 hours
- FridayClosed
- SaturdayClosed
Tell us your warehouses, rough product count and the system that issues invoices and we will send an estimate. Get an estimate.
Straight Answers.
Services
Custom Software DevelopmentAI & AutomationSaaS DevelopmentCRM DevelopmentOdoo Implementation & DevelopmenteCommerce DevelopmentDedicated Development TeamsWordPress DevelopmentUI/UX DesignSEO ServicesIT Staff AugmentationWhite Label DevelopmentGuides
ZATCA e-invoicing for OdooSoftware development for Saudi ArabiaZATCA Wave 25Wave 25 CheckerContact and bookingOdoo ERPERP Cost GuideAccounting and e-invoicingLogistics softwareWebsite DevelopmentMobile App DevelopmentHire developers for Saudi ArabiaHire .NET developers for Saudi ArabiaAI Chatbots and AutomationOnline Store DevelopmentContracting softwareManufacturing ERPWholesale and distributionHire Odoo developers for Saudi Arabia Case Studies Devvista BlogTell us about your warehouses and price lists
Tell us how many warehouses, products and reps you have and what issues your invoices today. We will say honestly whether Odoo, custom or a ready-made product fits, and quote in writing.
- 30-minute consultation
- No commitment required
- Response within 24 hours
- Book a call30 minutes with the team.
- Get a clear planSteps, timeline and a cost range for your setup.
- DecideGo ahead with us, or take the plan with you.