The other day I was setting up another SharePoint 2010 farm and got the usual question to participate in the Customer Experience Improvement Program (CEIP). As always I bailed out of this. Why? Sending information to a third party about my SharePoint farm doesn’t appeal me, even if it’s Microsoft. You know, they might check how I configure my farm, how I use it etc., and then sit back and laugh at me. Not really, but I think most of us prefer not to send that information to Microsoft. But, this is not my normal standing to the CEIP. I use to participate in it, like when I install new software and they have that little checkbox asking me to send info about my installation. Why not give Microsoft some help about any kind of troubles during the installation. But when it comes to SharePoint - nope.

I did a quick Twitter Poll today to see if I was the only one bailing out of the CEIP. Currently 85% turns it off, while only 8% enables it. To make your voice heard - head on over here to the poll and I’ll update this post in a few days.

Do you enable Customer Experience Improvement Program (CEIP) on your SharePoint farms?

At the same time when setting up this farm, and opting out of the CEIP, I also came to the conclusion that I really need to know what information is sent to Microsoft. Perhaps I should opt-in the next time?

About the CEIP in SharePoint 2010

When you are opting in to the Customer Experience Improvement Program in SharePoint 2010 you are enabling a daily timer job which inspects and collects information from your farm and sends it to the SharePoint mines in Redmond.

CEIP Timer Job

You enable the CEIP on the farm level through Central Administration > System Settings > Configure Privacy Options. Of course there is PowerShell cmdlets to do it as well - Get-SPBrowserCustomerExperienceImprovementProgram and Set-SPBrowserCustomerExperienceImprovementProgram.

CEIP Settings

There is also a setting at the Web Application level (General Settings) that allows you to specify if CEIP is enabled on the Web Application or not. When it’s enabled on Web Application level the SPWebApplication.BrowserCEIPEnabled is set to true. The ScriptLink control uses this property to output the


JavaScript property.

JavaScript CEIP stuff

So what is actually collected and happening when CEIP is enabled?

This was my big question and as always I’m quite curious and just had to find out! So here we go - let’s check out exactly what the CEIP is sending over to Microsoft.

The CEIP timer job

The CEIP timer job, SPSqmTimerJobDefinition, runs every night and iterates over all you content Web Applications and their databases respectively and sends the details through some methods defined in the onetnative.dll. The timer job performs the following tasks:

  1. Performs write test to a few directories in the SharePoint Root.

  2. Collects the following on all content databases in the farm (all summed to a farm total - so no details about each database or site)

  3. Size of content db

  4. The number of lists

  5. The number of webs

  6. The number of sites

  7. Information about alerts

  8. Collects information about if recycle bin is enabled and the retention period (only average retention time is sent)

  9. Collects information about the list throttling

  10. Collects the number of solutions in the farm, just the number - no more info than that

  11. Checks the registry for information about the server; is it a stand-alone, WFE or application server

  12. Collects a hash value of your Farm Id (interesting!)

  13. Collects the build version

  14. Collects the number of servers in the farm

  15. Collects the number database servers in the farm

  16. Retrieves the install type from the registry (clean, repair, V2V inplace, V2V gradual, B2B upgrade, uninstall, SKU2SKU upgrade)

  17. Collects information from the configuration database

  18. Product version and edition

  19. SQL type (embedded, Express etc)

  20. Finally it collects information about the number of virtual servers (not virtual machines)

  21. Server language and version (actually through some API’s marked as obsolete)

That’s it, it’s a lot of information but nothing about content or anything that can identify or risk your data. The only thing that might identify you is the hashed code of you server farm id. But hashes are one-way and not guaranteed to by unique - so there’s no risk there. It would be awesome to see some average values from the CEIP program.

The browser CEIP

If you enable the CEIP on the Web Application level I told you that a specific JavaScript variable is defined. And if this one is set to true - then the Ribbon makes some JavaScript magic (in SP.Ribbon.js). For every command that is executed in the fluent UI this is gathered by the CEIP JavaScript methods and sent to the local /_layouts/WsaUpload.ashx ASP.NET handler. The information gathered here includes:

  • Command Id of the command
  • Current Tab id
  • List and Page information
  • Time and duration

This one surprised me - I did not actually know that this actually was recorded. Must be huge amounts of data recorded and sent to the Redmond data centers. Hopefully they get something useful from this! Also here, it would be really cool to see some data - for instance how much Ribbon customizations have been done!


This whole excursion actually this makes me very confident in opting in on this in the future! You don’t give away any data or put your farm under any risk. And it’s no performance killer as I see it either - except for the browser CEIP - this will impact your farm since it will constantly hit the wsaupload.ashx file.