Microsoft Dynamics 365 CRM
Microsoft Dynamics 365 CRM is a cloud-based business applications platform that provides customer relationship management (CRM). You can use Microsoft Dynamics 365 CRM as a data source when landing or replicating data.
Microsoft Dynamics 365 CRM integration replicates data using the Dynamics 365 Web API.
Preparing for authentication
To access your data, you need to authenticate the connection with your account credentials.
To set up your Microsoft Dynamics 365 CRM account, you need:
- A Microsoft Dynamics 365 CRM (Dataverse) environment and its organization URI in the format https://<your-organization>.crm.dynamics.com.
- Access to the Azure portal or the Microsoft Entra admin center.
- Permissions to register applications and grant admin consent in your Microsoft Entra ID tenant.
- For Client Credentials only, permissions to create an application user and assign security roles in the Power Platform admin center.
To find your organization URI, sign in to Dynamics 365 and go to Settings > Customizations > Developer Resources. The service root URL is shown there as https://<your-organization>.crm.dynamics.com/api/data/v9.2/. Use only the first part, https://<your-organization>.crm.dynamics.com, as the organization URI.
To register a Microsoft Entra ID application (for both authentication methods):
- Log into your Microsoft Entra admin center or Azure portal.
- Navigate to Entra ID > App registrations.
- Click New registration.
- Enter a name for the application, choose Accounts in this organizational directory only, and click Register.
- On the application's Overview page, copy the Application (client) ID and the Directory (tenant) ID and paste them into a secured file.
- Navigate to Certificates & secrets > Client secrets, click New client secret, and click Add.
- Copy the Value — this is your Client Secret — and paste it into a secured file.
Note the expiry date too, because the connection stops working when the secret expires.
Additional setup for the Client Credentials method:
With Client Credentials, Entra API permissions do not control what data is readable. Access is granted by Dataverse security roles on an application user.
- Log into your Power Platform admin center.
- Select Environments, choose your Dynamics environment, and click Settings.
- Expand Users + permissions and select Application users.
- Click New app user, click Add an app, and select the application you registered.
- Choose the business unit, then assign one or more security roles that grant organization-level Read access to the tables you plan to replicate.
- Click Save and then Create.
The connector requests a token for scope https://<your-organization>.crm.dynamics.com/.default from https://login.microsoftonline.com/<tenant-id>.
Additional setup for the Authorization Code method:
- In your app registration, navigate to API permissions > Add a permission > Dynamics CRM > Delegated permissions, select
user_impersonation, and click Add permissions. - Click Add a permission > Microsoft Graph > Delegated permissions, select
offline_accessandUser.Read, and click Add permissions. - Click Grant admin consent for [your organization] and confirm. All permissions must show Granted.
- Navigate to Authentication > Add a platform > Web and add redirect URI https://connector.qlik.com/auth/oauth/v3.htm.
- In Qlik Talend Cloud, set Authentication method to Authorization Code and click Authenticate.
The redirect URI must match exactly (including https:// and the .htm extension), otherwise Microsoft returns AADSTS50011.
The connector requests scopes offline_access and https://<your-organization>.crm.dynamics.com/.default. Data access follows the signed-in user's permissions.
Creating the connection
For more information, see Connecting to SaaS applications.
-
Click Authenticate when you have filled in the required connection settings.
You may be asked to log in to the source application.
A window is displayed with an authentication code.
-
Copy the code to the clipboard and return to the connection dialog.
-
Paste the code in Complete authentication with the code provided by the source and click Verify.
Tip noteYou may need to scroll down to see this field.When status is Verified, the authentication is verified.
-
Provide a name for the connection in Connection name.
-
Select Open connection metadata to define metadata for the connection when it has been created.
| Setting | Description |
|---|---|
| Data gateway |
Select a Data Movement gateway if required by your use case. Information note
This field is not available with the Qlik Talend Cloud Starter subscription, as it does not support Data Movement gateway. If you have another subscription tier and do not want to use Data Movement gateway, select None. For information on the benefits of Data Movement gateway and use cases that require it, see Qlik Data Gateway - Data Movement. |
| Start Date |
Historical replication start date. Use midnight UTC format YYYY-MM-DDT00:00:00Z, for example 2024-01-01T00:00:00Z.
|
| Client ID | Client ID. |
| Client Secret | Client secret. |
| Organization URI | Base URL of your Dynamics environment, for example https://<your-organization>.crm.dynamics.com. Do not include /api/data/v9.2. |
| Tenant ID | Directory (tenant) ID. |
| Authentication method | Client Credentials (default) or Authorization Code. |
Tables replicated
This connector uses dynamic discovery. On each discovery run it queries the Dynamics EntityDefinitions endpoint and the OData $metadata document, then shows tables that are supported, present in your environment metadata, and readable through supported data types.
Custom columns on supported tables are discovered automatically. Custom (non-Microsoft) tables are not discovered.
Replication strategy is decided per table:
- If a table has a
modifiedoncolumn, it replicates incrementally withmodifiedonas the replication key. - If it does not, it replicates as full table.
Supported entities
Sales (17 entities)
account, competitor, contact, invoice, invoicedetail, lead, opportunity, opportunityproduct, pricelevel, product, productpricelevel, quote, quotedetail, salesliterature, salesliteratureitem, salesorder, salesorderdetail.
Customer Service (36 entities)
bookableresource, bookableresourcebooking, bookableresourcebookingheader, bookableresourcecategory, bookableresourcecategoryassn, bookableresourcecharacteristic, bookableresourcegroup, contract, contractdetail, contracttemplate, entitlement, entitlementchannel, entitlementcontacts, entitlemententityallocationtypemapping, entitlementproducts, entitlementtemplate, entitlementtemplatechannel, entitlementtemplateproducts, equipment, feedback, incident, incidentknowledgebaserecord, incidentresolution, knowledgearticle, knowledgearticleincident, knowledgearticleviews, knowledgebaserecord, msdyn_slakpi, phonetocaseprocess, queue, queueitem, queuemembership, serviceappointment, sla, slaitem, slakpiinstance.
Field Service (93 entities)
msdyn_actual, msdyn_agreement, msdyn_agreementbookingdate, msdyn_agreementbookingincident, msdyn_agreementbookingproduct, msdyn_agreementbookingservice, msdyn_bookableresourceassociation, msdyn_bookingalert, msdyn_bookingalertstatus, msdyn_bookingjournal, msdyn_bookingrule, msdyn_bookingsetupmetadata, msdyn_bookingtimestamp, msdyn_entitlementapplication, msdyn_fieldservicesetting, msdyn_fieldserviceslaconfiguration, msdyn_flwconfiguration, msdyn_geofence, msdyn_geofenceevent, msdyn_geofencingsettings, msdyn_geolocationsettings, msdyn_geolocationtracking, msdyn_incidenttype, msdyn_incidenttypecharacteristic, msdyn_incidenttypeproduct, msdyn_incidenttyperesolution, msdyn_incidenttypeservice, msdyn_incidenttypeservicetask, msdyn_incidenttypessetup, msdyn_inspection, msdyn_inspectionattachment, msdyn_inspectiondefinition, msdyn_inspectioninstance, msdyn_inspectionresponse, msdyn_inventoryadjustment, msdyn_inventoryadjustmentproduct, msdyn_inventoryjournal, msdyn_inventorytransfer, msdyn_nottoexceed, msdyn_optimizationrequest, msdyn_organizationalunit, msdyn_postalcode, msdyn_priority, msdyn_productinventory, msdyn_purchaseorder, msdyn_purchaseorderbill, msdyn_purchaseorderproduct, msdyn_purchaseorderreceipt, msdyn_purchaseorderreceiptproduct, msdyn_purchaseordersubstatus, msdyn_requirementchange, msdyn_requirementcharacteristic, msdyn_requirementdependency, msdyn_requirementgroup, msdyn_requirementresourcecategory, msdyn_requirementresourcepreference, msdyn_requirementstatus, msdyn_resolution, msdyn_resourcepaytype, msdyn_resourcerequirement, msdyn_resourcerequirementdetail, msdyn_resourceterritory, msdyn_rma, msdyn_rmaproduct, msdyn_rmareceipt, msdyn_rmareceiptproduct, msdyn_rmasubstatus, msdyn_rtv, msdyn_rtvproduct, msdyn_rtvsubstatus, msdyn_scheduleboardsetting, msdyn_servicetasktype, msdyn_shipvia, msdyn_systemuserschedulersetting, msdyn_taxcode, msdyn_taxcodedetail, msdyn_timeentry, msdyn_timeentrysetting, msdyn_timegroupdetail, msdyn_timeoffrequest, msdyn_trade, msdyn_tradecoverage, msdyn_warehouse, msdyn_workhourtemplate, msdyn_workorder, msdyn_workorderincident, msdyn_workordernte, msdyn_workorderproduct, msdyn_workorderresolution, msdyn_workorderservice, msdyn_workorderservicetask, msdyn_workordersubstatus, msdyn_workordertype.
Data type mapping
| Dynamics / OData type | Replicated as |
|---|---|
Edm.String, Edm.Guid |
string |
Edm.Int32, Edm.Int64 |
integer |
Edm.Decimal, Edm.Double |
number |
Edm.DateTimeOffset, Edm.Date |
string (date-time format) |
Edm.Boolean
|
boolean |
Edm.Binary, mscrm.BooleanManagedProperty |
Not replicated (columns excluded). |
| Any other type | string |
Limitations and considerations
- Deletes are not captured. The connector replicates inserts and updates only.
- Incremental runs can re-deliver boundary records because filtering uses
modifiedon ge <last bookmark>. - Binary and managed-property columns are excluded from replication.
- Lookup columns are replicated as GUID values in raw
_<name>_valueform. - Custom tables are not discovered. Custom columns on supported tables are discovered.
- Dataverse service protection limits apply; HTTP 429 responses are retried using
Retry-After. - Transient HTTP 422/500/501/502/503 errors and network timeouts are retried with exponential backoff.
- Records are read in pages of 100 using OData next-link paging and this is not configurable from the connection form.
- When the Entra client secret expires, token requests fail (for example,
AADSTS7000222) until a new secret is configured. - With Client Credentials, read access is controlled by Dataverse security roles on the application user, not by Entra delegated permissions.