RE: how to see where a contact record was created
Assuming the user has no idea why duplicates are being created with his or her account, and you've looked at the machine and any SaaS services he or she uses for the issue, here are some possible ways to troubleshoot this:
- Create a synchronous workflow or plug-in that temporarily blocks the user (and only the one user) from creating contacts. You can have the workflow end as unsuccessful (failed) and for the plug-in you can throw an exception on the creation of records of the given type if the initiating user is that particular user. This will throw the error back to the client application and hopefully provide some clues in Windows event logs, log files, etc.
- If there aren't too many workflow processes in the CRM instance, you can look at each of them to see if any of them are creating contact records. If manually going through them will take too long, then you can create a solution and include all processes. Then, export the solution and use a text "grep" search tool to search all of the XAML content for the processes that include "contact". That will help you determine whether any workflows are creating the records. The same goes for plug-ins: search through the source code to make this determination.
Until you get it figured out, you can schedule a duplicate deletion job in CRM to clear out the unwanted records.
As an aside, I'd like Microsoft to add a new mandatory field for all entities that stores the "Source" and/or "SourceType" of the data. They (the product developers) can automatically set that field for entries from the web UI, mobile, workflows, plug-ins, etc. but developers would set it for external applications. You're not the first person to have to deal with this and with all the new ways to interact with Dynamics 365, the problem will only get worse unless there's strict management of everything that touches the org, and that no longer seems feasible.