Google Photos to Drive Backup
Pricing
from $30.00 / 1,000 results
Google Photos to Drive Backup
Under maintenanceDownload photos from public or shared Google Photos album links and upload them directly to your Google Drive. Automatically transfer images in bulk with no manual saving required.
Pricing
from $30.00 / 1,000 results
Rating
0.0
(0)
Developer
NEC
Actor stats
2
Bookmarked
2
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
Back up photos from any public Google Photos share link directly to your Google Drive with automatic folder organization, metadata preservation, and robust error handling.
πΈ What does Google Photos to Drive Backup do?
This Apify Actor takes a public Google Photos share link and downloads every photo from it, then uploads them to a folder in your Google Drive. It handles the entire process automatically β loading the share page in a browser, scrolling to discover all photos, downloading them with parallel streams, and uploading to Drive with organized folder structures.
β Why use Google Photos to Drive Backup?
- π§‘ Preserve shared memories β Back up family photo albums, event collections, or travel photos shared via Google Photos before the link expires or gets removed
- π Migrate between accounts β Move photos from one Google account to another without manual downloading
- ποΈ Automatic organization β Photos are sorted into monthly subfolders (2026-01, 2026-02) based on when they were taken
- π·οΈ Metadata preservation β Each photo gets a JSON sidecar file with the original URL, date taken, file size, and format
- β‘ Handles large collections β Supports albums with thousands of photos using concurrent downloads and memory-efficient streaming
- π‘οΈ Anti-bot measures β Uses stealth browser techniques to avoid Google's rate limiting and CAPTCHA challenges
π How to use Google Photos to Drive Backup
- Get your Google Photos share link β Open the shared album in Google Photos and copy the share URL
- Get your Google Drive folder ID β Navigate to the destination folder in Google Drive and copy the folder ID from the URL (
https://drive.google.com/drive/folders/{FOLDER_ID}) - Configure the Actor β Paste the share link and folder ID into the Actor input
- Run it β Start the Actor. On first run, open the live view tab and click "Authorize" to grant Google Drive access through the OAuth consent screen
- Done β Subsequent runs reuse the stored token automatically, no re-authorization needed
βοΈ Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
googlePhotosShareLink | string | Yes | β | Public Google Photos share URL |
sharePassword | string | No | β | Password for protected shares |
destinationFolderId | string | Yes | β | Google Drive folder ID for uploads |
googleClientId | string | No | β | Your Google OAuth 2.0 Client ID |
googleClientSecret | string | No | β | Your Google OAuth 2.0 Client Secret |
googleRedirectUri | string | No | http://localhost | OAuth 2.0 redirect URI |
oauthRefreshToken | string | No | β | OAuth2 refresh token (skips interactive auth) |
createMonthlySubfolders | boolean | No | true | Organize into YYYY-MM subfolders |
maxPhotosToDownload | integer | No | 100000 | Safety limit for photo count |
concurrentDownloads | integer | No | 4 | Parallel download streams (1-16) |
includeMetadataFiles | boolean | No | true | Create .metadata.json sidecars |
skipIfDuplicateExists | boolean | No | false | Skip files that already exist |
Example input
{"googlePhotosShareLink": "https://photos.app.goo.gl/AbCdEfGhIjKlMnOp","destinationFolderId": "1zyx9wvu8tsr7qpo9nml8kji7hug6fed","createMonthlySubfolders": true,"concurrentDownloads": 4,"includeMetadataFiles": true}
π¦ Output
The Actor pushes a summary result to the default dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Example output
{"success": true,"summary": {"photosDiscovered": 47,"photosDownloaded": 47,"photosSkipped": 0,"photosFailed": 0,"photosUploaded": 47,"totalDataDownloaded": 156237824,"totalDataUploaded": 156237824,"executionTimeMs": 124532},"errors": [],"destinationFolderName": "Google Photos Backup - 2026-05-01 10:30:00","shareLink": "https://photos.app.goo.gl/AbCdEfGhIjKlMnOp","metadataFilesCreated": 47}
ποΈ Data fields
| Field | Description |
|---|---|
success | Whether all photos were processed without failures |
summary.photosDiscovered | Total photos found on the share page |
summary.photosDownloaded | Photos successfully downloaded |
summary.photosUploaded | Photos successfully uploaded to Drive |
summary.photosSkipped | Photos skipped (duplicates) |
summary.photosFailed | Photos that failed after retries |
summary.totalDataDownloaded | Total bytes downloaded |
summary.totalDataUploaded | Total bytes uploaded |
summary.executionTimeMs | Total run time in milliseconds |
errors | Array of individual error records |
destinationFolderName | Name of the root backup folder created |
metadataFilesCreated | Number of .metadata.json sidecar files |
π Google Drive folder structure
The Actor creates an organized folder structure in your Drive:
Your Destination Folder/βββ Google Photos Backup - 2026-05-01 10:30:00/βββ 2026-01/β βββ IMG_20260115_123456.jpgβ βββ IMG_20260115_123456.jpg.metadata.jsonβ βββ ...βββ 2026-02/β βββ ...βββ undated/βββ photo_001.jpg
When createMonthlySubfolders is disabled, all photos go directly into the root backup folder.
π‘ Tips and advanced options
- Start small β Set
maxPhotosToDownloadto 10 for your first run to verify everything works - Concurrency tuning β Use 2-4 concurrent downloads for most cases. Higher values (8-16) are faster but more likely to trigger rate limiting
- Skip duplicates β Enable
skipIfDuplicateExistsif you're re-running the Actor on the same album to avoid uploading photos twice - Metadata files β The
.metadata.jsonsidecars are useful for tracing photos back to their source. Disable withincludeMetadataFiles: falseif you don't need them - Password-protected shares β Provide the
sharePasswordinput if the album requires a password
π Google authentication
The Actor supports two ways to authenticate with Google Drive:
Interactive flow (recommended for first-time use)
On first run, the Actor opens an authorization page in the live view tab. Click "Authorize" and log in with your Google account to grant Drive access. Tokens are stored automatically and reused on all subsequent runs β no re-authorization needed.
You can optionally provide googleClientId and googleClientSecret to use your own Google Cloud project instead of Apify's built-in credentials.
Refresh token (for automation and scheduling)
Provide an oauthRefreshToken to skip the interactive flow entirely. This is the recommended approach for scheduled runs. You can also provide googleClientId and googleClientSecret alongside the refresh token to use your own Google Cloud project.
To get a refresh token:
- Go to the Google Cloud Console and create an OAuth 2.0 Client ID (type: Web application)
- Enable the Google Drive API in your project
- Visit the Google OAuth Playground, click the settings gear, check "Use your own OAuth credentials", and enter your Client ID and Secret
- Select the
https://www.googleapis.com/auth/drivescope, authorize, and exchange for tokens - Copy the Refresh Token (and optionally the Client ID, Client Secret) into the Actor input
Credential priority
The Actor resolves credentials in this order:
googleClientId/googleClientSecret/googleRedirectUrifrom Actor input- Apify's built-in credentials (interactive flow only)
β FAQ, disclaimers, and support
Is this legal? This Actor accesses publicly shared Google Photos links β the same content anyone with the link can view in a browser. It does not bypass any authentication or access controls. Always ensure you have permission to download and store the shared content.
Why do I get a CAPTCHA? Google may present a CAPTCHA challenge if it detects automated access. The Actor uses stealth techniques to minimize this, but it can still happen with large albums or frequent runs. If you encounter a CAPTCHA, wait a few hours before retrying.
What image quality do I get? Google Photos public shares serve compressed versions of photos, not the original full-resolution files. This is a limitation of how Google serves shared content.
Can I schedule regular backups? Yes β use Apify's built-in scheduling to run the Actor periodically. Enable skipIfDuplicateExists to avoid re-uploading photos that are already in your Drive.
Found a bug or have a feature request? Open an issue in the Actor's Issues tab on the Apify Console.