{"id":13172,"date":"2026-09-28T07:35:00","date_gmt":"2026-09-28T05:35:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=13172"},"modified":"2026-09-25T15:07:51","modified_gmt":"2026-09-25T13:07:51","slug":"tutorial-finding-the-container-version-in-which-a-tag-changed","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/","title":{"rendered":"Tutorial: Finding the Container Version in Which a Tag Changed"},"content":{"rendered":"<p>A number in a report changes on a Tuesday. The container was published four times that month, and the version list says who did it and when &#8211; and nothing at all about what moved inside.<\/p>\n<p>Opening four versions and reading them is possible. Opening forty is not, and forty is the usual number by the time somebody notices. What follows finds the version first and only then compares two.<\/p>\n<figure class=\"lw-diagram\">\n<img src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/containerversion-finden-en.png\" width=\"1120\" height=\"580\" decoding=\"async\" loading=\"lazy\"\n     alt=\"Eight container versions listed with date, publisher and the fingerprint of one tag, with the two rows highlighted in which that fingerprint changed\"><figcaption>The fingerprint of one element across eight versions. Two rows differ from the one above them, and those two are the only ones worth opening.<\/figcaption><\/figure>\n<h2>What the Version List Shows and What It Hides<\/h2>\n<p>Every publication creates a version, and the version is a complete, immutable copy of the container at that moment. The list of them shows four things: a number, a name, who published it, and when.<\/p>\n<p>What it does not show is the content. Two versions can differ in one character of one variable, and the list looks identical either way. The change count next to a version helps a little and misleads a lot, because it counts the changes made in the workspace rather than the difference to the previous version &#8211; a workspace that was edited and reverted contributes to the count without changing anything.<\/p>\n<p>The one field that would answer the question directly is the version notes. It is free text, it is written at publication time, and it is empty in almost every container in existence. Filling it in is the cheapest possible improvement to this whole problem, and it only helps from now on.<\/p>\n<h2>Pulling the Versions Through the API<\/h2>\n<p>The Tag Manager API returns the same versions the interface shows, and the full content of each one. Read access is enough.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code># Umfang: https:\/\/www.googleapis.com\/auth\/tagmanager.readonly\n\nBASIS=\"https:\/\/tagmanager.googleapis.com\/tagmanager\/v2\"\nPFAD=\"accounts\/6000000001\/containers\/7000000002\"\n\n# 1 die Liste der Versionen - kurz, ohne Inhalt\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n  \"$BASIS\/$PFAD\/version_headers\" | jq -r \\\n  '.containerVersionHeader[] | [.containerVersionId, .name] | @tsv'\n\n# 2 eine vollstaendige Version\ncurl -s -H \"Authorization: Bearer $TOKEN\" \\\n  \"$BASIS\/$PFAD\/versions\/41\" &gt; version-41.json<\/code><\/pre>\n<p>Two things about the first call are worth knowing. It returns headers rather than content, which makes it cheap and is the right way to enumerate. And it is paged: a container with many versions returns a <code>nextPageToken<\/code>, and a script that ignores it silently works with the most recent page only.<\/p>\n<p>The second call is the expensive one, because it returns the entire container. That is the reason the next section exists: fetching forty full versions to compare one tag is a lot of data for one question.<\/p>\n<h2>The Fingerprint That Marks a Change<\/h2>\n<p>Every element in a container carries a <code>fingerprint<\/code>, and it changes whenever that element is modified. Comparing the fingerprint of one tag across versions therefore answers the question without comparing anything else.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>import json, glob\n\nGESUCHT = \"25\"   # tagId: GA4 - Event - purchase\n\nvorher = None\nfor datei in sorted(glob.glob(\"version-*.json\"),\n                    key=lambda d: int(d.split(\"-\")[1].split(\".\")[0])):\n    daten = json.load(open(datei))\n    tags  = {t[\"tagId\"]: t for t in daten.get(\"tag\", [])}\n    tag   = tags.get(GESUCHT)\n\n    if tag is None:\n        print(f\"{datei:16s} nicht vorhanden\")\n    else:\n        marke = tag[\"fingerprint\"]\n        hinweis = \"GEAENDERT\" if vorher and marke != vorher else \"\"\n        print(f\"{datei:16s} {marke}  {hinweis}\")\n        vorher = marke<\/code><\/pre>\n<p>The output is one line per version, and the interesting ones announce themselves. A tag that was untouched for thirty versions and then changed once produces exactly one marked row, and that row is the answer.<\/p>\n<p>Two properties of the fingerprint deserve a note. It is opaque &#8211; it says that something changed, not what &#8211; and that is enough for this step. And it changes for any modification including a rename, so a tag that was renamed shows as changed without behaving differently. Matching by <code>tagId<\/code> rather than by name does not change that, but it does survive the rename that made the element hard to find in the first place.<\/p>\n<h2>Finding the Version, Then Comparing Two<\/h2>\n<p>With the version identified, the comparison is between two files rather than forty, and it is worth doing on a normalised copy rather than on the raw export.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code># nur das gesuchte Tag aus beiden Versionen, sortiert\nfor v in 43 44; do\n  jq -S --arg n \"GA4 - Event - purchase\" \\\n    '.tag[] | select(.name == $n)' version-$v.json &gt; tag-$v.json\ndone\n\ndiff -u tag-43.json tag-44.json<\/code><\/pre>\n<p>The <code>-S<\/code> is what makes the result readable. Without it, JSON keys come back in whatever order the API produced, and a diff of two semantically identical objects can be dozens of lines long. Sorting the keys removes that entirely, and what remains is the actual change.<\/p>\n<p>Three fields are worth ignoring in the comparison because they change on their own: <code>fingerprint<\/code>, which is the thing being used to find the version rather than to describe it, and any timestamp or path field that carries the version number. Everything else that differs is a real difference.<\/p>\n<h2>Quota, and the Local Copy<\/h2>\n<p>The Tag Manager API is rate limited per minute and per day, and a loop over forty full versions runs into that quickly. The failure is a 429 response, and a script without a delay turns one investigation into a blocked API for the rest of the hour.<\/p>\n<pre class=\"wp-block-kevinbatdorf-code-block-pro\"><code>for v in $(cat versionen.txt); do\n  [ -f \"version-$v.json\" ] &amp;&amp; continue          # schon vorhanden\n  curl -s -H \"Authorization: Bearer $TOKEN\" \\\n    \"$BASIS\/$PFAD\/versions\/$v\" &gt; \"version-$v.json\"\n  sleep 2\ndone<\/code><\/pre>\n<p>The skip on an existing file is the important line. Versions are immutable, so a version fetched once never needs fetching again &#8211; and a directory of them becomes an archive that answers the next question without touching the API at all.<\/p>\n<p>That archive is worth creating deliberately rather than as a side effect. A weekly job that fetches the newest versions costs nothing, and it means the history is available even for a container that somebody later loses access to.<\/p>\n<h2>The Question the API Cannot Answer<\/h2>\n<p>Three things stay outside, and knowing which they are prevents a long search for something that is not there.<\/p>\n<p>The first is who changed a specific element. A version records who published it, and a publication can contain the work of several people over several weeks. The API has no per-element authorship, and the interface does not either.<\/p>\n<p>The second is anything that never became a version. A change made in a workspace and reverted before publication leaves no trace, and so does a workspace that was deleted. The history is a history of publications, not of edits.<\/p>\n<p>The third is the effect. Two versions can differ in a trigger condition that fires ten per cent more often, and nothing in the container says so &#8211; the difference is a line of configuration, and its consequence is in the data. Which is why this whole procedure is the first half of an investigation: it produces the moment and the change, and the second half is checking whether the numbers moved at that moment too.<\/p>\n<div class=\"lw-faq\">\n<h2>Questions and answers<\/h2>\n<h3>Does the fingerprint comparison also catch a change to a trigger or variable the tag uses?<\/h3>\n<p>No, and that is the most important gap in this procedure. A tag&#8217;s fingerprint changes only when the tag itself is modified. The tag refers to its triggers by their IDs and to variables by their names in double curly braces. If somebody changes a trigger&#8217;s condition or a variable&#8217;s value, the tag stays identical character for character, and so does its fingerprint, even though it now behaves differently.<\/p>\n<p>The loop from the article can therefore be extended to the dependencies: the IDs in firingTriggerId and blockingTriggerId are read from the tag and the names of all {{\u2026}} references are collected; then the fingerprints of those triggers in <code>daten[\"trigger\"]<\/code> and those variables in <code>daten[\"variable\"]<\/code> are compared across the versions in the same way as the tag&#8217;s.<\/p>\n<p>Even that is not quite enough, because variables can refer to other variables. The thorough route is to follow the references until no new ones appear; the simpler one is to compare the fingerprints of every element in the container straight away while searching for the version.<\/p>\n<h3>What happens when a request in the loop fails with a 429?<\/h3>\n<p>A file is created anyway. Without further options, curl -s also writes an error response to the output, so version-44.json then holds the API&#8217;s JSON error message instead of a container. On the next run the file counts as present and is skipped, so exactly the line that makes the archive valuable preserves the error.<\/p>\n<p>The analysis script does not flag this; it misleads instead: <code>daten.get(\"tag\", [])<\/code> returns an empty list for the error message, and the version shows up as \u201cnicht vorhanden\u201d, as if the tag had been deleted in it.<\/p>\n<p>Adding -f is not enough on its own, because the redirection with &gt; creates the file before curl answers; an empty file would then be left behind and skipped just the same. The safe route is a temporary file that is only renamed once curl has succeeded and <code>jq -e .containerVersionId<\/code> finds a value.<\/p>\n<h3>Is the version in which the tag changed also the one that was live on the day in question?<\/h3>\n<p>Not necessarily. Every publication creates a version, but not every version gets published: a version can also be created without going live, and an older version can be published again later, for example to roll back a change. The version number therefore reflects the order of creation, not the order of publication.<\/p>\n<p>What counts for the comparison with the report is when each version went live. If the comparison finds the change in version 44, the questions are whether and when version 44 was published, and whether an older version applied again afterwards.<\/p>\n<h3>What permissions does the weekly archive job need?<\/h3>\n<p>Read access is enough, as the article states, with the scope tagmanager.readonly. If the job runs under a service account, that account&#8217;s email address has to be added in Tag Manager as a user with read permission on the account or the container; the scope alone grants no access. With read permission only, the job cannot publish anything, and a leaked key then exposes the container&#8217;s content without being able to change it.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/developers.google.com\/tag-platform\/tag-manager\/web\" target=\"_blank\" rel=\"noopener noreferrer\">Tag Manager for web<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The version list says who published and when, and nothing about what moved inside. One fingerprint per element, pulled across every version, turns a question about forty versions into a table with one changed row.<\/p>\n","protected":false},"author":1,"featured_media":13267,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[113],"tags":[91144,91267,91219],"class_list":["post-13172","post","type-post","status-publish","format-standard","hentry","category-tutorials","tag-devops","tag-google-tag-manager","tag-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Finding the Container Version in Which a Tag Changed | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Reading the version list through the Tag Manager API, using the fingerprint to find the version in which one tag changed, and the quota that limits it.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Finding the Container Version in Which a Tag Changed | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Reading the version list through the Tag Manager API, using the fingerprint to find the version in which one tag changed, and the quota that limits it.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-28T05:35:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13172-tutorial-finding-the-container-version-i.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Finding the Container Version in Which a Tag Changed\",\"datePublished\":\"2026-09-28T05:35:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/\"},\"wordCount\":1523,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13172-tutorial-finding-the-container-version-i.png\",\"keywords\":[\"DevOps\",\"Google Tag Manager\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/\",\"name\":\"Tutorial: Finding the Container Version in Which a Tag Changed | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13172-tutorial-finding-the-container-version-i.png\",\"datePublished\":\"2026-09-28T05:35:00+00:00\",\"description\":\"Reading the version list through the Tag Manager API, using the fingerprint to find the version in which one tag changed, and the quota that limits it.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13172-tutorial-finding-the-container-version-i.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/hero-13172-tutorial-finding-the-container-version-i.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Finding the Container Version in Which a Tag Changed\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/digital-analytics\\\/tutorials\\\/tutorial-finding-the-container-version-in-which-a-tag-changed\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Finding the Container Version in Which a Tag Changed\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tutorial: Finding the Container Version in Which a Tag Changed | Lukas Wojcik","description":"Reading the version list through the Tag Manager API, using the fingerprint to find the version in which one tag changed, and the quota that limits it.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Finding the Container Version in Which a Tag Changed | Lukas Wojcik","og_description":"Reading the version list through the Tag Manager API, using the fingerprint to find the version in which one tag changed, and the quota that limits it.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-28T05:35:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13172-tutorial-finding-the-container-version-i.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Finding the Container Version in Which a Tag Changed","datePublished":"2026-09-28T05:35:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/"},"wordCount":1523,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13172-tutorial-finding-the-container-version-i.png","keywords":["DevOps","Google Tag Manager","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/","name":"Tutorial: Finding the Container Version in Which a Tag Changed | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13172-tutorial-finding-the-container-version-i.png","datePublished":"2026-09-28T05:35:00+00:00","description":"Reading the version list through the Tag Manager API, using the fingerprint to find the version in which one tag changed, and the quota that limits it.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13172-tutorial-finding-the-container-version-i.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/hero-13172-tutorial-finding-the-container-version-i.png","width":1200,"height":630,"caption":"Tutorial: Finding the Container Version in Which a Tag Changed"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/digital-analytics\/tutorials\/tutorial-finding-the-container-version-in-which-a-tag-changed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Finding the Container Version in Which a Tag Changed"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=13172"}],"version-history":[{"count":2,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13172\/revisions"}],"predecessor-version":[{"id":20762,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/13172\/revisions\/20762"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13267"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=13172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=13172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=13172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}