How can I use n8n (self-hosted) for my Dynamics 365 also on-premise?

Hi, I’m new to n8n. I need to connect to an on-premise Dynamics 365 CRM instance. Any helps guys?

Welcome to n8n! Connecting to on-premise Dynamics 365 is definitely possible with self-hosted n8n.

Here’s what you need:

1. Network connectivity
Your self-hosted n8n server needs to reach your on-premise Dynamics 365 server. Make sure they’re on the same network or you have proper routing/VPN setup.

2. Use the Microsoft Dynamics CRM node
In n8n, search for “Microsoft Dynamics CRM” node. When setting up credentials:

  • Base URL: Use your on-premise URL (e.g., http://yourserver/YourOrgName)
  • Authentication: Windows Authentication with your domain credentials

3. For on-premise Dynamics, authentication is different
Unlike Dynamics 365 Online (which uses OAuth), on-premise uses network credentials (username/password/domain).

Microsoft’s official docs on on-premise authentication: Authenticate to Dynamics 365 Customer Engagement with the Web API (Developer Guide for Dynamics 365 Customer Engagement) | Microsoft Learn

Alternatively, you can use the HTTP Request node with:

  • Method: GET/POST (depending on operation)
  • URL: http://yourserver/YourOrgName/api/data/v9.0/...
  • Authentication: Basic Auth or NTLM

I’ve set up similar integrations for on-premise CRM systems. The key is making sure network connectivity is solid first.

What type of operations are you planning to automate?

Hi! Thanks for sharing that, it really helped.

I tried using the HTTP Request node with Basic Auth, but I’m getting an error. Does this mean I need to install NTLM? If so, is there any alternative solution that works without installing NTLM?

401 - “HTTP Error 401 - Unauthorized: Access is denied\r\n”

{ "headers": { "accept": "application/json,text/html,application/xhtml+xml,application/xml,text/*;q=0.9, image/*;q=0.8, */*;q=0.7" }, "method": "GET", "uri": "xx", "gzip": true, "rejectUnauthorized": true, "followRedirect": true, "resolveWithFullResponse": true, "followAllRedirects": true, "timeout": 300000, "encoding": null, "json": false, "useStream": true, "auth": { "user": "xx", "pass": "**hidden**" } }

I am planning to automate some data processing in dynamics for fine-tuning purposes. @hoiyothaheem