Connect Microsoft Dynamics 365 to Fibbler

Fibbler reads your Dynamics 365 opportunities, and the account each one belongs to, to work out which deals your ads influenced. If you turn on CRM Data Sync or Ad Engagement Signals, it also writes its own columns onto your accounts, adds notes and keeps a marketing list per signal. Reading is all most teams need to start with, and the writing part needs more permissions, so this page explains both.

Before you connect

  • Your plan. Dynamics 365 is on the Unlimited and Agency plans, and works during the free trial. On Growth it stays connected but no deals show up, the same as Salesforce. See Plans and Features.
  • LinkedIn Ads first. Until LinkedIn Ads is connected, Data Sources shows "Connect LinkedIn Ads first." where the "Connect CRM" button would be.
  • Permission in Fibbler. You need a role in the Fibbler workspace that can manage data sources. If you don't have one, the connection stops with "You do not have permission to connect a CRM to this workspace."
  • Dynamics 365 Sales. Fibbler connects to Dynamics 365 Sales and the other Dynamics 365 apps built on Dataverse, where your deals are opportunities. Dynamics 365 Business Central is a different product and isn't supported.
  • Microsoft's commercial cloud. Environments in Microsoft's government clouds (GCC, GCC High, DoD) and in the China cloud can't be connected.
  • The right Microsoft user. Fibbler can read and write exactly what the user you sign in with can, nothing more. Which user to pick is the most important decision on this page, so read Permissions and What we recommend first.

Connecting

  1. In Fibbler, go to Data Sources
  2. Click "Connect CRM" and pick Microsoft Dynamics 365 from the list
  3. Sign in with your Microsoft work account and approve what Fibbler asks for
  4. You'll be sent back to Data Sources, where Dynamics 365 now has its own card
  5. If you have more than one environment, pick the one to sync on that card and click "Save Properties"

Fibbler starts importing your deals as soon as an environment is chosen. The first import takes the opportunities changed since the start of your LinkedIn data. After that, Fibbler picks up new and changed opportunities every weekday.

Choosing an environment

A Microsoft tenant can hold several Dynamics 365 environments, for example production, a sandbox and one per business unit. Fibbler asks Microsoft which environments the user you signed in with can reach and lists them on the Dynamics 365 card.

  • One environment: Fibbler picks it for you and starts importing right away.
  • Several: the card opens by itself and says "Choose which Dynamics 365 environment to sync. Nothing is imported until you do." Fibbler doesn't guess, because the wrong guess would import another business unit's pipeline.
  • None: the user can't reach any environment, so the connection stops. See Troubleshooting.
Switching environment replaces your deals.When you pick a different environment and save, Fibbler deletes the deals and companies it imported from the old one and imports the new one from scratch. Left in place, the old environment's deals would be counted as the new one's pipeline. It also reads the new environment's base currency again and checks again whether the connected user can add columns there. Nothing is deleted in Dynamics 365 itself.

Reconnecting keeps the environment you chose, as long as you sign in from the same Microsoft tenant with a user who can still reach it. Signing in from another tenant, or with a user who can't see that environment, points the connection somewhere else, and the deals from the old environment are removed the same way.

Permissions

What Fibbler asks Microsoft for

Fibbler signs in through Microsoft Entra ID with OAuth and never sees your password. The app is called Fibbler and has one API permission: Dynamics CRM, user_impersonation. It's a delegated permission, which means Fibbler acts as the user who signed in and can only do what that user is allowed to do. The scopes in the request are:

  • https://globaldisco.crm.dynamics.com/.default: Microsoft's discovery service, used to list the environments you can reach
  • https://<your environment>/.default: once you've picked an environment, the same permission for that environment only, for example https://contoso.api.crm4.dynamics.com/.default
  • offline_access: keeps Fibbler connected after you close the browser, so the weekday import and the weekly syncs can run
  • openid: tells Fibbler which Microsoft tenant you signed in from, so it keeps talking to that tenant only

There is no read-only version of this permission, and no permission per table. That's how Dataverse works for every app: the OAuth permission lets an app in, and the user's security rolesdecide what it can do once it's there. So the approval screen looks the same whether you plan to use Fibbler read-only or with write-back. The real control is which user you connect with and which roles that user has.

Fibbler signs in again in the background once a day. Microsoft ends an unused connection after 90 days, and the daily sign-in keeps that from happening while you use Fibbler.

If your tenant needs an admin to approve apps

Whether a normal user may approve an app like Fibbler is a setting in your Microsoft Entra tenant. Many companies turn it off. Then Microsoft asks for an administrator's approval when you sign in, and a Microsoft Entra admin has to approve Fibbler for your organization before anyone can connect. Once they have, connect again from Data Sources. If Microsoft sends you back to Fibbler without connecting, Data Sources says "Microsoft did not let us connect your Dynamics 365 account. Your administrator may need to approve Fibbler for your organization."

Importing deals (read only)

Attribution only reads. This is everything Fibbler reads from your environment:

TableColumnsWhy
OpportunityName, estimated revenue, actual revenue (both in base currency too), status, status reason, created on, modified on, actual close date, estimated close date, and the Account it belongs toYour deals
AccountName and website, for the account on each opportunityMatching deals to the companies that saw your ads
Organization and CurrencyThe environment's base currencyLabelling the amounts
UserWhether the connected user holds the privilege to create columns (prvCreateAttribute)Deciding whether write-back can be offered

So the user needs Read on Opportunity and Account. Fibbler doesn't read contacts, leads, activities, emails or any custom column on your opportunities.

The read depth decides how much pipeline you see. Fibbler gets the opportunities the user's security role lets them read, so a role that reads only the user's own records, or only their business unit, imports only that part of your pipeline. Nothing tells you some deals are missing, because to Fibbler they simply don't exist. Give the connected user Read at Organization level on Opportunity and Account if you want your whole pipeline in Fibbler.

Writing back (CRM Data Sync and Signals)

Fibbler writes its numbers into its own custom columns on the Account table, and it creates those columns itself. In Dataverse that is a customization, so the user needs the right to customize, not just to edit records. Here is what the writing calls on:

  • Customizing the Account table: create a publisher and a solution the first time (prvCreatePublisher, prvCreateSolution), create columns (prvCreateAttribute) and publish them (prvPublishAllCustomizations). The System Customizer role has all of these, and so does System Administrator
  • Write on Account, for every account Fibbler should update. Used by CRM Data Sync and by Signals
  • Create on Account, only if a signal is set to create accounts that are missing
  • Create on Note, for the note a signal leaves on an account
  • Create, Read and Write on Marketing List, for the list each signal keeps

Fibbler checks one thing when you connect: whether the user may create columns. If not, the Dynamics 365 card says "Fibbler can read your pipeline, but cannot write engagement data back into Dynamics 365. Writing back adds custom columns to the Account table, which needs an account with the System Customizer role. Reconnect with such an account to enable it." The CRM Data Sync switches and Signals to Dynamics 365 are then off, and deals still import as usual.

The check runs when you connect and when you switch environment, not every day. So if you give the user System Customizer later, reconnect Dynamics 365 once to switch write-back on.

System Customizer covers the columns, but on its own it doesn't let a user read or update everyone's accounts. Give it to the connected user in addition to a role that reads opportunities and accounts and writes accounts, not instead of one.

Connect with a dedicated integration user, not a colleague's own account.Fibbler stays connected through the user who signed in. When that user is disabled, loses their Dynamics 365 licence, has their password reset by an admin or leaves the company, Microsoft signs Fibbler out and the import stops until someone reconnects. A user that exists only for Fibbler doesn't leave. It also makes Fibbler's changes easy to recognise, because Dynamics 365 records them as made by that user. It has to be a normal user account that can sign in and has access to the environment. An application user (the kind with no sign-in) can't be used, because Fibbler connects by signing in.

Then give that user only what you'll use:

  • Attribution only: a security role with Read at Organization level on Opportunity and Account. That's enough for every attribution report in Fibbler, and Fibbler can't change anything in your Dynamics 365. You can add write-back later by giving the user more and reconnecting.
  • With CRM Data Sync: the above, plus System Customizer and Write on Account.
  • With Ad Engagement Signals: the above, plus Create on Note and Create, Read and Write on Marketing List. Add Create on Account only if you want signals to create accounts that don't exist yet.

System Administrator also works for everything, and it's the quickest way to test. But it's more than Fibbler needs, so we'd rather you didn't leave it on the user Fibbler runs as.

Data storage: Fibbler stores company-level and deal/opportunity data from your CRM to power attribution and analytics features. This includes company names, domains, deal amounts, and deal stages. All stored data is encrypted at rest. See our Security page for details.

How deals and companies are matched

A deal is tied to a company through the Account on the opportunity, and that account is matched to your LinkedIn data by the domain in its Website. An account with an empty or unreadable website can't be matched, and neither can its deals. There's no fallback on the account name. An opportunity with no Account, for example one whose potential customer is a contact, is imported but can't be tied to a company.

Fibbler imports the accounts that appear on your opportunities, not your whole Account table. That matters for CRM Data Sync below: it can only write to an account that has at least one opportunity.

  • Won and lost come from the opportunity's status: Open, Won or Lost. There are no stages to tick and no pipeline or deal type to pick, so the Dynamics 365 card only has the environment.
  • Amounts are in your environment's base currency. Fibbler uses the estimated revenue in base currency, and for a won deal the actual revenue in base currency when it's above zero. An opportunity with no amount in base currency is imported without a value, so it isn't in your pipeline and revenue totals.
  • The deal date is when the opportunity was created, as for every other CRM. The close date is the actual close date, or the estimated one while the deal is open.

What Fibbler creates in Dynamics 365

Nothing, until you turn on CRM Data Sync or send a signal to Dynamics 365. Both are off by default. When one of them needs a column for the first time, Fibbler creates:

  • A publisher named Fibbler (unique name fibbler) with the prefix fbl
  • A solution named Fibbler Integration (unique name FibblerIntegration) under that publisher
  • Custom columns on the Account table, all starting with fbl_ and all inside that solution, listed below. Every column is optional, so none of your forms or imports start requiring it

Dataverse only accepts a column whose prefix belongs to the publisher of the solution it's created in, which is why Fibbler brings its own publisher. It also means you have one place to see everything Fibbler added: open the Fibbler Integration solution in Power Apps. Dataverse doesn't let anyone rename a column once it exists, so these names are permanent. If your environment already has a publisher called fibbler with another prefix, or a FibblerIntegration solution under another publisher, Fibbler stops rather than create columns there. Tell us at support@fibbler.co if that happens.

On an account that already exists, Fibbler only ever writes its own fbl_ columns. The name, website, owner and everything else your team maintains are never changed.

Fibbler never deletes anything in Dynamics 365.No record, no column, no note and no list. The one thing it removes is its own: an account leaves a signal's marketing list 30 days after the signal last sent it. The account itself stays, with its columns and notes.

CRM Data Sync columns for LinkedIn (optional)

CRM Data Sync is optional. The Dynamics 365 card on the CRM Sync page has a switch for the last 90, 30 and 7 days. Each window you switch on gets seven columns on the Account table, and the first sync starts straight away. Where the table says N, the name ends in 7, 30 or 90.

Column nameDisplay nameType
fbl_LinkedInAdImpressionsNLinkedIn Ad Impressions (N days)Decimal number
fbl_LinkedInAdClicksNLinkedIn Ad Clicks (N days)Decimal number
fbl_LinkedInAdEngagementsNLinkedIn Ad Engagements (N days)Decimal number
fbl_LinkedInVideoViewsNLinkedIn Paid Video Views (N days)Decimal number
fbl_LinkedInOrgImpressionsNLinkedIn Organic Impressions (N days)Decimal number
fbl_LinkedInOrgEngagementsNLinkedIn Organic Engagements (N days)Decimal number
fbl_LinkedInEngagementLevelNLinkedIn Engagement Level (N days)Text, 100 characters

The number columns hold whole numbers. The engagement level holds one of VERY_HIGH, HIGH, MEDIUM, LOW or VERY_LOW. Dataverse stores the logical name in lower case, so in Advanced Find or the Web API the first one is fbl_linkedinadimpressions7.

The sync runs once a week, at the weekend, and only updates accounts that already exist. It never creates one. An account is matched by the domain in its website, and when several accounts share a domain, all of them are written. An account that was active in an earlier week but isn't in the current window has its columns emptied rather than set to 0, so a view filtered on them always shows the current window.

Campaign group columns

If you sync a named group of campaigns instead of the whole ad account, each group gets five columns per window. The column name is fbl_, a 12-character code made from the group's id, the window and a short ending. The display name carries your group name. For a group called Brand on the 30-day window:

Column name (example)Display name (example)Type
fbl_3f9a1c0b7d2e30impLinkedIn Impressions (30 days) - BrandDecimal number
fbl_3f9a1c0b7d2e30clkLinkedIn Clicks (30 days) - BrandDecimal number
fbl_3f9a1c0b7d2e30engLinkedIn Engagements (30 days) - BrandDecimal number
fbl_3f9a1c0b7d2e30vidLinkedIn Video Views (30 days) - BrandDecimal number
fbl_3f9a1c0b7d2e30lvlLinkedIn Engagement Level (30 days) - BrandText, 100 characters

The code comes from the group's id rather than its name, so renaming a group in Fibbler doesn't move its columns, and two groups with the same name never share columns.

Google Ads and Meta Ads visit columns (optional)

With the Google Ads or Meta Ads add-on, CRM Data Sync can also write the website visits that came from those channels onto the same accounts. Each channel is set up separately, and each window gets one decimal number column:

Column nameDisplay name
fbl_GoogleAdsVisits7, 30, 90Google Ads Visits (N days)
fbl_MetaAdsVisits7, 30, 90Meta Ads Visits (N days)

A Google Ads or Meta Ads campaign group gets one visits column per window, named like the LinkedIn group columns and ending in gav or mav, with a display name like "Google Ads Visits (30 days) - Brand". These run once a week as well and only update accounts that already exist. The details are in the Google Ads CRM Sync and Meta Ads CRM Sync docs.

Ad Engagement Signals in Dynamics 365 (optional)

Ad Engagement Signals sends the companies engaging with your ads to the place your team already works. With Dynamics 365 as a destination, a signal does four things in your environment.

It writes six columns on the account.They're created the first time a signal writes to Dynamics 365, and there's one set however many signals you run:

Column nameDisplay nameTypeWhat it holds
fbl_SignalTypeFibbler Signal TypeText, 100Why the account was surfaced, New or Rising fast
fbl_SignalDateFibbler Signal DateDate and timeWhen Fibbler last surfaced it
fbl_SignalNameFibbler Signal NameText, 200Which signal surfaced it
fbl_SignalChannelsFibbler Signal ChannelsText, 200Which ad channels it engaged with
fbl_SignalWhyFibbler Signal WhyText, 500The evidence, in one line
fbl_CreatedByFibblerCreated by FibblerYes/NoYes only on an account a signal created

A value longer than its column is cut to fit.

It adds the account to a marketing list. Each signal gets its own static marketing list of accounts, named Fibbler: followed by the signal's name, like Fibbler: Enterprise. If another list already has that name, Fibbler adds a short code from the signal's id, like Fibbler: Enterprise (k3x9q2), and never fills a list it didn't make. An account leaves the list 30 days after the signal last sent it, so the list is who is warm now. If you delete the list, Fibbler makes a new one on the next run.

It leaves a note on the account's timeline, titled Fibbler: followed by the signal's name and a short reference, with the reason a rep reads. A note is a note rather than an activity, so it doesn't land in anyone's queue.

It creates an account that is missing, if you chose that when you set up the signal. Fibbler looks for the company first, among your active accounts, by the domain in the website, with or without www and http. Only when nothing matches does it create one, with the company name, the website and Created by Fibbler set to Yes. Creating needs a domain: a company Fibbler has no domain for is never created, because nothing would find that account again on the next run.

Your own duplicate detection rules apply to the accounts Fibbler creates. If a rule matches one existing account and its website is the same company, Fibbler writes the signal there instead of making a second account. If it can't tell which account the rule meant, it writes nothing for that company.
Some setups stop creates.If the connected user may not create accounts, or a plugin or workflow in your environment requires a column Fibbler doesn't fill, Dynamics 365 refuses every new account. Fibbler then stops creating and says which it was, for example "Dynamics 365 will not let Fibbler create accounts in this environment, because new_region is required on a new account." Accounts that already exist are still updated. Make the column optional or give it a default, give the user Create on Account, or switch the signal to update existing accounts only.

Removing columns you no longer use

Fibbler never deletes a column, so the columns of a window or a campaign group you've turned off stay on your Account table with their last values. To remove them, open the Fibbler Integration solution in Power Apps, go to the Account table's columns and delete the ones you don't want. Deleting a column deletes the values in it as well.

If you delete a column Fibbler still uses, nothing breaks. It creates the column again, empty, the next time it needs it.

Disconnecting

Go to Data Sources, open the Dynamics 365 card and click Disconnect. Fibbler deletes its stored sign-in and stops syncing. The columns, notes and lists it made stay in Dynamics 365 until you remove them.

Disconnecting doesn't withdraw the approval you gave Fibbler in your Microsoft tenant. To remove Fibbler from your tenant as well, a Microsoft Entra admin can delete it under Enterprise applications.

Troubleshooting

When Fibbler hits a problem only you can fix, the Dynamics 365 card on Data Sources says so, and the workspace owner and admins each get one email about it. Reconnecting clears the message, and so does the next run that gets through once the cause is fixed.

"This connection needs to be renewed"

Microsoft has signed Fibbler out, so deals stop importing and nothing is written back. It usually happens when an admin withdrew the approval for Fibbler in your tenant, the connected user was disabled or had their password reset, or a sign-in policy asked for a fresh sign-in. Reconnect from Data Sources. Your environment and settings stay as they were.

"The connected user cannot read your deals"

Dynamics 365 refused to let the connected user read opportunities or accounts, so no deals can be imported. Ask a Dynamics 365 admin to give that user a security role with Read on Opportunity and Account, or reconnect signed in as a user who has it. The next weekday import picks up from there.

"The connected user needs more permissions"

Fibbler couldn't add its columns to the Account table, publish them or update accounts, so your ad engagement data and signals aren't reaching Dynamics 365. Deals still import as usual. Give the user the System Customizer role, or a role that may create publishers, solutions and columns, plus Write on Account. Then reconnect, so Fibbler checks again. The same message shows when Dynamics 365 stops accepting the connected user at all, for example after their licence or access to the environment was removed.

Write-back switches are greyed out

On the CRM Sync page this reads "Reconnect Dynamics 365 with a user who has the System Customizer role, so Fibbler can add its columns." When you set up a signal it reads "The connected Dynamics 365 user is not permitted to add the Fibbler columns a signal writes." Both mean the connected user couldn't create columns when you connected. Give them System Customizer and reconnect. On the Growth plan the switches are off for a different reason: CRM Data Sync to Dynamics 365 is part of Unlimited and Agency.

Errors when you connect

  • "Microsoft did not let us connect your Dynamics 365 account. Your administrator may need to approve Fibbler for your organization.": your tenant needs an admin to approve apps. See If your tenant needs an admin to approve apps.
  • "Dynamics 365 connection was cancelled. You can try again any time.": the approval screen was closed or declined. Start again from Data Sources.
  • "No Dynamics 365 environments are available to this user.": Microsoft says the user can't reach any environment. Check that the user is enabled, has a Dynamics 365 licence and has been added to the environment, or connect with a user who has. An environment in a government or China cloud never shows up here.
  • "You do not have permission to connect a CRM to this workspace.": your role in the Fibbler workspace can't connect a CRM. A workspace admin needs to do it.
  • "We could not connect your Dynamics 365 account. Please try again, or contact support if it keeps happening.": something failed on the way that you can't fix from your side. Try once more, and email support@fibbler.co if it keeps happening.

Environment not found

  • "This Microsoft account cannot reach any Dynamics 365 environment." on the card: the connected user has lost access to every environment. Reconnect with a user who can reach the one you want to sync.
  • "That Dynamics 365 environment is not available to this connection." when you save: the connected user can't reach the environment you picked. Pick another, or reconnect with a user who can reach it.
  • "We could not load your Dynamics 365 environments. Please reconnect your account.": Fibbler couldn't ask Microsoft for the list. Reconnect.

A deal is missing

Check three things. That the connected user can read the opportunity, since Fibbler only sees what that user's role lets them see. That the opportunity has an Account. And that the account has a website. A deal with no Account, or on an account without a website, can't be matched to anyone who saw your ads. More checks are in Deals Not Appearing.