When you run a large migration batch overnight for OneDrive for Business, the process may slow to a crawl or stop entirely by morning. This happens because Microsoft 365 applies service-side throttling to protect system stability when migration requests exceed certain thresholds. Throttling limits the number of API calls your migration tool can make per minute, causing progress to stall. This article explains why overnight batches get throttled and provides specific steps to reduce throttling impact and keep your migration moving.
Key Takeaways: Reduce Throttling During Large OneDrive Migrations
- Microsoft 365 admin center > Settings > Org settings > Migration: Adjust the migration throttle policy to increase the allowed requests per minute for your tenant during overnight windows.
- Migration tool retry and backoff settings: Configure exponential backoff in your tool (for example, ShareGate or Mover) to automatically pause and retry when throttling responses are received.
- PowerShell script with sleep intervals: Add Start-Sleep commands between API calls to stay within the 150 requests per minute limit and avoid triggering throttling.
Why Overnight Migration Batches Get Throttled
Microsoft 365 throttles migration traffic to prevent a single tenant from overwhelming shared service resources. The default throttling limit for OneDrive migration API calls is 150 requests per minute per app. When your batch exceeds this rate, the service returns HTTP 429 errors or delays responses. Overnight batches are especially vulnerable because many organizations schedule large migrations during low-usage windows. Without careful pacing, the initial burst of requests immediately triggers throttling, and the migration tool may not recover until the next day.
The throttling mechanism uses a sliding window. If you send 200 requests in one minute, the service records the excess and continues to enforce limits for the next several minutes. This cascading effect can stall a batch for hours. Additionally, some migration tools do not automatically handle throttling responses. They keep retrying at full speed, which worsens the problem. Understanding this cause helps you apply the correct fix: slowing down the request rate rather than increasing it.
Steps to Fix Throttling in Large OneDrive Migration Batches
These steps apply to any migration tool that uses the SharePoint Online or OneDrive API, including native PowerShell scripts, ShareGate, Mover, and third-party tools. Perform each step in the order shown.
- Check current throttling status in the Microsoft 365 admin center
Sign in to the Microsoft 365 admin center at admin.microsoft.com. Go to Settings > Org settings > Migration. Look for the Throttling section. Note the default limit of 150 requests per minute. If your tenant has a migration support request, you may see a higher temporary limit. Do not rely on this without confirmation from Microsoft Support. - Request a migration throttle increase from Microsoft Support
Open a support ticket in the Microsoft 365 admin center. Explain that you are running a large OneDrive migration batch overnight and need a temporary throttle increase. Request a limit of 500 to 1000 requests per minute for a specific date range. Provide the exact start and end times for your batch window. Microsoft typically grants these increases for 72 hours or less. Wait for confirmation before proceeding. - Configure your migration tool to use exponential backoff
In tools like ShareGate, open the migration settings. Find the Retry policy or Backoff section. Enable Exponential backoff with an initial wait of 5 seconds and a maximum wait of 60 seconds. This causes the tool to pause and retry when it receives a 429 throttling error. For Mover, set the Retry delay to 10 seconds and enable Throttle-aware retry. Save the settings. - Adjust batch size and parallelism in the migration tool
Reduce the number of items migrated simultaneously. In ShareGate, set Maximum concurrent operations to 10 instead of the default 50. In Mover, set Max concurrent transfers to 5. For PowerShell scripts, limit the number of parallel jobs to 5. This directly reduces the request rate per minute. - Add pacing logic to custom PowerShell scripts
If you use a custom script, insert a Start-Sleep command after every API call. Use a random delay between 200 and 500 milliseconds to avoid synchronized bursts. Example:Start-Sleep -Milliseconds (Get-Random -Minimum 200 -Maximum 500). Also add error handling that catches 429 responses and waits 30 seconds before retrying that specific request. - Run a test batch before the full overnight window
Start a small test of 50 users 24 hours before the main batch. Monitor the Migration reports in the admin center. Check for any 429 errors or delays. If the test completes without throttling, proceed with the full batch. If throttling occurs, reduce parallelism further and repeat the test. - Monitor the migration in real time
During the overnight batch, open the Migration dashboard in the admin center. Watch the Requests per minute graph. If it approaches 150, pause the batch manually for 10 minutes. Resume after the graph drops below 100. Some tools support automatic pausing based on API response times. Enable that feature if available.
If Throttling Persists After Applying the Fixes
Even after following the steps above, some migration batches still experience throttling. This section covers additional failure patterns and their specific remedies.
Migration tool shows repeated 429 errors despite backoff settings
If your tool still shows 429 errors, the backoff configuration may not be active. Verify that the retry policy is applied to the correct migration endpoint. Some tools have separate settings for SharePoint and OneDrive. Also confirm that the tool version supports exponential backoff. Update to the latest version if needed. As a fallback, reduce the maximum concurrent operations to 3 and rerun the batch.
Throttling occurs only for specific file types or sizes
OneDrive throttles differently for large files above 250 MB. If your batch includes many large files, the migration tool may hit a per-file throttling limit. Split large files into separate batches or use the OneDrive sync app for those files instead of the migration API. For files above 15 GB, use the SharePoint Migration Tool which handles large files more efficiently.
Migration stops completely at a certain time each night
This pattern indicates a tenant-wide maintenance window. Microsoft 365 performs periodic maintenance that can block migration API calls for 15 to 30 minutes. Check the Service health dashboard in the admin center for any scheduled maintenance events. If maintenance is scheduled, shift your overnight batch to a different window or split it into two smaller batches before and after the maintenance period.
Throttle Request Increase vs Tool-Based Pacing: Key Differences
| Item | Request Throttle Increase from Microsoft | Tool-Based Pacing (Backoff and Parallelism) |
|---|---|---|
| Description | A temporary raise of the API request limit per minute granted by Microsoft Support | Configuration changes in the migration tool to slow down requests and handle throttling responses automatically |
| Time to implement | 4 to 24 hours depending on support response time | 15 minutes for most tools |
| Duration of effect | Limited to the specified date range, usually 72 hours | Permanent for the tool configuration |
| Risk of overuse | Low if the increase is within Microsoft’s guidelines | None because the tool stays below the default limit |
| Best for | One-time large batches exceeding 1000 users | Recurring migrations or smaller batches under 500 users |
Now you can run large OneDrive migration batches overnight without stalling due to throttling. Start by requesting a temporary throttle increase from Microsoft Support if your batch exceeds 1000 users. Then configure your migration tool with exponential backoff and reduced parallelism. For custom PowerShell scripts, add sleep intervals between API calls. An advanced tip: Use the Get-SPOMigrationJobProgress cmdlet to monitor job status and automatically pause the batch when the request rate exceeds 120 per minute.