I have SharePoint online and I want to add external content to the index.

So far I have it set up that the external content is put into an external list using BCS. The content passes through a WCF service.

I know that SP does not allow external content to be added to the index by default so I want to create a custom solution.

Any ideas on how to accomplish that?

From what I understand, external content has to flow through the BCS, and has to be placed in an external list.

My first thoughts were to somehow clone the external list and have the content copied to an internal list, but this just seems like a lot of effort for something that should be easier.

Has anyone dealt with this? Making external content searchable?

Is there any way to achieve this in cloud only? I do not have the option of doing it as a hybrid solution.

here is code of the app I'm currently building to accomplish this.

var siteUrl = '/Lists';

 function retrieveListItems() {

var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Wikis');

//var camlquery = new sp.camlquery();
//camlquery.set_viewxml('<view><query><where><geq><fieldref name=\'title\'/>' + 
//    '<value type=\'string\'></value></geq></where></query><rowlimit>10</rowlimit></view>');
//this.colllistitem = olist.getitems(camlquery);

clientContext.load(oList);     //(collListItem);

clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));        


function onQuerySucceeded(sender, args) {

var listItemInfo = '';

var listItemEnumerator = collListItem.getEnumerator();

while (listItemEnumerator.moveNext()) {
    var oListItem = listItemEnumerator.get_current();
    listItemInfo += '\nTitle: ' + oListItem.get_title() + 
        '\nAuthor: ' + oListItem.get_item('Author') + 
        '\nBody: ' + oListItem.get_item('Body');


   function onQueryFailed(sender, args) {

alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());

3 Answers 3


To second Matt's answer, what you're asking to do is simply not possible.

The reason why you can't index external content is because Microsoft doesn't provide access to the Crawl configuration. This area of the SharePoint Online implementation is a black box managed by Microsoft and Microsoft alone. It's not hidden, obfuscated or disabled "by default" - it simply is not available. As to why that is the case, remember that SPO is a (complex) multi-tenant implementation of SharePoint, where behind the scenes multiple domains are shared within single deployments. Add to that the fact that Search crawl is one of the most variable and highly impactful processes you can possibly configure within a farm. Together, it's understandable why the option is not available (at this point in time).

As far as workarounds, Matt listed your only real options plus some good advice (federating or content import/sync).

If you want ideas on how best to import or sync external data to SPO (so that it can be locally indexed), you should create that as a new question and mark this one as answered.

  • Thank you, looking back now, having done more research in addition to asking this question, I see now that it was worded terribly - and I will indeed ask it in a better format.
    – Scubacode
    Feb 17, 2014 at 7:21

You cannot add a content source to SharePoint Online (SPO). There are techniques to "Federate Search" between On Premise and the Cloud, but that configuration is more than I can answer here.

If federation is not an option, I would suggest, now that you know this limitation, you readdress the business problem. For example, if you need to search for the "External List" you could write client code that synchronizes an actual list in SPO with your data source. Then that list will be available to search. Of course the challenge is maintaining the data in two places.

  • when you say "write client code that synchronizes an actual list in SPO with your data source", do you mean the actual WCF Source? Or are you agreeing with my option to synchronize with my external list?
    – Scubacode
    Jan 27, 2014 at 9:42
  • Client Code vs. Server Code. You cannot write server side code in SPO so you would need some kind of utility to perform the sync. Generally the approach is to use the Client Side Object Model and/or REST to sync the list. Jan 28, 2014 at 12:53
  • ok I've edited my question above with the code for my (first) app I've written that should sync the external list with an internal list to achieve the indexing
    – Scubacode
    Jan 28, 2014 at 15:01
  • I don't see your point. You asked if you can index external content in SPO. You can't. That's the answer to your question. Jan 28, 2014 at 17:57
  • Actually my question was how. I know it can't be done by default, but there must be a way around that by building a custom solution - that was my question
    – Scubacode
    Jan 29, 2014 at 9:01

The best solution for an external search is to create a hybrid services with SharePoint 2019. Build the SharePoint 2019 standalone box, hybrid it with SP online. Then add a content source for external data sources such as local drives. If Active Directory is hybrid, you can keep permissions of the on-prem Active Directory for those local drives. Additionally, content sources for other services used by your company can be added (I.e. URLs for Servicenow, salesforce, Jira etc...). This is better solution than making a page in sharepoint with the links exposed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.