Dataverse Data Backup & Archival

Keep archived Dataverse data within reach

Move historical records, audit logs, and attachments to lower-cost Azure Data Lake storage while keeping them accessible in Power Apps and queryable with SQL.

Product walkthrough

Learn more

Dataverse Data Backup & Archival Solution

Explore the architecture, data access paths, and results described in the solution document. Download the original PDF.

Solution overview

Historical Dataverse data is moved out of premium Dataverse storage into lower-cost Azure storage without disappearing. Users can continue finding and opening archived records in Power Apps, while analysts can query the archive with SQL.

Lower storage cost

Ageing tables and audit history move from premium Dataverse capacity to Azure Data Lake Storage Gen2.

Nothing is hidden

Archived records surface through Virtual Tables in Power Apps and through Synapse SQL.

Built for audit

Business tables and audit logs are archived together in open formats, including CSV, blob, and Parquet.

Architecture at a glance

  1. Source: Microsoft DataverseBusiness tables, audit logs, and selected historical or inactive records.
  2. Archival engineA Scheduler Job triggers the Export Function App, which reads and converts selected records.
  3. Archive: Azure Data Lake Storage Gen2Archived data is stored as CSV files, Parquet files, and blobs.
  4. Query and accessSynapse Analytics provides SQL queries over the lake; an Access Function serves records on demand.
  5. Consumption: Power AppsVirtual Tables surface archived records in the apps users already know.

Export path

The Scheduler Job starts the Export Function App, which reads Dataverse and writes CSV, Parquet, and blob files to the lake.

Read-back path

Synapse SQL and the Access Function retrieve archived data for Virtual Tables and Power Apps.

What moves and what stays live

Historical table records, audit logs, and attachments are archival candidates. Current, active records remain in Dataverse.

Components and responsibilities

Two Azure Function Apps are deliberately separated: the Export Function writes to the archive, and the Access Function reads archived data back. This separation supports straightforward scheduling, scaling, and troubleshooting.

ComponentRoleDetails
Microsoft DataverseSource systemHolds business tables and audit logs; historical and inactive records are archival candidates.
Scheduler JobTriggerStarts the Export Module on a defined schedule so archival runs predictably and off-peak.
Export Function AppArchival engineReads Dataverse records and writes CSV, blob, and Parquet files to the lake.
Azure Data Lake Storage Gen2Archive storageProvides a scalable, lower-cost home for archived data in open formats.
Azure Synapse AnalyticsQuery layerRuns SQL queries directly over lake files for reporting, analysis, and the access layer.
Access Function AppRead-back serviceRetrieves archived records from the lake or Synapse and supplies them to Virtual Tables on demand.
Dataverse Virtual TablesTransparent presentationPresent archived data in Dataverse and Power Apps as if it had not left.
Power AppsUser experienceLets business users search, open, and work with archived records in their existing apps.

The flow, step by step

  1. Schedule fires. The Scheduler Job starts the Export Module in the Export Function App.
  2. Records are read. The export reads the selected Dataverse tables and audit data.
  3. Records are converted. Data is written to Data Lake Storage Gen2 as CSV, blob, and Parquet files.
  4. Data becomes queryable. Synapse Analytics exposes SQL queries over the lake files.
  5. Users see it again. The Access Function feeds Virtual Tables, and Power Apps presents the archived records transparently.

Open formats and access paths

The archive uses formats selected for how the data will be used, keeping it readable by standard Azure tools.

Parquet files

Compressed, columnar files for table data, efficient Synapse SQL scans, reporting, and analytics over large historical volumes.

CSV files

Plain, widely readable exports that are straightforward to inspect, exchange, and reload.

Blob files

File and attachment content preserved alongside record data so documents remain associated with their history.

In the app

Virtual Tables in Power Apps let users open archived records in the apps they already use.

With SQL

Synapse Analytics queries Parquet and CSV files in the lake for reporting, compliance extracts, and investigation.

In the lake

Archived files remain in open formats in Data Lake Storage Gen2, under the organisation's control.

Design principles

  • Cost follows age. Rarely accessed data belongs in a lower-cost storage tier rather than premium Dataverse storage.
  • Archival is not deletion. Tables and audit logs move together so records retain their history and attachments.
  • No new user behaviour. Archived data is accessed through Virtual Tables and familiar Power Apps.
  • Serverless where it counts. Function Apps and Synapse SQL scale with archival and query workloads.
  • Standard Azure building blocks. The design uses Dataverse, Functions, Data Lake Storage Gen2, and Synapse.

Confirm schedules, retention rules, and table selection with the implementation team before deployment.

CAPP Techs Inc.
Showcase

Dataverse Data Backup & Archival Solution

Archived Dataverse data, still at your fingertips

Historical Dataverse data is offloaded to low-cost Azure Data Lake storage — cutting Dataverse storage costs — while staying transparently accessible in Power Apps, queryable in Synapse SQL, and retrievable through a REST API. Every screen below is from a real customer environment.

$4,733.18 /monthEstimated cost gain — about $56,798 per year
121.76 GBTotal data archived out of Dataverse
63,918,498Records copied in 2 export commands

01 · The results

Cost dashboard — what the archive is saving

The solution's cost dashboard tracks every export command and the savings it generates, priced at Dataverse rates: table data at $40/GB and audit data at $10/GB. For this customer, two completed export commands moved 121.76 GB and 63,918,498 records out of Dataverse, for an estimated gain of $4,733.18 per month.

  • ClickDimensions Tables — 60,000,000 records, 120,000 MB: $4,687.50/month in table-data savings.
  • Audit-2018 — 3,918,498 records, 4,678 MB: $45.68/month in audit-data savings.
  • Filters by data type, command status and export year, with a per-command cost breakdown.
Data Backup cost dashboard showing 63,918,498 records copied, 121.76 GB total data copied and an estimated cost gain of $4,733.18, with ClickDimensions Tables and Audit-2018 export commands completed
Data Backup cost dashboard: records copied, total data copied, estimated cost gain and the per-command cost breakdown.

02 · Transparent access — users

Backup Audit — archived history inside the model-driven app

Archived audit records come back through a Dataverse virtual table, surfaced as a Backup Audit tab directly on the contact record in the model-driven app. Users see the complete change history — changed column, old value, new value, who made the change and when — in context, next to the Summary and Details tabs, with no separate tool and no restore operation.

Backup Audit tab on a contact record in a model-driven app, showing archived audit history with changed column, old value, new value, changed by and changed on
The Backup Audit tab on a contact record: archived audit history (field, old value, new value, changed by, changed on) displayed natively in the model-driven app.

03 · Transparent access — users

Backup Email — an archived email, opened in Power Apps

The same virtual-table access works for archived table data, not just audit. This archived email — “Meeting Notes - Team Sync” — opens read-only in the model-driven app with its sender, recipients, full message body and a working attachment link. Archived records behave like records; the read-only banner is by design, because archive data is preserved, not edited.

Archived Backup Email record open read-only in a model-driven app, showing sender, recipients, message body and a working attachment link
A Backup Email record opened from the archive in a model-driven app: header, recipients, body and attachment, in read-only mode.

04 · Analytics — analysts

Synapse SQL — the archive is fully queryable

For reporting and analysis, the archived data sits in a lake database (databackup_lh_prod) that Azure Synapse Analytics serves over SQL. This query reads the archived email table — with activityparty, audit and contact alongside it in the tree — and returns results in the Synapse Studio grid, ready for BI and ad-hoc analysis without touching Dataverse capacity.

Synapse Studio SQL query over the archived email table in the databackup_lh_prod lake database, with activityparty, audit and contact tables and a results grid
Synapse Studio running a SQL query over the archived email table in databackup_lh_prod, with the result grid below.

05 · Open storage — no lock-in

Data Lake structure — open formats in ADLS Gen2

Underneath, the archive lives in Azure Data Lake Storage Gen2 (account databackuplhprodsa, container databackuplhprodfs), organised in folders such as attachment and description, with data landed as monthly files — for example email_2000-01.csv. Records are exported as CSV, blob and Parquet files, so the archive stays readable with standard tools: your data is never locked into a proprietary format.

Azure Data Lake Storage Gen2 structure in Storage Explorer: databackuplhprodsa account, databackuplhprodfs container, attachment and description folders and monthly CSV files such as email_2000-01.csv
Azure Storage Explorer view of the archive: the ADLS Gen2 container, attachment and description folders, and monthly CSV files.

06 · Programmatic access — developers

REST API — GetRecord via Postman

Developers get a third path back to the data: a REST API. This Postman call — POST api/service/v2/GetRecord — asks for one archived email by ID, naming the columns and blob columns to return, with attachments and activity parties loaded. The API answers 200 OK with the record as JSON: the email fields, its description blob content, and its activity parties — the same archived email shown in Power Apps above, retrieved programmatically.

Postman POST api/service/v2/GetRecord request returning an archived email as JSON with a 200 OK response, including blob content and activity parties
Postman: a GetRecord request for an archived email and its 200 OK JSON response, including blob content and activity parties.
In Power AppsVirtual tables put archived audit and email records back inside the model-driven app, where users already work.
In Synapse SQLAnalysts query the lake database directly for reporting and BI, with no Dataverse capacity cost.
By REST APIDevelopers retrieve any archived record as JSON — fields, blobs, attachments and activity parties.

Cut your Dataverse storage costs

CAPP Techs Inc. • info@capptechs.com • https://capptechs.com
Full story: Dataverse Data Backup & Archival Solution — LinkedIn article

CAPP Techs Inc. • Dataverse Data Backup & Archival Solution — Showcase

Query it, browse it, call it

The same archive serves analysts, storage teams, and developers without a restore step or a separate portal.

SQL over the archive

The showcase describes querying archived email, audit, and contact data in Synapse Studio using standard SQL.

Open formats in your storage

Data Lake Storage Gen2 contains monthly files and attachment and description folders, without proprietary lock-in.

REST API for developers

A POST to api/service/v2/GetRecord returns an archived email record as JSON, including data, blob content, attachments, and activity parties.

Download the original PDF

Ready to learn more?

Talk with our team about your needs and the right next steps.

Contact CAPP Techs