Matching Arabic and English company names
Duplicate accounts are the quiet tax on every Gulf CRM. Most of them come from names, not from bad data entry.
Why duplicates happen
The same Saudi company can reach your CRM as شركة قيود لتقنية المعلومات from a government filing, Qoyod from its website, Qoyod LLC from an invoice and Qiyoud from a rep's notes. Exact matching sees four companies. Fuzzy matching on Latin text alone still fails, because it cannot compare Arabic with English at all.
The four sources of variation
| Variation | Example |
|---|---|
| Legal forms and generic words | شركة, مؤسسة, ذ.م.م, W.L.L., FZ-LLC, PJSC, Holding, Trading |
| Arabic spelling variants | أ, إ, آ written as ا; ة as ه; ى as ي; diacritics |
| Transliteration | Qoyod, Qiyud, Qiyoud; Rewaa, Rawaa |
| The definite article | Al-, El-, ال |
A method that works
- Strip legal forms and generic words in both scripts before comparing anything.
- Normalise Arabic spelling: unify the alef forms, ta marbuta, final ya, and remove diacritics and tatweel.
- Compare Latin forms on a consonant skeleton. Transliterations disagree mostly on vowels, so Qoyod and Qiyud share the skeleton k-y-d.
- Cross scripts through transliteration. Convert the Arabic core to Latin, add common spellings, then compare skeletons.
- Keep a threshold and a human check. Two different companies can share a name. Confirm with the domain before merging.
How well does it work? A benchmark on 50 real pairs
We would rather show results than claim accuracy, including where the method fails. On 6 October 2026 we ran 50 name pairs through the live companies/match endpoint, 28 pairs of the same company written differently and 22 pairs of different companies with similar names. The pairs are real Gulf and regional companies, and the full list is below so you can rerun it.
Read this first. We chose the pairs and labelled them from public knowledge of the companies. The set is small, it is not random, and it is one run. It shows how the method behaves, not a guaranteed accuracy figure. Two simple baselines are included for comparison: exact match after lowercasing, and a standard fuzzy ratio (token set ratio, threshold 80, from the open-source rapidfuzz library).
| Method | Same-company pairs found (of 28) | Different-company pairs wrongly joined (of 22) |
|---|---|---|
| Exact match | 0 | 0 |
| Fuzzy ratio at 80 | 2 | 4 |
ApiOne, verdict same only | 19 | 0 |
ApiOne, same or likely_same | 24 | 4 |
What the numbers say:
- Across scripts, plain string comparison finds nothing. Of the 22 same-company pairs written in Arabic on one side and English on the other, the fuzzy baseline found none. It cannot compare Arabic with English at all, which is the problem described above.
- The
sameverdict was clean in this run. All 19 pairs it returned were the same company, and none of the 22 look-alike pairs received it. It left 9 true matches in lower bands: 5 inlikely_same, 3 inpossibleand 1 indifferent. - The
likely_sameband needs a human or a domain check. It held 5 true matches and 4 wrong ones. The wrong ones were close names: الفطيم and الفهيم (Al Futtaim and Al Fahim in Arabic, one letter apart), Careem and Karam Holdings, Foodics and Foodco, and إعمار العقارية against الإمارات العقارية. Skeleton matching is generous by design, so a one-letter difference can survive it. - Four true matches fell below the
likely_sameline. Qoyod LLC against its full Arabic name, كريم against Careem Networks, Almarai Co. against Al Marai Company, and Jarir Bookstore against Jarir Marketing Co. - Translations, not just transliterations, worked in this set. The Saudi Telecom Company, Saudi Aramco and Emirates NBD pairs all matched. We would not rely on that for every company, because it depends on how common the translation is.
A practical rule from this run: auto-merge only same plus a matching domain, queue likely_same for review, and ignore possible and different unless something else links the records.
Full results
| Name A | Name B | Truth | ApiOne verdict (score) | Correct at the likely_same line |
|---|---|---|---|---|
| شركة المراعي | Almarai Company | same company | same (1.00) | yes |
| إعمار العقارية | Emaar Properties PJSC | same company | same (1.00) | yes |
| شركة الفطيم ذ.م.م | Al-Futtaim Trading LLC | same company | same (1.00) | yes |
| بنك الراجحي | Al Rajhi Bank | same company | same (1.00) | yes |
| مجموعة سامبا المالية | Samba Financial Group | same company | same (1.00) | yes |
| شركة جرير للتسويق | Jarir Marketing Company | same company | same (1.00) | yes |
| مجموعة الحبتور | Al Habtoor Group LLC | same company | same (0.97) | yes |
| شركة قيود لتقنية المعلومات | Qoyod LLC | same company | possible (0.84) | no |
| فودكس | Foodics | same company | same (1.00) | yes |
| سلة | Salla | same company | same (1.00) | yes |
| تمارا | Tamara Company | same company | same (0.97) | yes |
| تابي | Tabby FZ-LLC | same company | same (0.97) | yes |
| كريم | Careem Networks FZ-LLC | same company | possible (0.89) | no |
| شركة زين للاتصالات | Zain Telecommunications Company | same company | same (1.00) | yes |
| مجموعة طلعت مصطفى | Talaat Moustafa Group | same company | same (1.00) | yes |
| أرامكو السعودية | Saudi Aramco | same company | same (1.00) | yes |
| لولو هايبرماركت | Lulu Hypermarket | same company | same (1.00) | yes |
| شركة الاتصالات السعودية | Saudi Telecom Company | same company | same (1.00) | yes |
| بنك الإمارات دبي الوطني | Emirates NBD Bank PJSC | same company | likely_same (0.95) | yes |
| بنك الكويت الوطني | National Bank of Kuwait S.A.K.P. | same company | likely_same (0.97) | yes |
| بيت التمويل الكويتي | Kuwait Finance House | same company | same (1.00) | yes |
| شركة الفيصلية القابضة | Al Faisaliah Group Holding Co. | same company | same (1.00) | yes |
| Qoyod | Qiyoud | same company | likely_same (0.92) | yes |
| Rewaa | Rawaa | same company | likely_same (0.90) | yes |
| Al-Futtaim Group | Al Futtaim Trading Co. LLC | same company | same (1.00) | yes |
| Almarai Co. | Al Marai Company | same company | different (0.77) | no |
| Emaar Properties | EMAAR PROPERTIES P.J.S.C. | same company | likely_same (0.96) | yes |
| Jarir Bookstore | Jarir Marketing Co. | same company | possible (0.81) | no |
| الفطيم | الفهيم | different companies | likely_same (0.92) | no |
| Al Futtaim Trading LLC | Al Fahim Group LLC | different companies | different (0.73) | yes |
| نون | نور | different companies | possible (0.82) | yes |
| Noon | Noor Holding | different companies | possible (0.88) | yes |
| تابي | تمارا | different companies | different (0.67) | yes |
| Tabby | Tamara | different companies | different (0.66) | yes |
| جرير | جاهز | different companies | different (0.56) | yes |
| Jarir Marketing Company | Jahez International Company | different companies | different (0.68) | yes |
| سلة | سلام | different companies | different (0.80) | yes |
| Salla | Salam Telecom | different companies | possible (0.82) | yes |
| شركة المراعي | شركة المطلق | different companies | different (0.75) | yes |
| Almarai Company | Almutlaq Group | different companies | different (0.78) | yes |
| إعمار العقارية | الإمارات العقارية | different companies | likely_same (0.94) | no |
| Emaar Properties PJSC | Emirates Properties LLC | different companies | possible (0.85) | yes |
| Qoyod | Qawwam | different companies | different (0.58) | yes |
| Rewaa | Rimaa | different companies | different (0.76) | yes |
| Al Habtoor Group | Al Hamra Group | different companies | different (0.65) | yes |
| بنك الراجحي | بنك الجزيرة | different companies | possible (0.89) | yes |
| Samba Financial Group | Sabb Bank | different companies | different (0.73) | yes |
| شركة زين للاتصالات | شركة زاجل للاتصالات | different companies | possible (0.86) | yes |
| Careem | Karam Holdings | different companies | likely_same (0.95) | no |
| Foodics | Foodco | different companies | likely_same (0.91) | no |
Doing it with an API
ApiOne implements this method in two endpoints. Name matching compares two names and returns a score and a verdict (same, likely_same, possible, different). Name normalization returns the core name, the legal forms removed, a match key to group duplicates, and common spellings in both scripts.
curl -X POST https://api.apione.store/api/v1/companies/match \
-H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"name_a":"شركة قيود لتقنية المعلومات","name_b":"Qoyod LLC"}'
Each call costs 1 credit. For a CRM cleanup, normalise every account once, group by match key, then run the match endpoint only inside each group.
Frequently asked questions
Can I match names without an API?
Yes, the method above can be built in any language. The hard parts are the legal-form lists and transliteration variants, which is what the endpoints package.
Does a match mean it is the same company?
No. It means the names match. Confirm with the domain or registration number before merging records.
100 free credits, no card. Misses, errors and answers without live evidence are free.