Skip to main content
Microsoft Dynamics 365 Finance and Operations — Finance, Supply Chain Management, Commerce, and the other finance and operations apps — is Microsoft’s ERP. This connector reads its data entities (customers, vendors, products, sales and purchase orders, financial data, and any other public entity, including custom ones) through the environment’s OData endpoint, <environment URL>/data.

Before you start

The connector signs in as an application (Microsoft Entra ID client credentials), and Finance and Operations must know that application. Your administrators need to complete these steps once:
1

Register an application in Microsoft Entra ID

In the Azure portal, open Microsoft Entra ID → App registrations → New registration and create an application. Under Certificates & secrets, create a client secret and copy its value (not its ID). Note the Directory (tenant) ID and the Application (client) ID from the app’s overview page. Client secrets expire; note the expiry date and update the connection before it.
2

Register the application in Finance and Operations

In Finance and Operations, go to System administration → Setup → Microsoft Entra applications and select New. Enter the Client ID from step 1, a name, and a User ID — an enabled user whose security roles can read the data entities you want to sync, in every company you want to sync. A dedicated service account with read-only roles is recommended.
3

Copy your environment URL

Copy the address of your environment from the browser, for example https://contoso.operations.dynamics.com.
Without step 2, Microsoft Entra ID issues a token but Finance and Operations refuses every request. The connector reads only what the linked user is allowed to see.

Configuring Microsoft Dynamics Finance and Operations as a source

In the Sources tab, click the “Add source” button on the top right, then select Microsoft Dynamics Finance and Operations from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

  • Environment URL: The address of your environment, for example https://contoso.operations.dynamics.com. Pasting the full address from the browser also works.
  • Tenant ID: The Directory (tenant) ID of your Microsoft Entra ID tenant.
  • Client ID: The Application (client) ID of the app registration.
  • Client secret: The client secret value of the app registration.
  • Entities: The data entities to sync, by their collection name (the name in the OData URL), for example CustomersV3 or SalesOrderHeadersV2. Each becomes a stream. For each entity you can optionally set an Incremental field, a Filter (an OData $filter expression) and the Fields to read. Leave it empty to sync the standard set listed below.
  • Companies: The company (legal entity) codes to sync, for example usmf. Leave empty to sync every company the linked user can access. The codes are checked when the sync starts; an unknown code stops the sync with the list of available companies.
Advanced settings:
  • Initial sync date: For incremental entities, only records changed after this date are read on the first run.
  • All companies: On by default. When off, Finance and Operations returns only the default company of the linked user (it must stay on when Companies is set).
  • Default incremental fields: Field names used as the incremental field of any entity that has them. Defaults to SysModifiedDateTime.
  • Page size: Records per request when an entity is read by key ranges (default 5000).
  • Pagination: Automatic (default) reads entities with a single numeric key by key ranges — fast and correct while data changes — and the others by following the pages Finance and Operations returns.
  • Incremental lookback (minutes): Each incremental sync re-reads records changed this many minutes before the previous position (default 60), so postings that are saved late are not missed.
  • Request timeout: How long to wait for each page before retrying (default 300 seconds).
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. Each stream corresponds to one entity. For faster extractions, select only the streams relevant to your analysis.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired Layer where the data will be placed, a Folder to organize it, a name for each table, and the type of sync.
  • Layer: choose between the existing Layers on your catalog. This is where your extracted tables appear once the extraction runs successfully.
  • Folder: a Folder can be created inside the selected Layer to group all tables created from this source.
  • Table name: a name is suggested, but you can customize it. You can also add a prefix to all tables at once.
  • Sync Type: choose between INCREMENTAL and FULL_TABLE.
    • Incremental: available for entities with an incremental field; each extraction fetches only records changed since the last run.
    • Full table: each extraction fetches the whole entity.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. Optionally, you can define additional settings such as Delta Log Retention and an additional Full Sync to complement the incremental extractions. Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking the arrow button. Once executed, your data appears in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Streams and Fields

Streams are built from your environment’s metadata: one stream per entity, named in snake_case (CustomersV3 becomes customers_v3). Columns keep the entity’s field names, and the entity key — which includes dataAreaId (the company) for company-specific entities — becomes the table’s primary key. Custom entities and custom fields are included as long as the entity is public (exposed through OData). When Entities is empty, these standard entities are offered (an entity that does not exist in your version is skipped, and the run log lists which ones):
General journal entries and account entries (GeneralJournalEntryBiEntities, GeneralJournalAccountEntryBiEntities). Synced incrementally on SysModifiedDateTime.
CustTransBiEntities and VendTransBiEntities. Synced incrementally on SysModifiedDateTime.
CustomersV3, VendorsV2 and ReleasedProductsV2, per company.
SalesOrderHeadersV2, SalesOrderLines and posted sales invoice headers (SalesInvoiceHeadersV4, or SalesInvoiceHeadersV2 on versions before 10.0.40).
PurchaseOrderHeadersV2 and PurchaseOrderLinesV2. By design these entities do not include purchase return orders.
In step 2 you choose which of these streams to sync. You can sync any other public entity by adding its collection name to Entities. To find names, open System administration → Workspaces → Data management → Data entities in Finance and Operations (the Public collection name column), or open <environment URL>/data in the browser while signed in.

How columns are represented

  • Enumerations (such as NoYes or SalesStatus) are stored as their name, for example Yes or Invoiced.
  • Dates are stored as UTC timestamps. Finance and Operations represents an empty date as 1900-01-01; those values are stored as empty (null).
  • Amounts are numbers in the transaction currency of the record.

Incremental sync

Most entities do not expose a date that changes when a record is updated, so they are read in full on every run. Entities that do — typically the *BiEntities, with SysModifiedDateTime — are synced incrementally by default, re-reading the last 60 minutes on each run (Incremental lookback). SysModifiedDateTime tracks changes to the entity’s main table only; changes that affect only related tables, and deleted records, are not detected. Use FULL_TABLE (or an additional Full Sync) where that matters. If you change an entity’s Filter, Incremental field or the Companies, its next sync starts again from the Initial sync date, so the history of the new scope is loaded too.

Limits

Finance and Operations protects its service with request limits. When a limit is reached, the connector waits the time Finance and Operations asks for and continues automatically; no data is lost, but the run takes longer. You can give this integration a lower throttling priority in Finance and Operations (System administration → Setup → Throttling priority mapping) so it yields to interactive users. Large entities (for example general ledger entries) can take a long time on the first sync. Microsoft recommends its bulk export options (such as Azure Synapse Link) for tables of many millions of rows; with this connector, prefer an incremental field, Filters, or Fields to limit what is read.
The connector supports Finance and Operations in the Microsoft public cloud. Sovereign clouds (for example US Government) and on-premises deployments (AD FS) are not supported.