{"id":75575,"date":"2026-11-06T14:10:22","date_gmt":"2026-11-06T21:10:22","guid":{"rendered":"https:\/\/cirasync.com\/?p=75575"},"modified":"2026-11-06T14:11:24","modified_gmt":"2026-11-06T21:11:24","slug":"bulk-import-external-contacts-microsoft-365-gal","status":"publish","type":"post","link":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/","title":{"rendered":"Bulk Import External Contacts into Microsoft 365 GAL\u00a0"},"content":{"rendered":"<p><span data-contrast=\"auto\">Bulk importing external contacts into Microsoft 365 comes down to two things: Exchange Online PowerShell and a CSV file. The cmdlets create mail contacts, fill in their details, and put them in the Global Address List (GAL), so your team can find suppliers, partners, and field-service vendors in one place. This is tenant-level work for admins, and it&#8217;s different from importing saved contacts into your own Outlook mailbox.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Most guides stop the moment the contacts exist, and that&#8217;s usually where the real work begins. Departments, regions, and acquired businesses all add contacts on their own schedules, and IT ends up with the cleanup. You need clean source data, updates you can rerun without creating duplicates, a paper trail, and a way to get approved contacts onto employee phones, because a GAL entry doesn&#8217;t show up there on its own. We&#8217;ll walk through all of it, from a tidy CSV to a directory your team can actually use.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"TLDR\"><\/span><b><span data-contrast=\"none\">TL;DR<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><b><span data-contrast=\"auto\">PowerShell does the heavy lifting.<\/span><\/b><span data-contrast=\"auto\"> New-MailContact creates external contacts from your CSV, and Set-Contact fills in the rest.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Clean data saves you grief.<\/span><\/b><span data-contrast=\"auto\"> A named source owner, UTF-8 files, tidy phone numbers, and a duplicate check head off most problems.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Microsoft&#8217;s basic loop is a one-time tool.<\/span><\/b><span data-contrast=\"auto\"> It creates contacts but doesn&#8217;t update existing ones, so repeat imports need a stable identifier and a manifest.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Missing contacts usually have a simple cause.<\/span><\/b><span data-contrast=\"auto\"> Hidden-from-address-list settings, filters, empty fields, and offline address book timing explain most cases.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">A GAL entry isn&#8217;t a phone contact.<\/span><\/b><span data-contrast=\"auto\"> Employees can search the GAL, but saving approved contacts to their phones takes a separate step.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">CiraSync covers that last step.<\/span><\/b><span data-contrast=\"auto\"> After IT finishes provisioning, we distribute approved GAL contacts to employee phones so the work doesn&#8217;t stop at the import.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"What_belongs_in_the_GAL\"><\/span><b><span data-contrast=\"none\">What belongs in the GAL?<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">Mail contacts are the right fit when your team needs to find and email people outside the company, like suppliers, partners, and field-service vendors. A few similar-sounding terms cause most of the confusion, so let&#8217;s sort them out before you import anything.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<table data-tablestyle=\"MsoNormalTable\" data-tablelook=\"1696\" aria-rowcount=\"5\" aria-colcount=\"4\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">Object<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">What it is<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">Sign-in to your tenant<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">Best use<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Mail contact<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">A directory object with an external email address, created by an administrator<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">No<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">External suppliers, partners, and vendors that employees email often<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Mailbox contact<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">A saved contact inside one user&#8217;s personal mailbox<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Not applicable<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">One person&#8217;s own address book, visible only to that person unless shared<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Guest identity<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">A Microsoft Entra identity for an outside person who needs access to your resources<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Yes, through their own organization or account<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Collaboration on files, Teams, and apps<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Distribution group member<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">A recipient added to a group address, including mail contacts<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Depends on the recipient<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Sending one message to a defined audience<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-contrast=\"auto\">This guide focuses on mail contacts. They don&#8217;t need licensed user mailboxes, which keeps cost and access questions off the table. They also work as distribution group members, so one vendor list can serve both the address book and group mailings.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">If an outside person needs to open a shared document or join a Teams channel, a mail contact won&#8217;t do the job. Use a guest identity for that. If your team just needs to find a phone number or email address, a mail contact is the lighter choice.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Prepare_a_clean_governed_contact_source\"><\/span><b><span data-contrast=\"none\">Prepare a clean, governed contact source<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">A clean source file heads off most import problems before you run a single cmdlet. Sort these out first:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li><b><span data-contrast=\"auto\">Name a source owner.<\/span><\/b><span data-contrast=\"auto\"> One person or team approves what goes into the file and answers questions when a record looks off.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Keep admin access tight.<\/span><\/b><span data-contrast=\"auto\"> Microsoft recommends roles with the fewest permissions and advises limiting the number of Global Administrators. Give whoever runs the import a recipient management role instead.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Save the CSV as UTF-8.<\/span><\/b><span data-contrast=\"auto\"> Names with accented or non-Latin characters only survive the import if the file keeps its encoding.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Tidy up phone numbers.<\/span><\/b><span data-contrast=\"auto\"> Pick one format, such as E.164 (+12065550100), so everyone sees consistent numbers in the directory.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Check for duplicates.<\/span><\/b><span data-contrast=\"auto\"> Compare email addresses and display names before importing, because a repeated name can block object creation.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Decide on visibility early.<\/span><\/b><span data-contrast=\"auto\"> Choose whether contacts show up in the GAL or stay hidden for distribution group use only.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Microsoft&#8217;s published procedure requires four fields to create an external contact: ExternalEmailAddress, Name, FirstName, and LastName. Your cmdlets and governance rules may ask for more. The synthetic example below adds a SourceId column, which lets you track each record across repeat imports.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">SourceId,ExternalEmailAddress,Name,FirstName,LastName,Company,Title,Department,Phone,MobilePhone<\/span>\u00a0\r\n<a href=\"mailto:V-1001,alex.rivera@vendor-one.example,Alex\"><span data-contrast=\"none\">V-1001,alex.rivera@vendor-one.example,Alex<\/span><\/a><span data-contrast=\"auto\"> Rivera (Vendor One),Alex,Rivera,Vendor One Logistics,Dispatch Lead,Operations,+12065550100,+12065550101<\/span>\u00a0\r\n<a href=\"mailto:V-1002,sam.okafor@partner-two.example,Sam\"><span data-contrast=\"none\">V-1002,sam.okafor@partner-two.example,Sam<\/span><\/a><span data-contrast=\"auto\"> Okafor (Partner Two),Sam,Okafor,Partner Two Services,Account Manager,Field Services,+12065550102,+12065550103<\/span>\u00a0\r\n<a href=\"mailto:V-1003,jo.lindgren@supplier-three.example,Jo\"><span data-contrast=\"none\">V-1003,jo.lindgren@supplier-three.example,Jo<\/span><\/a><span data-contrast=\"auto\"> Lindgren (Supplier Three),Jo,Lindgren,Supplier Three AB,Support Engineer,Maintenance,+12065550104,<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">Before you import, run a quick pre-flight check. This script flags blank required fields and repeated email addresses:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">$rows = Import-Csv .\\ExternalContacts.csv -Encoding UTF8<\/span>\u00a0\r\n<span data-contrast=\"auto\">$required = 'SourceId','ExternalEmailAddress','Name','FirstName','LastName'<\/span>\u00a0\r\n<span data-contrast=\"auto\">$problems = @()<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">foreach ($r in $rows) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0foreach ($f in $required) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ([string]::IsNullOrWhiteSpace($r.$f)) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$problems += [pscustomobject]@{ SourceId = $r.SourceId; Issue = \"Missing $f\" }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\">}<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$rows | Group-Object ExternalEmailAddress | Where-Object Count -gt 1 | ForEach-Object {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0$problems += [pscustomobject]@{ SourceId = ($_.Group.SourceId -join ';'); Issue = \"Duplicate email: $($_.Name)\" }<\/span>\u00a0\r\n<span data-contrast=\"auto\">}<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">if ($problems) { $problems | Export-Csv .\\preflight-issues.csv -NoTypeInformation; $problems }<\/span>\u00a0\r\n<span data-contrast=\"auto\">else { 'Pre-flight check passed.' }<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Import_external_contacts_with_Exchange_Online_PowerShell\"><\/span><b><span data-contrast=\"none\">Import external contacts with Exchange Online PowerShell<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">This workflow follows <\/span><a href=\"https:\/\/learn.microsoft.com\/en-us\/purview\/bulk-import-external-contacts\"><span data-contrast=\"none\">Microsoft&#8217;s published procedure<\/span><\/a><span data-contrast=\"auto\"> for creating contacts and then adding their properties. We added error handling and a log for every row, so one bad record can&#8217;t hide in a wall of console output.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Connect_securely\"><\/span><b><span data-contrast=\"none\">Connect securely<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">Install the ExchangeOnlineManagement module, then connect with the account assigned to this task:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">Install-Module ExchangeOnlineManagement -Scope CurrentUser<\/span>\r\n<span data-contrast=\"auto\">Connect-ExchangeOnline -UserPrincipalName <\/span><a href=\"mailto:importadmin@yourtenant.example\"><span data-contrast=\"none\">importadmin@yourtenant.example<\/span><\/a><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">Use a named administrator account with a recipient management role, and close the session when the import finishes.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Validate_with_a_small_pilot\"><\/span><b><span data-contrast=\"none\">Validate with a small pilot<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">Build a pilot file from the first five rows and run everything against it first:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">Import-Csv .\\ExternalContacts.csv -Encoding UTF8 |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Select-Object -First 5 |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Export-Csv .\\pilot.csv -NoTypeInformation -Encoding UTF8<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">Ask the source owner to review the pilot results before you scale up.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Create_objects_with_New-MailContact\"><\/span><b><span data-contrast=\"none\">Create objects with New-MailContact<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">This loop creates each contact and records what happened with every row:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">$rows = Import-Csv .\\pilot.csv -Encoding UTF8<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$createLog = foreach ($r in $rows) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0try {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0New-MailContact -Name $r.Name -DisplayName $r.Name `<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-ExternalEmailAddress $r.ExternalEmailAddress `<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-FirstName $r.FirstName -LastName $r.LastName `<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-ErrorAction Stop | Out-Null<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span>\r\n\r\n<span data-contrast=\"auto\">\u00a0 \u00a0 \u00a0 \u00a0<\/span><span data-contrast=\"auto\">Set-MailContact -Identity $r.Name -CustomAttribute1 $r.SourceId -ErrorAction Stop<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[pscustomobject]@{ SourceId = $r.SourceId; Name = $r.Name; Result = 'Created'; Detail = '' }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0catch {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0[pscustomobject]@{ SourceId = $r.SourceId; Name = $r.Name; Result = 'Error'; Detail = $_.Exception.Message }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\">}<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$createLog | Export-Csv .\\create-log.csv -NoTypeInformation<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Enrich_attributes_with_Set-Contact\"><\/span><b><span data-contrast=\"none\">Enrich attributes with Set-Contact<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">New-MailContact only sets the required properties, so Set-Contact adds the rest. Microsoft notes that a blank value for some parameters, such as Manager, can cause an error that stops the update for that contact. This version sends only the fields that have values, and it stamps each object with its SourceId in CustomAttribute1:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">$optional = 'Company','Title','Department','Phone','MobilePhone'<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$enrichLog = foreach ($r in $rows) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0$params = @{ Identity = $r.Name }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0foreach ($f in $optional) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (-not [string]::IsNullOrWhiteSpace($r.$f)) { $params[$f] = $r.$f }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0try {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Set-Contact @params -ErrorAction Stop<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[pscustomobject]@{ SourceId = $r.SourceId; Result = 'Updated'; Detail = '' }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0catch {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[pscustomobject]@{ SourceId = $r.SourceId; Result = 'Error'; Detail = $_.Exception.Message }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\">}<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$enrichLog | Export-Csv .\\enrich-log.csv -NoTypeInformation<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Inspect_imported_objects_and_reconcile_counts\"><\/span><b><span data-contrast=\"none\">Inspect imported objects and reconcile counts<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">Now compare what the file promised with what the tenant actually holds:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">$found = Get-MailContact -ResultSize Unlimited |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Where-Object { $_.CustomAttribute1 -in $rows.SourceId }<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">\"Expected: $($rows.Count) \u00a0\u00a0Found: <\/span><a href=\"mailto:$(@($found).Count\"><span data-contrast=\"none\">$(@($found).Count<\/span><\/a><span data-contrast=\"auto\">)\"<\/span>\u00a0\r\n<span data-contrast=\"auto\">$rows.SourceId | Where-Object { $_ -notin $found.CustomAttribute1 }<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">Any SourceId that prints is missing from the tenant. Check the logs for that record, fix the source row, and run it again. You can also spot-check contacts in the Exchange admin center under Recipients, then Contacts.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Make_repeat_imports_safe\"><\/span><b><span data-contrast=\"none\">Make repeat imports safe<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">Microsoft&#8217;s basic loop is built for a first load, not a recurring one. Rerun the create command and you&#8217;ll get errors for contacts that already exist, while new rows still get created. That&#8217;s fine for a one-time import and risky for a monthly feed. A repeatable process comes down to four habits:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li><b><span data-contrast=\"auto\">Match on a stable identifier.<\/span><\/b><span data-contrast=\"auto\"> Names change and email addresses get reassigned, so use a SourceId from your system of record. The scripts above store it in CustomAttribute1.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Update instead of recreate.<\/span><\/b><span data-contrast=\"auto\"> Look up each SourceId first. Update the match, or create a new contact when there isn&#8217;t one.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Get ahead of name collisions.<\/span><\/b><span data-contrast=\"auto\"> Add a company suffix to the Name value, like \u00abAlex Rivera (Vendor One)\u00bb. If a create fails because a different record already holds the name, log it for review instead of overwriting.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Keep an import manifest.<\/span><\/b><span data-contrast=\"auto\"> Save one dated log per run showing what was created, updated, or rejected.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">This version of the loop puts all four habits to work. Try it on your pilot file first:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">$existing = @{}<\/span>\u00a0\r\n<span data-contrast=\"auto\">Get-MailContact -ResultSize Unlimited |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Where-Object { $_.CustomAttribute1 } |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0ForEach-Object { $existing[$_.CustomAttribute1] = $_ }<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$optional = 'Company','Title','Department','Phone','MobilePhone'<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$manifest = foreach ($r in $rows) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0$params = @{ FirstName = $r.FirstName; LastName = $r.LastName }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0foreach ($f in $optional) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (-not [string]::IsNullOrWhiteSpace($r.$f)) { $params[$f] = $r.$f }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0try {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($existing.ContainsKey($r.SourceId)) {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$guid = $existing[$r.SourceId].Guid.ToString()<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Set-MailContact -Identity $guid -ExternalEmailAddress $r.ExternalEmailAddress `<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-DisplayName $r.Name -ErrorAction Stop<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Set-Contact -Identity $guid @params -ErrorAction Stop<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$action = 'Updated'<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0New-MailContact -Name $r.Name -DisplayName $r.Name `<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-ExternalEmailAddress $r.ExternalEmailAddress `<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-FirstName $r.FirstName -LastName $r.LastName -ErrorAction Stop | Out-Null<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Set-Contact -Identity $r.Name @params -ErrorAction Stop<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Set-MailContact -Identity $r.Name -CustomAttribute1 $r.SourceId -ErrorAction Stop<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$action = 'Created'<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0[pscustomobject]@{ RunDate = (Get-Date -Format s); SourceId = $r.SourceId; Name = $r.Name; Action = $action; Detail = '' }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0catch {<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0[pscustomobject]@{ RunDate = (Get-Date -Format s); SourceId = $r.SourceId; Name = $r.Name; Action = 'Error'; Detail = $_.Exception.Message }<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0}<\/span>\u00a0\r\n<span data-contrast=\"auto\">}<\/span>\u00a0\r\n\u00a0\r\n<span data-contrast=\"auto\">$manifest | Export-Csv \".\\manifest-$(Get-Date -Format yyyyMMdd-HHmm).csv\" -NoTypeInformation<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">Contacts leave the source over time, too. When a vendor drops off the approved list, the script above leaves its directory object alone. Instead of deleting anything automatically, build a review list. This query finds contacts that carry your SourceId prefix but no longer appear in the current file:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">$rows = Import-Csv .\\ExternalContacts.csv -Encoding UTF8<\/span> <span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span>\r\n\r\n<span data-contrast=\"auto\">Get-MailContact -ResultSize Unlimited |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Where-Object { $_.CustomAttribute1 -like 'V-*' -and $_.CustomAttribute1 -notin $rows.SourceId } |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Select-Object Name, ExternalEmailAddress, CustomAttribute1 |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Export-Csv .\\removal-candidates.csv -NoTypeInformation<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">The prefix keeps the list limited to records this import created. Have the source owner and an administrator review the file together before anyone removes an object.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Troubleshoot_missing_or_incomplete_contacts\"><\/span><b><span data-contrast=\"none\">Troubleshoot missing or incomplete contacts<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">Most missing-contact reports come down to one of five causes. Start with the object in Exchange Online, then work your way out to the client.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<table data-tablestyle=\"MsoNormalTable\" data-tablelook=\"1696\" aria-rowcount=\"6\" aria-colcount=\"3\">\n<tbody>\n<tr aria-rowindex=\"1\">\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Symptom<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">Likely cause<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><b><span data-contrast=\"auto\">What to check<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:2,&quot;335551620&quot;:2,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"2\">\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Contact exists in the admin center but not in the address book<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Hidden from address lists<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Review the HiddenFromAddressListsEnabled setting on the contact<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"3\">\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Contact appears for some groups of people but not others<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Address list or filter membership<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Confirm the contact matches the filter of the address list those users browse<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"4\">\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Contact has a name and email but no title or phone<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Enrichment step failed or the source cell was empty<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Read the enrich log for that SourceId and confirm the CSV value is populated<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"5\">\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Two entries for the same person<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Repeat import recreated the object, or the name differs slightly<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Compare SourceId values and use the update path in the manifest script<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<tr aria-rowindex=\"6\">\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Visible in Outlook on the web but not in desktop Outlook<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Client uses a cached offline address book<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<td data-celllook=\"4369\"><span data-contrast=\"auto\">Check the OAB generation schedule and the client&#8217;s last download<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-contrast=\"auto\">To inspect a single contact quickly, run:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<pre><span data-contrast=\"auto\">Get-MailContact -Identity \"Alex Rivera (Vendor One)\" |<\/span>\u00a0\r\n<span data-contrast=\"auto\"> \u00a0\u00a0\u00a0Format-List Name, ExternalEmailAddress, HiddenFromAddressListsEnabled, CustomAttribute1<\/span><span data-ccp-props=\"{&quot;335551550&quot;:0,&quot;335551620&quot;:0}\">\u00a0<\/span><\/pre>\n<p><span data-contrast=\"auto\">Microsoft documents hiding contacts as a deliberate option for companies that only need them as distribution group members. If a contact was hidden on purpose, there&#8217;s nothing to fix.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Clients behave differently, and no single propagation time fits every tenant, device, or client. Outlook on the web reads the directory directly, while desktop Outlook in cached mode relies on a downloaded offline address book. Phones add one more layer, which we&#8217;ll get to next.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Importing_is_not_mobile_distribution\"><\/span><b><span data-contrast=\"none\">Importing is not mobile distribution<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">A successful import puts contacts in the directory. It doesn&#8217;t put them on anyone&#8217;s phone. Employees can look up a GAL entry through a directory search in a connected app, but that entry isn&#8217;t saved in the phone&#8217;s native contact list. Features that rely on saved contacts, like caller ID, may not recognize a vendor who only exists in the GAL. Our <\/span><a href=\"https:\/\/cirasync.com\/blog-articles\/gal-sync-guide\/\"><span data-contrast=\"none\">GAL sync guide<\/span><\/a><span data-contrast=\"auto\"> covers how GAL contacts reach smartphones.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Closing that gap takes a little more planning:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li><b><span data-contrast=\"auto\">Scope the audience.<\/span><\/b><span data-contrast=\"auto\"> A field technician needs the service vendor list, and an accounts payable team needs the supplier list. Scoped recipient groups keep each phone useful instead of crowded.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Plan for change.<\/span><\/b><span data-contrast=\"auto\"> Vendors rotate staff, switch companies, and end contracts. Phones need those updates as much as the directory does.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Test on real devices.<\/span><\/b><span data-contrast=\"auto\"> Run a pilot group on iOS and Android. Confirm that a new contact appears, an edited contact updates, and a removed contact disappears.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">This is where CiraSync comes in. IT still provisions and governs mail contacts in Exchange Online. From there, we <\/span><a href=\"https:\/\/cirasync.com\/solutions\/directory-to-phone\/\"><span data-contrast=\"none\">distribute approved GAL contacts to employee phones<\/span><\/a><span data-contrast=\"auto\"> on a schedule IT sets. IT picks the approved contacts, groups, and calendars once, and the sync takes care of the updates that follow. If a contact still doesn&#8217;t show up on a device, our <\/span><a href=\"https:\/\/cirasync.com\/blog-articles\/outlook-not-syncing-calendar-contacts-fix-guide\/\"><span data-contrast=\"none\">Outlook not syncing fix-it guide<\/span><\/a><span data-contrast=\"auto\"> walks through iPhone, Android, web, and desktop.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Enterprise_operating_checklist\"><\/span><b><span data-contrast=\"none\">Enterprise operating checklist<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">A one-time import turns into a dependable process when you have these six habits in place:<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<ul>\n<li><b><span data-contrast=\"auto\">Source owner:<\/span><\/b><span data-contrast=\"auto\"> One named person or team approves every record and settles disputes.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Pilot approval:<\/span><\/b><span data-contrast=\"auto\"> The owner signs off on a small pilot before the full file runs.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Reconciliation:<\/span><\/b><span data-contrast=\"auto\"> Every run compares expected and actual counts, and someone looks into each gap.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Monitoring:<\/span><\/b><span data-contrast=\"auto\"> Someone reads the create, enrich, and manifest logs after each run, not only when users complain.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Joiners, movers, and leavers:<\/span><\/b><span data-contrast=\"auto\"> New vendor contacts, changed details, and departures all have a clear path from the source to the directory and to employee phones.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"auto\">Periodic review:<\/span><\/b><span data-contrast=\"auto\"> The source owner and an administrator review the removal candidate list, and the access held by the import account, on a set schedule.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:0,&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">The same discipline applies to any tool that touches directory data. When you evaluate a distribution layer, ask where contact data lives and who controls administrative access. Our <\/span><a href=\"https:\/\/cirasync.com\/security-at-cirasync\/\"><span data-contrast=\"none\">security page<\/span><\/a><span data-contrast=\"auto\"> answers both questions for CiraSync.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"See_how_this_fits_your_workforce\"><\/span><b><span data-contrast=\"none\">See how this fits your workforce<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span data-contrast=\"auto\">Provisioning external contacts is only half the job. Planning a vendor directory rollout, merging contacts after an acquisition, or watching phones drift out of step with the GAL? <\/span><a href=\"https:\/\/calendly.com\/ciraapps-sales\/talk-to-sales\"><span data-contrast=\"none\">Talk to us<\/span><\/a><span data-contrast=\"auto\"> about a scoped contact-sync rollout. We&#8217;ll look at your environment, map it to the workflow above, and show you how approved contacts reach the people who need them.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h2 aria-level=\"2\"><span class=\"ez-toc-section\" id=\"FAQ\"><\/span><b><span data-contrast=\"none\">FAQ<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:299,&quot;335559739&quot;:299}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Can_I_bulk_import_external_contacts_without_creating_licensed_user_mailboxes\"><\/span><b><span data-contrast=\"none\">Can I bulk import external contacts without creating licensed user mailboxes?<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">Yes. External contacts are mail contacts, which are directory objects that point to an outside email address, so they aren&#8217;t user mailboxes. Exchange Online PowerShell creates them from a CSV with the New-MailContact cmdlet.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"How_do_I_update_existing_external_contacts_without_creating_duplicates\"><\/span><b><span data-contrast=\"none\">How do I update existing external contacts without creating duplicates?<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">Match each row to its existing contact by a stable identifier, then update the match and create a new contact only when none exists. Storing a SourceId in a custom attribute, such as CustomAttribute1, gives every run something reliable to match on. Microsoft&#8217;s basic loop doesn&#8217;t do this, so rerunning it can return errors for contacts that already exist.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Why_are_imported_contacts_missing_from_Outlook_or_an_iPhone\"><\/span><b><span data-contrast=\"none\">Why are imported contacts missing from Outlook or an iPhone?<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">Usually it&#8217;s a hidden-from-address-lists setting, an address list filter, an enrichment step that failed on an empty field, or a client that hasn&#8217;t refreshed its address book yet. On a phone, a contact may also exist only as a GAL lookup result and not as a saved contact. No single propagation time fits every environment.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n<h3 aria-level=\"3\"><span class=\"ez-toc-section\" id=\"Does_importing_contacts_into_the_GAL_automatically_save_them_on_employee_phones\"><\/span><b><span data-contrast=\"none\">Does importing contacts into the GAL automatically save them on employee phones?<\/span><\/b><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:281,&quot;335559739&quot;:281}\">\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span data-contrast=\"auto\">No. The import creates directory objects that employees can look up. Saving approved contacts to native phone contact lists takes a separate distribution step, which CiraSync can handle after IT completes the import.<\/span><span data-ccp-props=\"{&quot;134233117&quot;:false,&quot;134233118&quot;:false,&quot;335551550&quot;:0,&quot;335551620&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:240}\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bulk importing external contacts into Microsoft 365 comes down to two things: Exchange Online PowerShell and a CSV file. The cmdlets create mail contacts, fill in their details, and put them in the Global Address List (GAL), so your team can find suppliers, partners, and field-service vendors in one place. This is tenant-level work for [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":75571,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","_nextfly_llmd_date_locked":false,"footnotes":"","_ppma_block_editor_authors":"","_links_to":"","_links_to_target":""},"categories":[1478,13550],"tags":[],"ppma_author":[13546],"class_list":["post-75575","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-articles","category-featured-articles","rawdate-2026-11-06"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Bulk Import External Contacts into Microsoft 365 GAL\u00a0 &#8212; CiraSync<\/title>\n<meta name=\"description\" content=\"A GAL import adds directory entries, not phone contacts. Bulk import with PowerShell and a CSV, then sync approved contacts to phones. CiraSync\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bulk Import External Contacts into Microsoft 365 GAL\u00a0\" \/>\n<meta property=\"og:description\" content=\"A GAL import adds directory entries, not phone contacts. Bulk import with PowerShell and a CSV, then sync approved contacts to phones. CiraSync\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/\" \/>\n<meta property=\"og:site_name\" content=\"CiraSync\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/CiraSync\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-06T21:10:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-06T21:11:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/11\/bulk-import-external-contacts-featured-980x551.png.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"980\" \/>\n\t<meta property=\"og:image:height\" content=\"551\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Ema Zulic\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CiraSync\" \/>\n<meta name=\"twitter:site\" content=\"@CiraSync\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ema Zulic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/\"},\"author\":{\"name\":\"Ema Zulic\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#\\\/schema\\\/person\\\/a179dfe101e83de2d1e79161e39e58d0\"},\"headline\":\"Bulk Import External Contacts into Microsoft 365 GAL\u00a0\",\"datePublished\":\"2026-11-06T21:10:22+00:00\",\"dateModified\":\"2026-11-06T21:11:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/\"},\"wordCount\":2230,\"publisher\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/bulk-import-external-contacts-featured-980x551.png.webp\",\"articleSection\":[\"Blog Articles\",\"Featured\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/\",\"url\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/\",\"name\":\"Bulk Import External Contacts into Microsoft 365 GAL\u00a0 &#8212; CiraSync\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/bulk-import-external-contacts-featured-980x551.png.webp\",\"datePublished\":\"2026-11-06T21:10:22+00:00\",\"dateModified\":\"2026-11-06T21:11:24+00:00\",\"description\":\"A GAL import adds directory entries, not phone contacts. Bulk import with PowerShell and a CSV, then sync approved contacts to phones. CiraSync\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/bulk-import-external-contacts-featured-980x551.png.webp\",\"contentUrl\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/bulk-import-external-contacts-featured-980x551.png.webp\",\"width\":980,\"height\":551},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/blog-articles\\\/bulk-import-external-contacts-microsoft-365-gal\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/cirasync.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bulk Import External Contacts into Microsoft 365 GAL\u00a0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/cirasync.com\\\/es\\\/\",\"name\":\"CiraSync\",\"description\":\"Sync the Office 365 GAL, public folders and calendars to smartphones.\",\"publisher\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/cirasync.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#organization\",\"name\":\"CiraSync\",\"url\":\"https:\\\/\\\/cirasync.com\\\/es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/CiraSync-Logo-.png\",\"contentUrl\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2019\\\/07\\\/CiraSync-Logo-.png\",\"width\":1200,\"height\":671,\"caption\":\"CiraSync\"},\"image\":{\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/CiraSync\\\/\",\"https:\\\/\\\/x.com\\\/CiraSync\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/cira-apps-limited\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCdFkOfXlRAWRadzGit3jJZA\\\/videos\"],\"description\":\"CiraSync automatically syncs CRM, contact & calendar data from M365, Exchange & many CRMs to every smartphone.\",\"email\":\"support@cirasync.com\",\"telephone\":\"1 (202) 747 0888\",\"legalName\":\"CiraSync\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/es\\\/#\\\/schema\\\/person\\\/a179dfe101e83de2d1e79161e39e58d0\",\"name\":\"Ema Zulic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Ema-Zulic.jpg6908e25f5b970f7afc565f7c922b5564\",\"url\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Ema-Zulic.jpg\",\"contentUrl\":\"https:\\\/\\\/cirasync.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Ema-Zulic.jpg\",\"caption\":\"Ema Zulic\"},\"description\":\"Ema Zulic is the Vice President of Product Management and Customer Support at Cira Apps Ltd, where she drives product strategy, customer experience, and global support operations. With over 10 years of SaaS support expertise and more than 20 years of overall customer support leadership, Ema is blending deep technical insight with a passion for building high\u2011performing, customer\u2011centric teams. Her work focuses on delivering intuitive products, refining support processes, and creating seamless experiences for enterprise organizations. Outside of her leadership role, Ema shares practical, real\u2011world guidance to help companies strengthen their support models, improve operational efficiency, and elevate the customer journey.\",\"url\":\"https:\\\/\\\/cirasync.com\\\/es\\\/author\\\/ema-zulic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bulk Import External Contacts into Microsoft 365 GAL\u00a0 &#8212; CiraSync","description":"A GAL import adds directory entries, not phone contacts. Bulk import with PowerShell and a CSV, then sync approved contacts to phones. CiraSync","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/\/","og_locale":"es_ES","og_type":"article","og_title":"Bulk Import External Contacts into Microsoft 365 GAL\u00a0","og_description":"A GAL import adds directory entries, not phone contacts. Bulk import with PowerShell and a CSV, then sync approved contacts to phones. CiraSync","og_url":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/","og_site_name":"CiraSync","article_publisher":"https:\/\/www.facebook.com\/CiraSync\/","article_published_time":"2026-11-06T21:10:22+00:00","article_modified_time":"2026-11-06T21:11:24+00:00","og_image":[{"width":980,"height":551,"url":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/11\/bulk-import-external-contacts-featured-980x551.png.webp","type":"image\/webp"}],"author":"Ema Zulic","twitter_card":"summary_large_image","twitter_creator":"@CiraSync","twitter_site":"@CiraSync","twitter_misc":{"Escrito por":"Ema Zulic","Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#article","isPartOf":{"@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/"},"author":{"name":"Ema Zulic","@id":"https:\/\/cirasync.com\/es\/#\/schema\/person\/a179dfe101e83de2d1e79161e39e58d0"},"headline":"Bulk Import External Contacts into Microsoft 365 GAL\u00a0","datePublished":"2026-11-06T21:10:22+00:00","dateModified":"2026-11-06T21:11:24+00:00","mainEntityOfPage":{"@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/"},"wordCount":2230,"publisher":{"@id":"https:\/\/cirasync.com\/es\/#organization"},"image":{"@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#primaryimage"},"thumbnailUrl":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/11\/bulk-import-external-contacts-featured-980x551.png.webp","articleSection":["Blog Articles","Featured"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/","url":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/","name":"Bulk Import External Contacts into Microsoft 365 GAL\u00a0 &#8212; CiraSync","isPartOf":{"@id":"https:\/\/cirasync.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#primaryimage"},"image":{"@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#primaryimage"},"thumbnailUrl":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/11\/bulk-import-external-contacts-featured-980x551.png.webp","datePublished":"2026-11-06T21:10:22+00:00","dateModified":"2026-11-06T21:11:24+00:00","description":"A GAL import adds directory entries, not phone contacts. Bulk import with PowerShell and a CSV, then sync approved contacts to phones. CiraSync","breadcrumb":{"@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#primaryimage","url":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/11\/bulk-import-external-contacts-featured-980x551.png.webp","contentUrl":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/11\/bulk-import-external-contacts-featured-980x551.png.webp","width":980,"height":551},{"@type":"BreadcrumbList","@id":"https:\/\/cirasync.com\/es\/blog-articles\/bulk-import-external-contacts-microsoft-365-gal\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cirasync.com\/es\/"},{"@type":"ListItem","position":2,"name":"Bulk Import External Contacts into Microsoft 365 GAL\u00a0"}]},{"@type":"WebSite","@id":"https:\/\/cirasync.com\/es\/#website","url":"https:\/\/cirasync.com\/es\/","name":"CiraSync","description":"Sync the Office 365 GAL, public folders and calendars to smartphones.","publisher":{"@id":"https:\/\/cirasync.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cirasync.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/cirasync.com\/es\/#organization","name":"CiraSync","url":"https:\/\/cirasync.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cirasync.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/cirasync.com\/wp-content\/uploads\/2019\/07\/CiraSync-Logo-.png","contentUrl":"https:\/\/cirasync.com\/wp-content\/uploads\/2019\/07\/CiraSync-Logo-.png","width":1200,"height":671,"caption":"CiraSync"},"image":{"@id":"https:\/\/cirasync.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/CiraSync\/","https:\/\/x.com\/CiraSync","https:\/\/www.linkedin.com\/company\/cira-apps-limited","https:\/\/www.youtube.com\/channel\/UCdFkOfXlRAWRadzGit3jJZA\/videos"],"description":"CiraSync automatically syncs CRM, contact & calendar data from M365, Exchange & many CRMs to every smartphone.","email":"support@cirasync.com","telephone":"1 (202) 747 0888","legalName":"CiraSync"},{"@type":"Person","@id":"https:\/\/cirasync.com\/es\/#\/schema\/person\/a179dfe101e83de2d1e79161e39e58d0","name":"Ema Zulic","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/01\/Ema-Zulic.jpg6908e25f5b970f7afc565f7c922b5564","url":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/01\/Ema-Zulic.jpg","contentUrl":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/01\/Ema-Zulic.jpg","caption":"Ema Zulic"},"description":"Ema Zulic is the Vice President of Product Management and Customer Support at Cira Apps Ltd, where she drives product strategy, customer experience, and global support operations. With over 10 years of SaaS support expertise and more than 20 years of overall customer support leadership, Ema is blending deep technical insight with a passion for building high\u2011performing, customer\u2011centric teams. Her work focuses on delivering intuitive products, refining support processes, and creating seamless experiences for enterprise organizations. Outside of her leadership role, Ema shares practical, real\u2011world guidance to help companies strengthen their support models, improve operational efficiency, and elevate the customer journey.","url":"https:\/\/cirasync.com\/es\/author\/ema-zulic\/"}]}},"authors":[{"term_id":13546,"user_id":12,"is_guest":0,"slug":"ema-zulic","display_name":"Ema Zulic","avatar_url":{"url":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/01\/Ema-Zulic.jpg","url2x":"https:\/\/cirasync.com\/wp-content\/uploads\/2026\/01\/Ema-Zulic.jpg"},"avatar_alt":"","avatar_decorative":"","author_category":"1","first_name":"Ema","last_name":"Zulic","user_url":"","job_title":"","description":"<strong>Ema Zulic<\/strong> is the Vice President of Product Management and Customer Support at Cira Apps Ltd, where she drives product strategy, customer experience, and global support operations. With over <strong>10 years of SaaS support expertise and more than 20 years of overall customer support leadership<\/strong>, Ema is blending deep technical insight with a passion for building high\u2011performing, customer\u2011centric teams. Her work focuses on delivering intuitive products, refining support processes, and creating seamless experiences for enterprise organizations. Outside of her leadership role, Ema shares practical, real\u2011world guidance to help companies strengthen their support models, improve operational efficiency, and elevate the customer journey."}],"_links":{"self":[{"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/posts\/75575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/comments?post=75575"}],"version-history":[{"count":1,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/posts\/75575\/revisions"}],"predecessor-version":[{"id":75576,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/posts\/75575\/revisions\/75576"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/media\/75571"}],"wp:attachment":[{"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/media?parent=75575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/categories?post=75575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/tags?post=75575"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cirasync.com\/es\/wp-json\/wp\/v2\/ppma_author?post=75575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}