Blog

Never lose track of your Shopify theme changes: automated Shopify theme backups with GitHub Actions

Scheduled GitHub Actions + the Shopify CLI give you daily, diff-friendly backups of your live theme — with real commit history and no vendor lock-in.

ByUlrich Lehner Published TagsShopify · GitHub Actions · DevOps · Version Control

The problem with manual theme management

Shopify lets you edit theme code and restore individual file versions, but tracking changes across time — especially with multiple editors — is painful. Version controlling your theme in Git would be the obvious answer, except Shopify doesn't ship that out of the box.

The solution: automated backups with GitHub Actions

Scheduled GitHub Actions (similar to cron jobs) combined with the Shopify CLI can automatically pull remote theme changes and push them to a GitHub repository. Every morning you have a clean diff of what changed, committed to a real branch, stored somewhere you control.

Setup

Prerequisites

  1. Create a private Shopify app for your store.
  2. Give it read permission for themes.
  3. Configure GitHub Secrets under Settings / Secrets / Actions: SHOPIFY_SHOP and SHOPIFY_APP_PASSWORD.
  4. Use Admin API credentials. Theme Kit Access app passwords may not work with the current Shopify CLI flow.

Workflow

Add this file at .github/workflows/shopify-backup.yml in a repository that contains (or will contain) your theme code:

name: Pull Shopify Theme

on:
  schedule:
    - cron: "0 3 * * *"
  workflow_dispatch:

jobs:
  pull:
    name: Backup
    runs-on: ubuntu-latest
    env:
      CI: 1
      SHOPIFY_SHOP: ${{ secrets.SHOPIFY_SHOP }}
      SHOPIFY_PASSWORD: ${{ secrets.SHOPIFY_APP_PASSWORD }}
    steps:
      - name: Install
        run: sudo gem install shopify-cli
      - name: Checkout
        uses: actions/checkout@v2
      - name: Pull theme
        run: |
          shopify login
          shopify theme pull --live
      - name: Check for changes and apply
        run: |
          git config --global user.name 'YOUR BOT NAME'
          git config --global user.email 'SOME E-MAIL'
          {
            git add --all && git commit -m "feat: remote from `date`" && git push && printf "\n" && echo "::notice::✅ Updated with latest from remote Shopify theme"
          } || {
            printf "\n" && echo "::notice::ℹ️ There are no updates in the remote Shopify theme"
          }

Implementation notes

  • Update the git user name and email placeholders with your bot credentials.
  • The action runs daily at 03:00 UTC and only commits when there are real changes to push.
  • You can also run it on demand via the workflow_dispatch trigger in the GitHub Actions UI.
  • If you want branch protection on main, point the action at a dedicated shopify/ branch and merge manually.

This gets you change tracking, rollback, and diff review for what was previously a black-box live-edit workflow — for zero ongoing cost.