Features Pricing Blog Contact Sign in

Nobody Tracks Tag Changes in Shopify. Not Even Shopify.

Contents
Does Shopify track tag changes? Why tag tracking matters What causes tags to change Three ways to track tag changes What good tag tracking looks like

Shopify does not track tag changes. Not in the customer timeline, not in the admin activity log, not in the API. When a tag is added, removed, or overwritten, the old state vanishes. There is no record of what was there before, who changed it, or when it happened.

If you run any kind of segmentation, automation, or discount logic based on tags, this is a problem you will eventually hit. This post explains why it happens and what you can do about it.

Does Shopify track tag changes?

No. Shopify does not record tag changes anywhere.

The customer timeline shows certain events: orders placed, emails sent, account creation, notes added by staff. But tag modifications are completely absent. If someone adds "VIP" to a customer today and another app removes it tomorrow, the timeline shows nothing.

The Shopify admin activity log (under Settings > Activity log) tracks staff actions like theme edits, app installs, and permission changes. Tag edits are not included. There is no filter for them, no search, no export.

The API is the same story. The customer/update webhook fires when a customer record changes, but the payload only contains the current state. It does not tell you what changed. You get the full customer object with the current tag list, and nothing about what the tags were five minutes ago.

This means there is no native way to answer a basic question: "Who changed this customer's tags, and when?"

Why tag tracking matters

Tags are not just labels. In most Shopify stores, they are the primary mechanism for segmentation and automation.

Shopify Flow triggers on tags. You might have a flow that sends a win-back email when a customer gets tagged "churned", or one that assigns a loyalty tier based on "gold" or "silver" tags. Klaviyo, Omnisend, and other email platforms pull customer tags to build segments. Discount codes can be scoped to customers with specific tags.

When a tag changes unexpectedly, the downstream effects are silent. A customer loses their "wholesale" tag and suddenly gets charged retail prices. A "do-not-email" tag gets stripped during a bulk import and that customer starts receiving campaigns again. A Flow that depends on the "VIP" tag stops firing because an app renamed it to "vip" with different casing.

Without a record of the change, debugging these issues means guessing. You check the current tags, confirm the expected behavior, and then try to reconstruct what happened by asking team members or checking app logs. It is slow and unreliable.

What causes tags to change

Tags change through several channels, and every single one is invisible to you after the fact.

Shopify Flow. Flows can add and remove tags as actions. If a flow condition changes or misfires, it can tag or untag hundreds of customers in minutes. The Flow run history shows that an action executed, but does not record what the customer's tags were before the action ran.

Bulk edits. Selecting customers in the admin and applying or removing tags in bulk is fast and convenient. It is also completely unlogged. If a staff member accidentally selects the wrong customer segment and removes a critical tag, there is no undo and no record.

Third-party apps. Any app with the write_customers scope can modify customer tags through the API. Loyalty apps, review platforms, CRM integrations, subscription tools. Each one can add, remove, or overwrite tags. Most do not keep their own logs of what they changed.

Manual staff edits. Opening a customer profile and editing the tag field directly. This is the simplest form of tag modification and the hardest to trace. There is no "last modified by" indicator on the tags field.

CSV imports. Importing a customer CSV can overwrite existing tags entirely, depending on how the import is configured. If the CSV has a tags column, whatever is in that column replaces the current tags for matched customers.

Three ways to track tag changes

1. Build a custom webhook listener

You can subscribe to the customers/update webhook and compare the incoming tag list against a stored snapshot. Every time the webhook fires, you diff the old and new tags, record what was added or removed, and store the result with a timestamp.

This works in theory. In practice, it requires you to maintain a database of every customer's last-known tag state. The webhook fires for every customer update (not just tag changes), so you need to filter out noise. You also need to handle webhook retries, ordering, and the fact that rapid successive changes can arrive out of order.

If you have the engineering resources and want full control, this is viable. But it is not a weekend project. Handling edge cases around webhook reliability and state management takes real effort.

2. Check Shopify's built-in audit log

You cannot. Shopify's admin activity log does not include tag changes. The customer timeline does not include them either. There is simply no native audit trail for tags.

This is the answer most people arrive at after searching Shopify's documentation and community forums. The feature does not exist. Shopify treats tags as simple metadata, not as auditable state.

3. Use a purpose-built tracking app

An app that subscribes to the relevant webhooks, diffs the state, stores the history, and presents it in a usable format. Instead of building the infrastructure yourself, you install an app that handles the webhook plumbing, stores every change with a timestamp, and shows you a clear timeline of what happened.

The advantage here is obvious: you skip months of engineering work and get the result immediately. The tradeoff is that you are trusting a third-party app with your customer data, and you need to evaluate whether the app handles the edge cases correctly.

What good tag tracking looks like

If you are evaluating a solution (whether building one or choosing an app), here is what actually matters.

Per-resource timeline. You should be able to open any customer, product, or order and see a chronological list of every tag change. Not a global log that you have to search through, but a timeline attached to the specific resource.

Old and new values. Every entry should show exactly what changed. "VIP" was removed. "wholesale" was added. Not just "tags were updated", but the specific diff.

Timestamps. Every change needs a precise timestamp, not just a date. When you are debugging why a flow misfired at 2:14 PM, knowing that a tag was removed at 2:13 PM is the difference between finding the root cause in seconds and spending an hour on it.

Embedded in the admin. A separate dashboard is fine for reporting, but the real value is seeing tag history right where you work. An app block or extension that shows up in the Shopify admin, on the customer detail page, means your team actually uses it.

Covers all change sources. Whether the change came from Flow, a bulk edit, a third-party app, or a manual staff edit, it should all appear in the same timeline. Partial coverage is almost worse than no coverage, because it creates false confidence.

Tags are too important to operate on blindly. If your store depends on them for segmentation, automation, or pricing, you need to know when they change. Shopify will not tell you. Something else has to.

Track every tag change automatically

Beemlo records tag and metafield changes with timestamps, old and new values, right inside your Shopify admin.

Install Beemlo