📌 Overview
This guide walks you through building a scheduled sync that reads users from Microsoft Entra ID (Azure AD) via Microsoft Graph and upserts them into a Dataverse table. It covers:
App registration and Graph permissions
Power Automate HTTP authentication (client credentials)
Parsing results and mapping to Dataverse columns
Idempotent insert/update (upsert) using List Rows + Update/Create (supported)
Optional: True Upsert via Dataverse Web API
Pagination, performance, and error handling
❗ Note: The older Azure AD/Entra connector “List users” action is no longer available. Use Microsoft Graph via HTTP.
🧱 Prerequisites
Dataverse Environment with appropriate maker/admin permissions.
Dataverse table to store AD users (e.g.,
AAD Users).Azure App Registration (client credentials flow).
Admin consent for Microsoft Graph application permissions.
Power Automate (Cloud) access with HTTP premium action.
🗃️ Dataverse Table Design
Table: AAD Users (logical name e.g., contoso_aadusers)
Recommended columns (logical names shown as examples):
contoso_azureadobjectid(Text) — Azure AD Object ID (Unique key candidate)contoso_userprincipalname(Text) — UPN (Alternative key candidate)contoso_fullname(Text) — displayNamecontoso_email(Text) — mailcontoso_jobtitle(Text)contoso_department(Text)contoso_employeeid(Text)contoso_mobilephone(Text)contoso_companyname(Text) — companyNamecontoso_usertype(Choice) — e.g., Member=1, Guest=2contoso_accountenabled(Two options / Boolean)contoso_lastsynceddate(DateTime)
✅ Create an Alternate Key on either
contoso_azureadobjectid(preferred) orcontoso_userprincipalnameto maintain data integrity and prevent duplicates.

🔐 Azure App Registration (Microsoft Entra ID → App registrations)
Register app
Name:
AD-User-Sync-AppSupported account types: Single tenant.
Client secret
Certificates & secrets → New client secret.
Copy Client ID, Tenant ID, and Secret (store securely—never paste in chat or logs).
Permissions (Application)
Microsoft Graph → Application permissions
User.Read.AllDirectory.Read.All
Click Grant admin consent and ensure status is Granted.

🛠️ Step-by-Step: Build the Scheduled Flow
1) Create a Scheduled Cloud Flow
Trigger: Recurrence
Frequency: Daily / 6 hours / as per your needs.
2) Add HTTP action (Premium)
Authentication:
Active Directory OAuthAuthority:
https://login.microsoftonline.comTenant:
<your-tenant-guid>Audience:
https://graph.microsoft.comClient ID:
<app-client-id>Credential Type: Secret
Secret:
<client-secret>(enable Secure Inputs/Outputs in action settings)
Method:
GET
URI (single line):




Join the conversation! Your thoughts help the community grow.