Hi @Brian Levine
Greetings for the day, Thanks for reaching out to Q&A
1. How SharePoint Change Tracking Works
Change tracking is supported here, but it is not a full re-crawl, nor is it based on a configurable high-water-mark column.
The SharePoint connector documentation states that it:
“Indexes incrementally, picking up just the new and changed files, list items, pages, and metadata.”
“Detects deleted content automatically,” with deletions picked up during the next indexer run and the corresponding search document removed from the index.
The actual change-tracking mechanism is described in the ACL documentation, which is easy to overlook:
“The indexer uses SharePoint change tokens to pick up role assignment additions and removals incrementally, in the same way it picks up content changes.”
Therefore, the connector uses a service-managed cursor over the SharePoint change log, rather than comparing a configurable per-item timestamp column.
That said, the platform does use the term high-water mark for its internal state. The reset documentation states that “Reset clears the high water mark,” and the Create an Indexer documentation has a Change detection and internal state section explaining that a reset clears the high-water mark to allow a full reindex.
So, the HWM does exist internally; for the SharePoint connector, it is simply opaque and service-managed rather than user-configurable.
One important distinction: metadata_spo_item_last_modified is exposed as a field in the index, but there is no documentation indicating that this field is used as the change-tracking key.
2. How to Validate Incremental Processing
I don't have a published benchmark for two consecutive no-change runs, and I haven't personally run this test. Rather than relying on anecdotal results, the behavior can be validated directly through the indexer status API:
GET https://[service].search.windows.net/indexers/[generated-indexer]/status?api-version=2026-04-01
The response contains the 50 most recent executions, with the newest listed first.
Compare itemsProcessed across two consecutive executions. Also check initialTrackingState and finalTrackingState for each execution. The indexer troubleshooting documentation identifies these fields as the way to determine the indexer's change-tracking state; they represent the tracking state at the beginning and end of an execution.
There is one caveat: the API reference states that both fields are null when no data-change-tracking policy is configured on the data source. Since SharePoint's change tracking is built into the connector rather than configured as a separate policy, these fields may also be null in this scenario.
If the tracking-state fields are populated and advance between runs while itemsProcessed drops significantly on the second no-change run, that would provide strong confirmation that incremental change tracking is working as expected.
The generated indexer name can be obtained from the createdResources list returned during knowledge-source creation or viewed under Indexers in the Azure portal.
3. Where the Cost Risk Actually Sits
The more significant cost concern is downstream of change tracking, specifically enrichment.
The enrichment cache is normally used to prevent skills from running again against unchanged content. However, the SharePoint indexer (Preview) documentation explicitly advises against using incremental enrichment with this connector:
“If you're using the SharePoint indexer (Preview), avoid incremental enrichment. Under certain circumstances, the cache becomes invalid. To reload it, perform an indexer reset and full rebuild.”
This means that when an item is reprocessed for any reason, the associated skillset operations can run again. For workloads involving chunking and embeddings, that can result in additional processing and embedding costs.
Combined with the metadata churn already observed, even relatively modest content or metadata changes could therefore translate into meaningful re-embedding costs.
There is also an architectural limitation here: Foundry IQ generates the data source, skillset, indexer, and index automatically. The documentation advises against directly modifying these generated resources because doing so can introduce incompatibilities or break the indexing pipeline. Consequently, adding an enrichment cache directly to the generated indexer should not be treated as a supported workaround.
4. Additional Limitations
Two other points are worth keeping in mind:
Incremental ACL updates require API version 2026-05-01-preview or later.
Permission changes made at a parent scope—such as the site, library, list, or folder level—are not automatically picked up.
5. If Change-Driven Cost Becomes Material
If the investigation confirms that metadata/content churn is causing significant reprocessing and embedding costs, there are documented alternatives.
One approach is to move change detection to a surface that you control, for example:
SharePoint webhooks + Microsoft Graph, exporting content into Azure Blob Storage and then using the Blob indexer.
Logic Apps, using the SharePoint and Azure AI Search connectors.
These approaches give you greater control over change detection and also allow the enrichment cache to be used in a supported architecture.
Doc:
https://learn.microsoft.com/azure/search/search-how-to-index-sharepoint-online
https://learn.microsoft.com/azure/search/search-indexer-sharepoint-access-control-lists https://learn.microsoft.com/azure/search/enrichment-cache-how-to-configure https://learn.microsoft.com/azure/search/enrichment-cache-how-to-manage https://learn.microsoft.com/azure/search/search-howto-run-reset-indexers https://learn.microsoft.com/azure/search/search-monitor-indexers
https://learn.microsoft.com/azure/search/search-indexer-troubleshooting
https://learn.microsoft.com/azure/search/agentic-knowledge-source-how-to-sharepoint-indexed
Thanks