{"id":134443,"date":"2026-06-10T08:00:00","date_gmt":"2026-06-10T15:00:00","guid":{"rendered":""},"modified":"2026-06-09T23:09:08","modified_gmt":"2026-06-10T06:09:08","slug":"bulk-deletion-in-dataverse","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2026\/06\/10\/bulk-deletion-in-dataverse\/","title":{"rendered":"Bulk Deletion in Microsoft Dataverse: New Capabilities for Data Lifecycle Management"},"content":{"rendered":"\n
Every Dataverse environment generates data that outlives its usefulness, workflow logs, audit trails, system jobs, plug-in traces, test records, stale transactional data. Left unmanaged, this data accumulates, consumes storage, and eventually forces administrators into reactive, large-scale cleanups. <\/p>\n\n\n\n
Bulk Deletion<\/strong> is the native Dataverse capability built to prevent exactly that. In this post, we’ll cover what Bulk Deletion is, how to use it as part of a data lifecycle management, and the improvements that are now general available beginning June 2026. <\/p>\n\n\n\n Bulk Deletion is a native Dataverse capability that lets administrators define and run jobs to remove large volumes of records based on a query. Instead of writing custom scripts or one-off automations, admins configure a query, for example, “all completed system jobs older than 90 days\u201d and<\/em> let the platform execute the deletion in the background. <\/p>\n\n\n\n A bulk deletion job can be: <\/p>\n\n\n\n Under the hood, Bulk Deletion respects security, cascading rules, plug-ins, and workflows. It behaves like a regular delete, just at scale and on a schedule. <\/p>\n\n\n\n Use Bulk Deletion any time you need to remove a meaningful volume of records based on a repeatable, query-based rule. Common scenarios: <\/p>\n\n\n\n If the rule for what to delete can be expressed as a query, Bulk Deletion is almost always the right answer. <\/p>\n\n\n\n The single most important guideline: define data deletion jobs <\/strong>the day an environment is provisioned for any table likely to accumulate data that will eventually no longer be needed. <\/p>\n\n\n\n A data deletion job is a documented rule, per table, for what to delete, when to delete it, and how often the rule runs. It is also called a bulk delete job. Without one, environments tend to follow a predictable pattern: <\/p>\n\n\n\n Treat data deletion as a Day-1 design decision, alongside security roles, solution architecture, and integration design. <\/p>\n\n\n\n For every table, system or custom, one should answer these three questions: <\/p>\n\n\n\n If the answer to (3) is “no”<\/em> for any table that grows, you are accumulating storage and operational debt. Schedule a recurring bulk deletion job up front. Even a simple weekly job that removes records older than your retention window will hold the table at a steady state. <\/p>\n\n\n\n Think of a data deletion job the way you’d think of garbage collection in a running application, a routine, automated process that keeps the system healthy, not an afterthought once memory runs out.<\/p>\n\n\n\n As Dataverse adoption has scaled, three themes have come up consistently: <\/p>\n\n\n\n These themes shaped the updates now reaching general availability. <\/p>\n\n\n\n Every bulk deletion job now includes a Run details<\/strong><\/a> tab. Open a job and you’ll see a summary at the top \u2014 start time, end time, status, records deleted, records failed, and errors encountered. Specific errors are listed inline: <\/p>\n\n\n\n Diagnose, fix the root cause, and move on without guessing.<\/p>\n\n\n\n Bulk deletion jobs are now solution-aware<\/strong><\/a>. Build and validate cleanup logic in development or sandbox, then move the same configuration to pre-production and production using standard solution export and import. The full job definition, filters, schedule, and name, travels with the solution. <\/p>\n\n\n\n What this means in practice: <\/p>\n\n\n\n Step 1<\/strong> \u2013 Go to maker portal, create a new solution and edit it to add an existing bulk delete job.<\/p>\n\n\n\n Step 2 <\/strong>\u2013 Go to Add existing> More > Other > Data Life Cycle Config to add an existing bulk delete job. <\/p>\n\n\n Step 3 <\/strong>– Select the bulk deletion job to add to the solution.<\/p>\n\n\n\n Step 4 <\/strong>\u2013 With the bulk delete job in a solution, export the solution as you would for any other component. <\/p>\n\n\n Deleted records keeping<\/a> is one of the most valuable safeguards for your business-critical data. As it moves from public preview to general availability, bulk deletion jobs in environments where deleted records keeping is enabled will copy records to the deleted records tables before removing them, giving you a recovery window if something is deleted in error. For data that matters to your business, that safety net is well worth the small amount of additional storage it uses.<\/p>\n\n\n\n That said, not every record needs to be recoverable once it reaches the end of its data lifecycle. Old system logs, expired workflow records, and transient telemetry are unlikely to ever be restored, yet keeping copies of them still consumes storage and adds processing overhead to every deletion job.<\/p>\n\n\n\n For exactly these situations, the new Permanent deletion<\/a> checkbox in the Bulk Deletion Wizard lets you opt out of deleted records keeping for a specific job. When selected, it not only reduces the storage consumed by stale records, but also eliminates certain processing steps, which speeds up the deletion job itself.<\/p>\n\n\n\n The checkbox is available only for one-shot, non-recurring jobs, by design. Limiting it this way ensures admins make a conscious choice every time and avoids a scenario where a recurring job configured long ago keeps permanently deleting data without anyone realizing.<\/p>\n\n\n\n When Permanent deletion<\/a> is selected:<\/p>\n\n\n\n Use it for non-recurring cleanup of data with a known expiration, the kind of data you would never need to restore anyway.<\/p>\n\n\n\n Caution:<\/strong> permanent deletion is exactly that. There is no undo. Verify the data targeted by your job is truly disposable before enabling this option.<\/em><\/p>\n\n\n We’ve made foundational updates to the Bulk Deletion framework, smarter record fetching, more efficient progress tracking, and refined thread management. These changes apply automatically; no configuration is required. <\/p>\n\n\n\nWhat is Bulk Deletion?<\/strong> <\/h2>\n\n\n\n
\n
\n
\n
\n
When should Bulk Deletion be used?<\/strong> <\/h2>\n\n\n\n
\n
\n
\n
\n
\n
\n
How Bulk Deletion should be used \u2014 setup deletion jobs on day one<\/strong> <\/h2>\n\n\n\n
\n
\n
\n
\n
\n
Setting a data deletion job<\/strong> <\/h2>\n\n\n\n
\n
\n
\n
What administrators have been telling us<\/strong> <\/h2>\n\n\n\n
\n
What’s new<\/strong> <\/h2>\n\n\n\n
1. Error handling and run visibility<\/strong> <\/h3>\n\n\n\n
\n
\n
<\/figure>\n\n\n\n 2. Solution-aware bulk deletion jobs<\/strong> <\/h3>\n\n\n\n
\n
\n
\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure>\n\n\n
<\/figure>\n\n\n\n3. Permanent deletion checkbox in the Bulk Deletion Wizard<\/strong> <\/h3>\n\n\n\n
\n
<\/figure>\n\n\n\n4. Engine refinements and a new sandbox deletion mode<\/strong> <\/h3>\n\n\n\n