Three digit sets, and only one of them is safe to guess
Arabic in the Mashriq, meaning Egypt, the Levant and the Gulf, is normally written with Arabic-Indic digits. Arabic in the Maghreb, meaning Morocco, Algeria and Tunisia, is normally written with the same digits as English. Same language, same script, different numerals, and a viewer that decides from the language tag alone will be wrong across half the region.
| Criterion | Digits | Unicode | Where you meet it |
|---|---|---|---|
| Western | 0123456789 | U+0030 | Maghreb Arabic, and English and French documents everywhere |
| Arabic-Indic | ٠١٢٣٤٥٦٧٨٩ | U+0660 | Mashriq Arabic: Egypt, the Levant, the Gulf |
| Extended Arabic-Indic | ۰۱۲۳۴۵۶۷۸۹ | U+06F0 | Persian and Urdu. Not Arabic, and not interchangeable |
Our substitution fires only when the locale token names Arabic and asks for native digits. Everything else renders Western. That is a deliberate restriction rather than an unfinished feature: a viewer that substitutes for any native-digit locale will stamp Arabic glyphs onto a Farsi cell, which is a confident, invisible error. A Western digit in a Persian model is obviously a fallback. An Arabic digit in a Persian model looks correct and is not.
When substitution does run, digits and separators convert together: ١٤٬١٣١٬٠٠٠٫٠٠, using the Arabic thousands and decimal separators, rather than ١٤,١٣١,٠٠٠.٠٠. A separator is converted only when it sits between two digits, so a currency literal such as ر.س in the same string is left alone.
Two calendars in one folder
A regional deal folder holds Gregorian dates on the lender documents and Hijri dates on locally filed Arabic material, sometimes in the same workbook. Excel says which is which inside the number format, either as the B2 prefix or packed into a locale token such as [$-060401]. We resolve the calendar id and render what the format asks for.
The common failure is not a crash. Run 5 January 2025 through ssf@0.11.2, the standalone publication of the format engine SheetJS ships, with the format B2dd/mm/yyyy, and it returns 05/01/1444. The Umm al-Qura date is 05/07/1446. A year and a half of error, rendered confidently, on a maturity schedule nobody re-checks. The full engine-by-engine rendering table is on the Saudi Arabia page.
A cross-border room in practice
The structure repeats: an operating company in Egypt or Morocco, a holding company in a Gulf free zone, lenders and sponsors outside the region, and counsel in two or three jurisdictions. Everyone reads a different subset of the documents and nobody should see the others.
- Local filingsArabic, often Hijri-dated, uploaded as filed
- Deal documentsFrench or English, from advisors and lenders
- Per-group fencingPermissions resolved on the server for each bidder group
- Cited answersPage or cell reference a reader can open and check
Citations are rendered as Q3_Model.xlsx · Revenue!B14:F34, with absolute 1-based sheet rows and column ranges. Tapping one opens the workbook at that sheet and washes those cells. In a room where half the participants cannot read half the documents, an answer that cannot be opened is an answer nobody can rely on.
Every page a participant opens carries a watermark burned into the image on the server before encoding, tiled, with their name, email, IP and timestamp. Two participants viewing the same page receive different bytes. Delete every overlay element in the browser and the identity is still in the pixels, because it was never an overlay.
Cost
Flat published plans: a free tier, Teams at $399 a month, Pro at $999 a month, custom Enterprise. AI is included in every paid tier rather than sold as an add-on, and there are no per-page fees. For a cross-border process with four bidder groups and thousands of scanned filings, per-page pricing is the line item nobody can forecast. The 14-day trial takes no credit card. See pricing.
Related: Deals inside the GCC · هذه الصفحة بالعربية · Residency and compliance