Odoo CRM in Saudi Arabia: Tenders, BOQ Quotes and ZATCA-Cleared Invoices

A practical guide to Odoo CRM in Saudi Arabia for contractors and B2B suppliers: tender invitations qualified as leads, regional teams in Riyadh, Jeddah and Dammam, quotes with 15% VAT, and the customer data ZATCA Phase 2 invoices need.

Published 2026-10-11 · METCH

Tender invitations as leads: let estimators qualify before anyone books a site visit

Saudi contractors receive tender invitations from main contractors, developers and government entities, often with a BOQ and a fixed bid deadline. Treat each as a lead: with Leads switched on in the CRM settings, inquiries enter a qualifying step before a formal opportunity. It applies to every team by default and can be cleared per team, say for a maintenance team serving only contracted clients.

The estimator is the gatekeeper. Take an invitation to fit out a warehouse in Dammam: the estimator checks scope, location and deadline before anyone books a site visit. If it fits, Convert to Opportunity either creates the opportunity or, when the Similar Leads button shows the developer is already in the pipeline, merges it into the record created first; you then link an existing customer or create one. If it does not fit, mark it lost with a reason such as outside our scope.

Once qualified, launch an Activity Plan with the bid deadline as the plan date, since steps can fall before or after it: clarification questions, site visit, BOQ pricing and bid submission.

Stages are set under Configuration, Stages, and each can be limited to specific teams. Tick Is Won Stage? on the final one; Fold by Default only collapses the column and closes nothing. Rotting in (Days to rot) highlights open opportunities that have not changed stage for that many days, and 0 turns it off. A tender pipeline might run:

  • Tender received
  • Clarification or site visit
  • BOQ priced
  • Bid submitted
  • Awarded

Regional teams across Riyadh, Jeddah and Dammam, and rules that route each inquiry

Create one sales team per region, such as Riyadh projects, Western Region and Eastern Province industrial, each with its own email alias and pipeline, plus a separate alias for tender invitations. Multi Teams lets a key account manager sit in several teams.

Website RFQ forms can feed the same teams: set the form's Action to Create an Opportunity and pick the team. Against spam, Odoo recommends Cloudflare Turnstile because reCAPTCHA v3 may not comply with local data protection rules; review that against the Saudi Personal Data Protection Law.

Rule-Based Assignment, switched on in the CRM settings, runs manually or repeatedly at intervals from minutes to weeks. Rules are filters on the team and on each member, such as Probability >= 20, or a filter on State that sends Eastern Province leads to the Dammam team (Odoo 20 lists Saudi Arabia's 13 regions). Odoo 20 hides address details on leads to encourage creating a contact, so make sure your website form or the linked contact fills in the region. Each member has an auto-assignment rule: Always in rotation (the default), In rotation, with a limit, or Out of rotation. With a limit, the daily maximum is the member's 30-day capacity divided by 30, so leads can stay unassigned once every limited member is full. A lead assigned by the rules becomes an opportunity automatically.

Probability comes from predictive lead scoring: add Language as a variable if your buyers work in Arabic and English. Salespeople can override it, but never to 100%.

Quoting the bid: 15% VAT, the buyer's language and mobilization advances

With the Sales app installed, the opportunity's New Quotation button turns the priced BOQ into a quotation; if the opportunity has no customer yet, Odoo offers to create or link one, and customer details are needed before the quote is sent. The Saudi localization comes with 15% standard VAT plus zero-rated and exempt taxes for the lines that need them. Sent quotes appear under the Quotations smart button, and confirmed ones move to Orders.

Language is set per customer. The Language field on the contact decides the language of the documents Odoo generates for that customer, so a developer that works in English receives English quotes. Tax invoices must be in Arabic in any case: enable the Gulf Cooperation Council Format option in the Accounting settings so an English invoice also carries Arabic.

Online Signature and Online Payment are Sales settings, so accepting a quote does not need the Sign app, and Paymob is one payment provider Odoo documents as operating in Saudi Arabia. The salesperson is notified on confirmation, but the opportunity stays open until someone clicks Won.

Contracts often open with a mobilization advance. On the sales order, Create Invoice can issue a down payment as a percentage or a fixed amount. That invoice goes to ZATCA like any other, and Odoo's Saudi documentation asks you to handle advance payments in line with ZATCA's guidelines. If the client withholds retention, the same documentation covers it; in Odoo 20 a negative sales tax is treated as a retention tax.

Before the invoice: what CRM must capture for ZATCA clearance or reporting

Phase 2 integration becomes mandatory once ZATCA notifies your wave. Wave 25 covers taxpayers whose VAT-subject revenue exceeded SAR 187,500 in any year from 2022 to 2025, with a deadline of 1 February 2027. The rules apply at the invoice, through the l10n_sa_edi module, but most of the data comes from the customer record your sales team creates:

  • Tax Invoices (B2B) go for clearance; Simplified Tax Invoices (B2C) are reported and carry a QR code. Odoo 20 defaults to a Tax Invoice when the customer counts as a company, which for a Saudi contact means a VAT number or a company identifier such as the Commercial Registration Number. The type can still be changed on the draft invoice.
  • Odoo 20 hides address details on leads to encourage creating a contact, and the contact is where the national address belongs. Building Number and Secondary Number must each be exactly 4 digits.
  • Your own company needs SAR as its currency, a name of no more than 63 characters, and complete address and identification fields.
  • Each sales journal is onboarded separately in the ZATCA API mode you select. Sandbox pre-fills the OTP; Simulation (best run on a duplicate of your live database) and Production need a 6-digit OTP from the matching Fatoora portal, which expires after 60 minutes.
  • In Odoo 20 the ZATCA checks run in the invoice's Send wizard, with a ZATCA history tab and batch sending from the list view.

Channels that work on +966, tender reports and habits that stick

Pick follow-up channels that reach Saudi numbers:

  • WhatsApp is Enterprise-only and needs a WhatsApp Business Platform account with Meta-approved templates; a number registered in the WhatsApp Business App will not work.
  • The VoIP module is now Odoo Phone. Its verified providers are Axivox (Europe-based), DIDWW and OnSIP (US only), so check DIDWW's, or another WebRTC-compatible provider's, coverage and number porting for Saudi numbers first.
  • Odoo's own SMS price list shows Saudi Arabia as unsupported, and recipients cannot reply; for SMS, use a third-party gateway such as Twilio, which Odoo documents.

Keep lost reasons tender-specific: price, technical non-compliance, awarded to a competitor, tender cancelled. The Lost pop-up does not force one, so make it a habit. In Pipeline Analysis, group by sales team and lost reason to compare regions, and turn on Include archived, since lost opportunities are archived.

Practical points:

  • Click Won when the award letter or purchase order arrives, not when the bid goes in.
  • Set each user's language in their preferences so Arabic- and English-speaking staff work in their own language.
  • On Enterprise, CRM, Sales and invoicing together need the Standard plan on Odoo Online, or Custom for Odoo.sh or on-premise; One App Free covers one app. Community includes all three and the ZATCA module, but not WhatsApp or Phone.

METCH, a certified Odoo partner in Saudi Arabia, can review your tender pipeline and onboard your sales journals with ZATCA before go-live, with Arabic-first training from our team in Riyadh. Book a free consultation to plan it with us.

Frequently asked questions

Can Odoo send SMS reminders to customers' Saudi mobile numbers?

Not through Odoo's own SMS credits: the IAP SMS price list marks Saudi Arabia (+966) as unsupported, and Odoo SMS cannot be replied to in any country. If you need SMS, connect a third-party gateway; Twilio is the alternative Odoo documents, through the sms_twilio module, and you should confirm Saudi coverage and sender rules with the provider. For two-way conversations, WhatsApp on Enterprise and team email aliases are the practical channels.

Does confirming a quotation mark the opportunity as Won?

No. A confirmed quotation becomes a sales order and moves to the Orders smart button on the opportunity, but the opportunity stays open until someone clicks Won or Lost. Agree a clear rule with your team, for example marking Won when the award letter or purchase order arrives, otherwise forecast and win/loss reports will overstate open deals. Probability cannot be raised to 100% by hand either.

Will a customer created from a CRM lead get a Tax (B2B) or a Simplified (B2C) invoice?

It depends on the customer record. In Odoo 20 the invoice type defaults to Tax when the customer's commercial entity counts as a company, which for a Saudi contact means a VAT number or a company identifier such as a Commercial Registration Number; otherwise it defaults to Simplified, which is reported rather than cleared. Converting a lead with a company name creates that company with the person under it, so add the VAT number there. You can still change the type on the draft invoice.

At which point in the CRM flow does ZATCA e-invoicing apply?

At the customer invoice, not at the lead, opportunity or quotation. When you send an invoice from a sales order, including a down-payment invoice, Odoo 20 submits it from the Send wizard after pre-checks: tax invoices (B2B) are cleared and simplified invoices (B2C) are reported with a QR code. Before going live, onboard each sales journal with a Fatoora portal OTP, valid for 60 minutes, and test in Simulation, whose invoices are not legally valid. Once an invoice has been submitted in Production, you cannot switch back.

Need help with this?

METCH is a certified Odoo partner in Saudi Arabia — book a free consultation.

Get a proposal