Google Drive Backup to Azure Blob
Each night the flow exports new and changed files from Google Drive folders to an Azure Blob container organized by date, computes and stores a manifest with hashes for integrity, and reports counts and failures to Teams. Provides an immutable off-platform backup of Google Drive content.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
This flow provides an off-platform, verifiable backup of Google Drive content into Azure Blob Storage. On a nightly schedule it lists a configured Google Drive folder, backs up every new or changed file into a date-organized Blob path, writes a JSON manifest (per-file integrity record) to the container, and posts a run summary (counts + correlation id) to Microsoft Teams. Idempotency and change-detection are handled by a Dataverse ledger keyed on the Drive file id + ETag, so unchanged files are skipped and failures are recorded for retry.
Why it matters: A single-platform copy is a risk. A dated, manifested Blob backup with a Dataverse ledger gives recoverable, auditable, incremental off-site protection.
As-built status: Built and verified - Flow Checker 0 errors / 0 warnings (in-designer); ships Off.
Use Case
IT Admins and Developers want a nightly, incremental, verifiable backup of a critical Google Drive folder to Azure Blob, with an integrity manifest and a Teams status report - without re-copying unchanged files.
Flow Architecture
Recurrence
RecurrenceNightly backup window (Day/1 @ 02:00).
Initialize_Correlation_Id
Initialize VariableMint run correlation id (@guid()) for tracing.
Initialize_Blob_Account / Container / Date_Path
Initialize VariableBind env vars + today's yyyy/MM/dd folder.
Initialize_Backed_Up_Count / Failed_Count / Skipped_Count
Initialize VariableRun counters (Integer 0).
Initialize_Manifest
Initialize Variable (Array)Accumulates per-file manifest lines.
List_Google_Drive_Folder
Google Drive - ListFolderList items in the source folder (flat array).
For_Each_Drive_Item
Foreach (concurrency 1)Process each item sequentially.
Check_If_Item_Is_File
ConditionIgnore sub-folders (IsFolder == false).
Lookup_Existing_Ledger_Row
Microsoft Dataverse - ListRecordsFind prior backup record ($filter on drive file id, $top 1).
Check_If_New_Or_Changed
ConditionBack up only new/changed files (no row OR stored ETag != current ETag); else skip.
Backup_File_Scope
Scope (try)Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_GDriveBackupFolderId | String | REPLACE_WITH_GOOGLE_DRIVE_FOLDER_ID | Google Drive source folder id whose files are backed up. |
| flowlibs_BackupBlobAccount | String | REPLACE_WITH_STORAGE_ACCOUNT | Azure Blob storage account name (the dataset). |
| flowlibs_BackupBlobContainer | String | gdrive-backup | Destination Blob container. |
| flowlibs_BackupLedgerEntity | String | flowlibs_gdrivebackupledgers | Dataverse ledger entity set name (documentation/portability). |
| flowlibs_TeamsGroupId | String | <your-team-id> | Teams team/group id for the summary post (reused). |
| flowlibs_TeamsChannelId | String | <your-channel-id> | Teams channel id for the summary post (reused). |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Google Drive | shared_googledrive | ListFolder GetFileContent |
| Azure Blob Storage | shared_azureblob | CreateFile_V2 |
| Microsoft Dataverse | shared_commondataserviceforapps | ListRecords CreateRecord UpdateRecord |
| Microsoft Teams |
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Multiple folders
- Make flowlibs_GDriveBackupFolderId a comma list and wrap the list/loop in an outer Foreach, or clone the List action per folder.
- True checksums
- Add an Azure Function (or Drive md5Checksum via HTTP) after Get_Drive_File_Content and store the hash alongside the ETags in the manifest/ledger.
- Immutability / ransomware resilience
- Enable WORM (immutable blob) + versioning on the container; add lifecycle policies for per-folder retention.
- Restore flow
- Build a companion flow that reads a manifest and restores files from Blob back to Drive/SharePoint.
- Recursive folders
- Drive ListFolder is non-recursive; add a sub-folder walk if nested backup is needed.
- Schedule
- Adjust the Recurrence trigger (frequency/hour) to the desired backup window.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Date folder
Date-organized backup path segment.
EXPR.02Blob folder path
Destination folder for the day's backup.
EXPR.03Only files
Ignore sub-folders.
EXPR.04New or changed
Back up only new or content-changed files.
EXPR.05Manifest file name
Per-run manifest file name.
EXPR.06Correlation id
Minted in the first action for end-to-end tracing.
Customize & download
Generate a ready-to-import copy of this solution with your environment-variable values baked in — available on Base, Pro, or Team.
Upgrade to customize
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.