Skip to content

For IT Techs

For IT Techs.

Everything you need to deploy Enterprise Contacts, from tenant consent to live caller ID.

Step 1 of 2

Grant consent for the iOS app.

A Global Administrator grants consent for the iOS app. This approves delegated, read-only access to Microsoft Graph for all users in the tenant.

02

Sign in as Global Admin

Sign in with a Microsoft 365 account that holds the Global Administrator role. A standard Microsoft permissions dialog lists the six delegated Graph permissions.

03

Accept the permissions request

Click Accept. Microsoft redirects back to enterprisecontacts.eu confirming tenant consent is registered. Users in the tenant can now sign into the app.

Requirements

  • Global Administrator role in Microsoft 365
  • Admin consent is required for Group.Read.All, GroupMember.Read.All, and User.Read.All
  • About 2 minutes

Permissions reference

Permissions requested.

Enterprise Contacts requests six delegated, read-only Microsoft Graph permissions. No write permissions are requested. The app acts on behalf of the signed-in user.

API / permission nameTypeDescriptionAdmin consent required
Contacts.ReadDelegatedRead user contactsNo
Contacts.Read.SharedDelegatedRead user and shared contactsNo
Group.Read.AllDelegatedRead all groups — needed to find source groupsYes
GroupMember.Read.AllDelegatedRead group memberships — needed to fetch contactsYes
User.ReadDelegatedSign in and read user profileNo
User.Read.AllDelegatedRead all users' full profiles — needed to resolve contact details for group membersYes

Delegated permissions only. All six permissions are delegated — the app acts on behalf of the signed-in user and is bounded by that user's own access rights. No application-level permissions are requested.

Step 2 of 2

Open the web admin.

The web admin at admin.enterprisecontacts.eu lets you create and manage Entra ID source groups without writing JSON by hand.

Open Web Admin

Requirements

  • Global Administrator role in Microsoft 365
  • Admin consent for the web admin enterprise application
  • Internet access to graph.microsoft.com

Web Admin — First use

Sign in and grant consent.

The web admin is a multitenant enterprise application. A Global Administrator must grant consent once before the tool can be used in your tenant.

02

Sign in as Global Admin

Sign in with your Microsoft 365 Global Administrator account. On first use, Microsoft presents a permissions dialog for the web admin enterprise application. Click Accept to grant consent for your tenant.

03

Create source groups

Once signed in, use the web admin to create and manage Entra ID source groups. The web admin handles all JSON formatting, group naming, and ID resolution.

Creating a source group

01

Click New Source

Enter a source name that users will see in the app, and an optional description.

02

Select a contact source type

Choose from: Entra ID security group (syncs profile contacts for group members), Shared Exchange mailbox (syncs contacts from a shared mailbox folder), or Personal Exchange contacts (the signed-in user's own contacts folder).

03

Search and confirm the source

Search Entra groups and Exchange mailboxes by name. The web admin validates the selection — no manual ID lookup required.

04

Save

The web admin creates an Entra ID security group and writes the source configuration into the group description. Configuration lives entirely in Entra ID — no external database.

Web Admin

Manage source groups from your browser.

Create and manage your Entra ID source groups in the web admin. Handles all JSON formatting, group naming, and ID resolution.

Open Web Admin

iOS app for users

Share the app when setup is complete.

Users install the app, sign in with their work account, and the right sources appear automatically.

Open Downloads →

Daily use — Step 3

Add users to source groups.

Membership of each source group controls who sees that contact source in the app. Add individual accounts, security groups, or Microsoft 365 groups.

02

Open Members and add users

Go to Members → Add members. Add individual accounts, security groups, or Microsoft 365 groups. Nested groups are supported — members of nested groups inherit source access.

03

No per-user configuration needed

Once added, users receive the source automatically the next time they open the app. No per-device profile or MDM policy to deploy.

04

Removing access

Remove the user from the source group in Entra ID. Access is revoked and contacts are removed from the device at the next sync cycle.

Tip

Assign a broad existing group — such as an All Employees group — to grant access to most of your organisation at once, without adding individuals one by one.

Daily use — Step 4

Distribute the app to users.

No MDM deployment required. Send the App Store link and users sign in with their work account. Configuration applies automatically from group membership.

App Store link
02

Users install and sign in

The app is free on the App Store. Users install it and sign in with their Microsoft 365 work account using the standard Microsoft sign-in screen.

03

Configuration applies automatically

The app reads the user's group memberships in Entra ID and discovers the source groups they belong to. Group membership is the configuration — no codes or extra steps for the user.

04

Contacts appear in iOS Contacts

After the first sync, contacts appear in the native iPhone Contacts app, caller ID, Mail, Messages, and every app that uses the system address book.

First sync timing

The initial sync may take a few minutes depending on contact count. After that, each source has a configurable notification schedule. When it's time to sync, the app notifies the user. The user can also trigger a manual sync at any time from within the app.

Optional

Distributing via MDM.

Enterprise Contacts requires no MDM — but if you manage devices with Intune or another MDM, you can distribute and update it silently like any App Store app via Apple Volume Purchasing or the Intune app catalog.

How it works

Users receive the app automatically and only sign in once. MDM changes nothing about how the app works — Entra ID group membership still controls which contact sources appear, and the app functions identically whether deployed via MDM or installed directly from the App Store. Both paths are fully supported.

Pattern

On-call and rotating duty contacts.

Keeping a rotating on-call number current in every employee's contacts is not something sync timing on iOS can do reliably. Use the PBX instead.

Recommended pattern: Create a Teams Phone call queue or hunt group with a fixed number that routes to whoever is on duty. Put that fixed number in a contact inside a shared Exchange mailbox — for example, "IT On-Call" — and sync that mailbox via Enterprise Contacts. The contact never goes stale because the rotation is managed PBX-side; employees always call the same number while the routing changes behind it.

Troubleshooting

Start every case with a diagnostics export.

The app has a one-tap diagnostics export on the Settings tab, visible to all users. It answers most "why isn't it syncing" questions without a screen-share.

02

Read the file directly

The export is plain text: app, device, and configuration state, per-source sync status, and logs. It contains no contact content and no tokens — the file's own header says so — so it is safe to forward inside your organisation.

03

Escalate with the file attached

If the export does not explain the problem, send it to support@enterprisecontacts.eu. The installId in the file is an anonymous identifier that is only useful when escalating to Enterprise Contacts support — it lets us correlate the report with our telemetry.

How contact sources are defined

Entra ID group configuration.

Enterprise Contacts uses Entra ID security groups as its configuration layer. Two group types are involved: one config group that names your prefix, and one source group per contact source.

The configuration group

Create a single security group named exactly App_EnterpriseContacts_Config in your Entra ID tenant. The app looks for this group to read your chosen group prefix.

Group name must match exactly: use App_EnterpriseContacts_Config. The lookup is not case-sensitive, but the expected group name is exactly this. The config group does not need any members — its description is all that matters.

Set the group Description to this JSON, replacing Your_Prefix_Here_ with your chosen prefix:

{"groupPrefix":"Your_Prefix_Here_"}

Example — if your organisation is Contoso and you want prefix EC_Contoso_:

{"groupPrefix":"EC_Contoso_"}

Source group name format

Each contact source visible in the app is backed by one Entra ID security group. The group name must start with your chosen prefix:

Name: {YourPrefix}{SourceLabel}
Example: EC_Contoso_CompanyContacts

Group description fields

The group description must be a valid JSON object. The web admin writes this for you — only hand-edit if creating groups manually in the Azure portal.

FieldTypeValuesDescription
namestringAnyDisplay name shown in the app. Required.
descriptionstringAnyShort subtitle shown when adding the source manually.
autoLoadbooleantrue / falsetrue = added automatically on first launch. false = only via the + button.
deleteablebooleantrue / falsetrue = user can remove the source from the app.
typeinteger0, 1, 20 = Exchange mailbox, 1 = Entra ID group, 2 = My Contacts. Required.
primaryIdstringSee referenceMailbox UPN for type 0, Object ID (GUID) for type 1, and me for type 2. Required.
secondaryIdstringFolder IDType 0 only. Exchange contact folder ID.

Type 0 — Exchange shared mailbox

Syncs contacts from a shared Exchange mailbox contact folder. Good for curated company address books.

Name: EC_Contoso_SharedMailbox

Description:
{
  "name": "Shared Mailbox",
  "description": "Reception desk contacts",
  "autoLoad": false,
  "deleteable": true,
  "type": 0,
  "primaryId": "reception@contoso.com",
  "secondaryId": "<exchange-folder-id>"
}

Mailbox read access required. Enterprise Contacts uses delegated permissions — it can only read what the signed-in user is already allowed to access. For type 0, each user must have at least Reviewer permission on the relevant contact folder in Exchange. Grant access via Exchange Admin Center or PowerShell: Add-MailboxFolderPermission.

Type 1 — Entra ID security group

Syncs the profile contact card for each group member. Good for department or team directories.

Type 1 uses two separate Entra ID groups:

  • Access group — the group you create with your prefix (e.g. EC_Contoso_CompanyContacts). Members control who can see this source. This group carries the config JSON in its description.
  • Contact group — an existing Entra ID group whose members become the synced contacts. Its Object ID goes in primaryId.

These are two different groups. A user in the access group sees the source. The contacts they see are the members of the contact group.

── Group 1 — Access group (you create this) ──
Name:        EC_Contoso_CompanyContacts
Members:     Sales Team, HR Team, ...
Description:
{
  "name": "Company Contacts",
  "description": "All company contacts",
  "autoLoad": true,
  "deleteable": false,
  "type": 1,
  "primaryId": "7e2d4f1a-9b3c-5e6d-7f8a-1b2c3d4e5f6a"
}

── Group 2 — Contact group (existing or new) ──
Name:        All-Employees
Object ID:   7e2d4f1a-9b3c-5e6d-7f8a-1b2c3d4e5f6a  ← goes in primaryId

Type 2 — Personal Exchange contacts

Syncs the signed-in user's own personal Exchange contacts folder.

Name: EC_Contoso_MyContacts

Description:
{
  "name": "My Contacts",
  "description": "Personal Exchange contacts",
  "autoLoad": true,
  "deleteable": true,
  "type": 2,
  "primaryId": "me"
}

primaryId reference by type

TypeprimaryId valuesecondaryId
0 — MailboxUser UPN, e.g. john@contoso.comExchange folder ID (required)
1 — Entra ID groupObject ID (GUID) of the contact source group — the group whose members become contacts. Not the access group itself.Not used — omit
2 — My ContactsAlways me. This tells the app to use the signed-in user's own contacts folder.Not used — omit

Limitations

Hybrid Exchange is not supported. On-premises (hybrid) Exchange mailboxes are not reachable through Microsoft Graph and cannot be used as contact sources. Entra ID group sources (type 1) work regardless of your Exchange configuration.