Dynamics 365 integration

CRM + ERP: accounts, contacts, leads, opportunities, orders, invoices, products

Help CentreConnectors

Overview

Microsoft Dynamics 365 is Microsoft's CRM + ERP suite – Sales (CRM), Customer Service, Field Service, Marketing, Finance, Supply Chain. The Automize Dynamics 365 connector targets the CRM side (Sales/CS) with accounts, contacts, leads, opportunities, cases, plus the typed-entity primitives needed to script across modules.

  • Regions: Each Dynamics environment has its own URL (yourorg.crm.dynamics.com – region embedded in the .crmX subdomain). The connector picks up the environment URL from the OAuth flow.
  • Plans: Dynamics 365 Sales / Customer Service / Field Service Pro and Enterprise – all expose the Dataverse Web API. Power Apps and Power Automate run on the same surface.

Setting up the connection

Auth type: OAuth 2.0 (Authorization Code).

  1. In Microsoft Entra ID, register an app (same flow as Microsoft Graph).
  2. Add Dynamics CRM Online API → Delegated → user_impersonation.
  3. Set Redirect URI to the one shown in the Automize Dynamics 365 connector dialog.
  4. Copy Application (client) ID + Client Secret.
  5. In Automize, open Settings → Connectors → Dynamics 365 → Add connection. Paste credentials + your environment URL (yourorg.crm.dynamics.com). Click Connect, sign in, approve.

Scopes required:

  • https://yourorg.crm.dynamics.com/user_impersonation
  • offline_access

Find your credentials at https://entra.microsoft.com/.


Rate limits

Dataverse enforces per-user + per-app limits – 6,000 requests / 5 min per user is typical, scaling up with Power Apps Premium licenses. Connector retries 429 with Retry-After.


Data model

Dataverse entities (formerly CRM 'entities'):

    Account (B2B customers) ─┬─ Contacts
                             └─ Opportunities ─── Quotes ─── Orders ─── Invoices
    Lead (pre-qualified prospect) ── converts to Account+Contact+Opportunity
    Case (Customer Service) ── linked to Account/Contact
    Activity types: phonecall, email, appointment, task

Records are referenced by GUID (account_id) – pass curly-brace form
guid="{xxx-xxx-xxx-xxx}" or bare guid depending on op.

Available operations

17 operations available. Click any row to jump to its detail.

OperationCategoryWhat it does
Create AccountGeneralCreate a new account
Create ContactGeneralCreate a new contact
Create EntityGeneralCreate a new entity record
Create LeadGeneralCreate a new lead
Create OpportunityGeneralCreate a new opportunity
Delete EntityGeneralDelete an entity record
Get AccountGeneralGet account details
Get ContactGeneralGet contact details
Get EntityGeneralGet a single entity by ID
Get Entity DefinitionsGeneralList all entity (table) definitions in Dataverse
List AccountsGeneralList all accounts
List ContactsGeneralList all contacts
List LeadsGeneralList all leads
List OpportunitiesGeneralList all opportunities
Query EntityGeneralQuery any Dataverse entity with OData $filter, $select, $expand
Update AccountGeneralUpdate an existing account
Update EntityGeneralUpdate an entity record

Operations

Create Account

Create a new account

No input parameters.

Tips

  • name required. Pass primarycontactid as guid for the main contact.

Create Contact

Create a new contact

No input parameters.

Tips

  • firstname + lastname + emailaddress1 typical.
  • parentcustomerid_account@odata.bind='/accounts(GUID)' to link to a parent account.

Create Entity

Create a new entity record

ParameterRequiredTypeDescription
Entity Set entity_setYestext

Create Lead

Create a new lead

No input parameters.

Tips

  • subject + firstname + lastname + emailaddress1 typical.

Create Opportunity

Create a new opportunity

No input parameters.

Tips

  • name + parentaccountid required.

Delete Entity

Delete an entity record

ParameterRequiredTypeDescription
Entity Set entity_setYestext
Entity Id entity_idYestext

Get Account

Get account details

ParameterRequiredTypeDescription
Account Id account_idYestext

Tips

  • account_id (GUID without curly braces).

Get Contact

Get contact details

ParameterRequiredTypeDescription
Contact Id contact_idYestext

Tips

  • contactid (GUID).

Get Entity

Get a single entity by ID

ParameterRequiredTypeDescription
Entity Set entity_setYestext
Entity Id entity_idYestext

Get Entity Definitions

List all entity (table) definitions in Dataverse

No input parameters.


List Accounts

List all accounts

No input parameters.

Tips

  • OData $filter: $filter=statecode eq 0 (active).
  • $select=name,accountid,emailaddress1 to project. $top=50 to limit.

List Contacts

List all contacts

No input parameters.

Tips

  • Filter by parentcustomerid_account@odata.bind to scope to one account.

List Leads

List all leads

No input parameters.

Tips

  • Filter by statecode (0=open, 1=qualified, 2=disqualified).

List Opportunities

List all opportunities

No input parameters.

Tips

  • statecode 0=open, 1=won, 2=lost.

Query Entity

Query any Dataverse entity with OData $filter, $select, $expand

ParameterRequiredTypeDescription
Entity Set entity_setYestext

Update Account

Update an existing account

ParameterRequiredTypeDescription
Account Id account_idYestext

Tips

  • PATCH-style. Set statecode/statuscode together for state transitions.

Update Entity

Update an entity record

ParameterRequiredTypeDescription
Entity Set entity_setYestext
Entity Id entity_idYestext

FAQ

Environment URL – where do I find it?
Power Platform Admin Center → Environments → click your env → Environment URL. Format: yourorg.crm.dynamics.com (or .crm4 for EU, .crm5 for Asia, etc.).
OData filters – what's the syntax?
Standard OData v4. $filter=field eq 'value', logical ops: and / or / not. Reference fields: _parentcustomerid_value eq guid'XXX'. Use $expand=primarycontactid to fold related records inline.
Why does Update silently change less than I expected?
Some fields are computed / formula / read-only. Send them and Dataverse silently ignores. Check the entity metadata for which fields are writable.
Custom entities – how?
Custom entities use their schema name (e.g. new_customentity). Use the OData EntitySetName (typically plural form: new_customentities). Discover via Get Entity Metadata.

Related connectors

See it working on your own data

Everything documented here ships with the platform – try the document tools free, or go live in 7 days.