{"id":69969,"date":"2025-02-05T17:16:12","date_gmt":"2025-02-05T17:16:12","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/provision-server-side-tagging-application-manually\/"},"modified":"2025-02-05T17:16:12","modified_gmt":"2025-02-05T17:16:12","slug":"provision-server-side-tagging-application-manually","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=69969","title":{"rendered":"Provision Server-side Tagging Application Manually"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>The <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside#create_a_google_cloud_platform_gcp_server\">automatic provisioning process<\/a> of the <strong>Google Tag Manager server-side tagging service<\/strong> is extremely useful.<\/p>\n<p>With just a few clicks of the button, you can have a fully functional (albeit limited to testing use) server-side tagging endpoint on the Google Cloud Platform (GCP).<\/p>\n<blockquote>\n<p>For a video overview of the automatic deployment, see <a href=\"https:\/\/www.youtube.com\/watch?v=6OGbOh216mU\">this video<\/a>.<\/p>\n<\/blockquote>\n<p>However, the automatic provisioning process creates <strong>a new Google Cloud Platform project<\/strong> and, at the time of writing, always deploys the App Engine application (on which the tagging server runs) in the <code>us-central-1<\/code> GCP region.<\/p>\n<p>The latter can prove especially problematic in case you have a lot of traffic from non-US locations, as the longer the route for the network traffic, the more you\u2019ll have to pay for it. Once the region is set for an App Engine application <strong>it cannot be changed<\/strong>.<\/p>\n<div style=\"aspect-ratio: 930 \/ 410;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-app-engine-region.jpg\" title=\"Manually provision app engine application\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"410\" width=\"930\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-app-engine-region.jpg#ZgotmplZ\" alt=\"Manually provision app engine application\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>In this article, I\u2019ll show you how you can <strong>manually create the tagging server<\/strong> either in an existing GCP project or a completely new project that you\u2019ve created.<\/p>\n<p>Among other things, this way you\u2019ll get to <strong>choose the geographical region for the tagging server<\/strong> during the provisioning process, as long as the project doesn\u2019t have a previously deployed App Engine application.<\/p>\n<p>It\u2019s basically the same process you\u2019ll follow when <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\/script-user-guide\">upgrading the server to a production deployment<\/a>, with the difference that you\u2019ll need to do a little bit more manual work to get things up and running.<\/p>\n<p>                <span class=\"simmer\"><br \/>\n  <span class=\"close\">X<\/span><\/p>\n<p>\n    <span class=\"fa fa-md fa-bell\"\/><br \/>\n    <strong>The Simmer Newsletter<\/strong>\n  <\/p>\n<p>\n    Subscribe to the <a href=\"https:\/\/www.simoahava.com\/newsletter\/\">Simmer newsletter<\/a> to get the latest news and content from Simo Ahava into your email inbox!\n  <\/p>\n<p>  <\/span><\/p>\n<h2 id=\"add-the-application-to-a-gcp-project\">Add the application to a GCP project<\/h2>\n<p>As you are building the application manually, you either <a href=\"https:\/\/console.cloud.google.com\/cloud-resource-manager\">already have a Google Cloud Platform project<\/a> to which you want to add the Server container application, or you want to <a href=\"https:\/\/console.cloud.google.com\/projectcreate\">create a completely new project<\/a> for this application.<\/p>\n<p>Whichever route you want to take, you need to do <strong>two things<\/strong>.<\/p>\n<p>First, visit the <strong>Cloud Build API<\/strong> page by following <a href=\"https:\/\/console.cloud.google.com\/apis\/api\/cloudbuild.googleapis.com\/overview\">this link<\/a>. Then, make sure you are in the correct project, and finally choose <strong>Enable<\/strong> to enable the API.<\/p>\n<div style=\"aspect-ratio: 1064 \/ 420;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/link-billing-account.jpg\" title=\"Link billing account\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"420\" width=\"1064\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/link-billing-account.jpg#ZgotmplZ\" alt=\"Link billing account\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Second, you need to link the project to a <strong>Billing Account<\/strong> by following <a href=\"https:\/\/console.cloud.google.com\/billing\/linkedaccount\">this link<\/a>. You need to enable billing for the project in order to run the provisioning setup.<\/p>\n<h3 id=\"open-the-project-in-google-cloud-console\">Open the project in Google Cloud Console<\/h3>\n<p>Double-check that you are in the correct project in the Google Cloud Console.<\/p>\n<div style=\"aspect-ratio: 1922 \/ 598;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/select-project.jpg\" title=\"Select project\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"598\" width=\"1922\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/select-project.jpg#ZgotmplZ\" alt=\"Select project\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Find the project in the <a href=\"https:\/\/console.cloud.google.com\/cloud-resource-manager\">Cloud Resource Manager<\/a> and click to open it.<\/p>\n<h3 id=\"check-for-a-previous-app-engine-application\">Check for a previous App Engine application<\/h3>\n<p>Before going any further, visit the <a href=\"https:\/\/console.cloud.google.com\/appengine\">App Engine dashboard<\/a> of the project. If you see a proper dashboard with data from an existing application, <strong>be warned<\/strong>.<\/p>\n<div style=\"aspect-ratio: 1708 \/ 1272;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/ae-dashboard.jpg\" title=\"App Engine dashboard\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1272\" width=\"1708\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/ae-dashboard.jpg#ZgotmplZ\" alt=\"App Engine dashboard\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p><strong>If you try to add the GTM Server application to a project with an existing App Engine app, the GTM Server will completely overwrite any previously installed service.<\/strong><\/p>\n<p>Make sure you communicate with the application owner that this is about to happen.<\/p>\n<h3 id=\"run-the-upgrade-script\">Run the upgrade script<\/h3>\n<p>Once you\u2019ve checked and double-checked that the App Engine application can be installed in the project, you can go ahead and run the script that handles the provisioning process for you.<\/p>\n<p>The following chapters outline the steps you need to take.<\/p>\n<h4 id=\"open-cloud-shell\">Open Cloud Shell<\/h4>\n<p>In the Google Cloud console for the project you want to create the application in, fire up an instance of <strong>Cloud Shell<\/strong> by clicking the dedicated icon in the top bar.<\/p>\n<div style=\"aspect-ratio: 1100 \/ 292;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-cloud-shell.jpg\" title=\"Cloud Shell\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"292\" width=\"1100\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-cloud-shell.jpg#ZgotmplZ\" alt=\"Cloud Shell\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Cloud Shell is a command-line shell prompt where you can run commands and execute scripts <strong>with all the Google Cloud API components<\/strong> pre-installed. So you don\u2019t have to worry about installing dependencies such as the <code>gcloud<\/code> tool, as they are all preconfigured for you.<\/p>\n<p>You <em>can<\/em> do most of this stuff outside the Cloud Shell (e.g. in a local shell prompt or in the Google Cloud console), but running the upgrade script in the Cloud Shell means you don\u2019t have to worry about <em>any<\/em> of the overhead of setting up the necessary tools and dependencies.<\/p>\n<div style=\"aspect-ratio: 1382 \/ 448;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-authorize-cloud-shell.jpg\" title=\"Authorize Cloud Shell\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"448\" width=\"1382\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-authorize-cloud-shell.jpg#ZgotmplZ\" alt=\"Authorize Cloud Shell\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>If you see a prompt such as the one above, make sure you click <strong>Authorize<\/strong> to give Cloud Shell all the necessary access to your Google Cloud project.<\/p>\n<h4 id=\"run-the-script\">Run the script<\/h4>\n<p>After the shell instance has finished loading, you should find yourself in a command-line interpreter within your GCP project.<\/p>\n<p>Now, copy the following <strong>shell command<\/strong>, paste it into the Cloud Shell command-line, and press enter:<\/p>\n<p><code>bash -c \"$(curl -fsSL https:\/\/googletagmanager.com\/static\/serverjs\/setup.sh)\"<\/code><\/p>\n<blockquote>\n<p>Double-check the <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\/script-user-guide#configure_the_tagging_server_url\">official documentation<\/a> to make sure you are running the most recent version of the shell command. I will, of course, make sure this guide is as up-to-date as possible.<\/p>\n<\/blockquote>\n<div style=\"aspect-ratio: 2218 \/ 342;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-upgrade-script.jpg\" title=\"Manual upgrade script\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"342\" width=\"2218\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-upgrade-script.jpg#ZgotmplZ\" alt=\"Manual upgrade script\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>This script has been created by Google, and it contains all the necessary Google Cloud API commands to create the App Engine application in your project.<\/p>\n<p>If the project already had an App Engine application, and that application was not a previous GTM server, you\u2019ll see the following warning:<\/p>\n<div style=\"aspect-ratio: 1864 \/ 314;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/existing-application.jpg\" title=\"Existing application\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"314\" width=\"1864\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/existing-application.jpg#ZgotmplZ\" alt=\"Existing application\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Remember that by pressing <code>y<\/code>, the previous application will be removed and replaced with the GTM server. <strong>Only proceed if you have permission to do this!<\/strong><\/p>\n<h4 id=\"copy-the-container-config-string\">Copy the Container Config string<\/h4>\n<p>The very first setting you need to respond to is the <strong>Container Config<\/strong>. This is what links the Google Cloud project (your GTM server endpoint) with your Google Tag Manager container.<\/p>\n<p>With this configuration, you can control how the GTM server works through the familiar Google Tag Manager user interface.<\/p>\n<p>To find the <strong>Container Config<\/strong>, go to the Google Tag Manager container for which you are creating the GTM server, and click the container ID in the header.<\/p>\n<div style=\"aspect-ratio: 1244 \/ 240;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/container-id-header.jpg\" title=\"Container ID header\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"240\" width=\"1244\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/container-id-header.jpg#ZgotmplZ\" alt=\"Container ID header\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Alternatively, if you are just in the process of <strong>creating a new container<\/strong>, once you get to the <strong>Install Google Tag Manager<\/strong> overlay, do <em>not<\/em> click <code>Automatically provision tagging server<\/code>. Instead, click <code>Manually provision tagging server<\/code>.<\/p>\n<p>Regardless of which way you go about it, you should see an overlay appear where a <strong>Container Configuration<\/strong> (or <strong>Container Config<\/strong>) is displayed. It\u2019s a nonsensical string of alphanumeric characters.<\/p>\n<div style=\"aspect-ratio: 1414 \/ 790;\" class=\"figure \">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-container-configuration.jpg\" title=\"The Container Config parameter in the overlay you see when creating a new container\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"790\" width=\"1414\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-container-configuration.jpg#ZgotmplZ\" alt=\"The Container Config parameter in the overlay you see when creating a new container\"\/><\/p>\n<p>    <\/a><\/p>\n<p>    <span class=\"caption\">The Container Config parameter in the overlay you see when creating a new container<\/span><\/p>\n<\/div>\n<p><strong>Copy<\/strong> that to the clipboard, and <strong>paste<\/strong> it into the Cloud Shell where you are asked for the Container Config.<\/p>\n<h4 id=\"configure-the-rest-of-the-upgrade-script\">Configure the rest of the upgrade script<\/h4>\n<p>Provide the rest of the configurations for the upgrade script:<\/p>\n<table>\n<thead>\n<tr>\n<th>Configuration<\/th>\n<th>Description<\/th>\n<th>Note<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Policy Script URL<\/td>\n<td>Provide a URL to a <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\/configure-a-policy\">policy script<\/a> if you wish.<\/td>\n<td>Optional.<\/td>\n<\/tr>\n<tr>\n<td>Request Logging<\/td>\n<td>Whether App Engine will log all incoming HTTP requests to the GTM server.<\/td>\n<td>If you find logging costs accumulating, you can <a href=\"https:\/\/www.simoahava.com\/analytics\/tips-for-logging-server-side-tagging\/\">optimize logging<\/a>.<\/td>\n<\/tr>\n<tr>\n<td>Deployment Type<\/td>\n<td><code>testing<\/code> fires up a single App Engine Standard instance. <code>production<\/code> spins up additional App Engine Flexible instances.<\/td>\n<td>Don\u2019t use <code>testing<\/code> if you want to handle production traffic.<\/td>\n<\/tr>\n<tr>\n<td>Autoscaling<\/td>\n<td>Whether the system should automatically scale up instances to accommodate for traffic spikes.<\/td>\n<td>Only for <code>production<\/code> deployments.<\/td>\n<\/tr>\n<tr>\n<td>Minimum Number of Servers<\/td>\n<td>What the minimum number of App Engine Flexible instances is at any given time.<\/td>\n<td>Only for <code>production<\/code> deployments.<\/td>\n<\/tr>\n<tr>\n<td>Maximum Number of Servers<\/td>\n<td>What the maximum number of App Engine Flexible instances is that the system can auto-scale to.<\/td>\n<td>Only for <code>production<\/code> deployments.<\/td>\n<\/tr>\n<tr>\n<td>CPU Target Utilization<\/td>\n<td>What the threshold for CPU Utilization is (between 0.0 and 1.0) before a new App Engine instance is scaled up to.<\/td>\n<td>Only for <code>production<\/code> deployments.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Here is an example of what the configuration might look like:<\/p>\n<div style=\"aspect-ratio: 2170 \/ 936;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-configuration-done.jpg\" title=\"Manual configuration done\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"936\" width=\"2170\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-configuration-done.jpg#ZgotmplZ\" alt=\"Manual configuration done\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>If you are ready to continue, type <code>y<\/code> and press enter.<\/p>\n<h4 id=\"choose-the-app-engine-region\">Choose the App Engine region<\/h4>\n<blockquote>\n<p>If you are creating the application in a project that already has \/ had a previous App Engine application, <strong>it\u2019s not possible to change its region anymore<\/strong>. App Engine regions are set for good when first created. The only option currently is to create a new project from scratch.<\/p>\n<\/blockquote>\n<p>If this is a brand new App Engine application, you will get your pick of the geographical region for the application.<\/p>\n<p>There are many things to consider when doing this, but the most important question is <strong>from which region is the majority of requests originating from<\/strong>. For example, if the bulk of your traffic is from the US, you\u2019ll want to pick a US region. If the bulk is from Europe, you\u2019ll want to pick an EU region.<\/p>\n<p>If you are unsure, if it fluctuates, or if the distribution is fairly even, pick a region close to you.<\/p>\n<div style=\"aspect-ratio: 1432 \/ 882;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-choose-region.jpg\" title=\"Choose Region\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"882\" width=\"1432\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/03\/manual-choose-region.jpg#ZgotmplZ\" alt=\"Choose Region\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The region selection has an impact on <strong>network egress costs<\/strong>, as if the App Engine application needs to send an HTTP request across regions, it will cost more than if the request is sent within the current region.<\/p>\n<h3 id=\"test-the-endpoint\">Test the endpoint<\/h3>\n<p>Once the script has run (it will take a few minutes), you can <strong>test the endpoint<\/strong>.<\/p>\n<p>By configuring the <strong>Container Config<\/strong> in the upgrade script, your App Engine application should be serving requests to your Server container.<\/p>\n<p>Of course, if you haven\u2019t created any <a href=\"https:\/\/www.simoahava.com\/analytics\/server-side-tagging-google-tag-manager\/#clients-and-tags\">Clients or tags<\/a>, the endpoint won\u2019t actually <em>do<\/em> anything.<\/p>\n<p>An easy way to test that your endpoint has been configured against the GTM server correctly is to do the following:<\/p>\n<ol>\n<li>While still in <strong>Cloud Shell<\/strong>, type <code>gcloud app browse<\/code> and press enter. This will provide you with the custom URL set for your endpoint as a link.<\/li>\n<li>Click the link to open your endpoint URL in a new tab \u2013\u00a0you should see an <strong>HTTP ERROR 400<\/strong> page.<\/li>\n<li>Add the path <code>\/healthy<\/code> to the URL \u2013\u00a0you should see a page with the message <code>ok<\/code>.<\/li>\n<\/ol>\n<div style=\"aspect-ratio: 1012 \/ 278;\" class=\"figure \">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/gcloud-app-browse.jpg\" title=\"1. Run the &quot;gcloud app browse&quot; command\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"278\" width=\"1012\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/gcloud-app-browse.jpg#ZgotmplZ\" alt=\"1. Run the &quot;gcloud app browse&quot; command\"\/><\/p>\n<p>    <\/a><\/p>\n<p>    <span class=\"caption\">1. Run the &#8220;gcloud app browse&#8221; command<\/span><\/p>\n<\/div>\n<div style=\"aspect-ratio: 1342 \/ 694;\" class=\"figure \">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/http-error-400.jpg\" title=\"2. See the HTTP ERROR 400 page\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"694\" width=\"1342\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/http-error-400.jpg#ZgotmplZ\" alt=\"2. See the HTTP ERROR 400 page\"\/><\/p>\n<p>    <\/a><\/p>\n<p>    <span class=\"caption\">2. See the HTTP ERROR 400 page<\/span><\/p>\n<\/div>\n<div style=\"aspect-ratio: 1130 \/ 374;\" class=\"figure \">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/healthy-ok.jpg\" title=\"3. Visit the \/healthy endpoint and see the &quot;ok&quot; message\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"374\" width=\"1130\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/healthy-ok.jpg#ZgotmplZ\" alt=\"3. Visit the \/healthy endpoint and see the &quot;ok&quot; message\"\/><\/p>\n<p>    <\/a><\/p>\n<p>    <span class=\"caption\">3. Visit the \/healthy endpoint and see the &#8220;ok&#8221; message<\/span><\/p>\n<\/div>\n<p>The <code>HTTP ERROR 400<\/code> just means that there was no Client to claim the request. The <code>\/healthy<\/code> endpoint is built into the GTM Server application and is used to verify that the GTM Server works as it should.<\/p>\n<h2 id=\"reconfigure-the-google-tag-manager-container\">Reconfigure the Google Tag Manager container<\/h2>\n<p>Finally, you need to tell the Google Tag Manager container what the new URL for the endpoint is.<\/p>\n<p>For testing, you can continue to use the <code>appspot.com<\/code> URL. However, you should configure the endpoint with a custom domain as soon as possible (see <a href=\"https:\/\/www.simoahava.com\/analytics\/server-side-tagging-google-tag-manager\/#full-control-and-ownership-of-the-data-collected-by-the-container\">this chapter<\/a> for some reasons).<\/p>\n<p>To configure the GTM container to always open Preview mode with your new App Engine application URL, go to <strong>Admin<\/strong> in the GTM UI and choose <strong>Container Settings<\/strong>. Here, type the <code>appspot.com<\/code> (or your custom domain) URL into the respective field:<\/p>\n<div style=\"aspect-ratio: 1224 \/ 622;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2021\/04\/tagging-server-url.jpg\" title=\"Tagging Server URL\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"622\" width=\"1224\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2021\/04\/tagging-server-url.jpg#ZgotmplZ\" alt=\"Tagging Server URL\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<blockquote>\n<p>Remember that you can actually configure more than one URL for the endpoint \u2013 see <a href=\"https:\/\/www.simoahava.com\/gtm-tips\/map-multiple-domains-server-side-tagging-endpoint\/\">this article<\/a> for more information.<\/p>\n<\/blockquote>\n<h2 id=\"summary\">Summary<\/h2>\n<p>In this article, we\u2019ve walked through the steps it takes to manually set up an App Engine Application for the Google Tag Manager server.<\/p>\n<p>In most cases, the <em>automatic provisioning process<\/em> is more than enough to get things started. However, if you want to set the App Engine region to something other than <code>us-central-1<\/code>, you <strong>must<\/strong> run the manual upgrade setup.<\/p>\n<p>Similarly, if you want to install the application to a pre-existing GCP project, you <strong>must<\/strong> run the manual upgrade setup.<\/p>\n<p>Hopefully, the automatic provisioning process will be improved in the future to allow for project and region selection as well.<\/p>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>The automatic provisioning process of the Google Tag Manager server-side tagging service is extremely useful. With just a few clicks of the button, you can have a fully functional (albeit limited to testing use) server-side tagging endpoint on the Google Cloud Platform (GCP). For a video overview of the automatic deployment, see this video. However, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":69970,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[14235,36574,21415,18475,29117],"dealstore":[],"offerexpiration":[],"class_list":["post-69969","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-application","tag-manually","tag-provision","tag-serverside","tag-tagging"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Provision Server-side Tagging Application Manually - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=69969\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Provision Server-side Tagging Application Manually - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"The automatic provisioning process of the Google Tag Manager server-side tagging service is extremely useful. With just a few clicks of the button, you can have a fully functional (albeit limited to testing use) server-side tagging endpoint on the Google Cloud Platform (GCP). For a video overview of the automatic deployment, see this video. However, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=69969\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-05T17:16:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1441\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\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:\/\/fivemor.com\/?p=69969#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=69969\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Provision Server-side Tagging Application Manually\",\"datePublished\":\"2025-02-05T17:16:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=69969\"},\"wordCount\":1807,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=69969#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg\",\"keywords\":[\"application\",\"manually\",\"Provision\",\"Serverside\",\"Tagging\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=69969#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=69969\",\"url\":\"https:\/\/fivemor.com\/?p=69969\",\"name\":\"Provision Server-side Tagging Application Manually - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=69969#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=69969#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg\",\"datePublished\":\"2025-02-05T17:16:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=69969#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=69969\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=69969#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg\",\"width\":2560,\"height\":1441},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=69969#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Provision Server-side Tagging Application Manually\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Provision Server-side Tagging Application Manually - Som2ny Network","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:\/\/fivemor.com\/?p=69969","og_locale":"en_US","og_type":"article","og_title":"Provision Server-side Tagging Application Manually - Som2ny Network","og_description":"The automatic provisioning process of the Google Tag Manager server-side tagging service is extremely useful. With just a few clicks of the button, you can have a fully functional (albeit limited to testing use) server-side tagging endpoint on the Google Cloud Platform (GCP). For a video overview of the automatic deployment, see this video. However, [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=69969","og_site_name":"Som2ny Network","article_published_time":"2025-02-05T17:16:12+00:00","og_image":[{"width":2560,"height":1441,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=69969#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=69969"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Provision Server-side Tagging Application Manually","datePublished":"2025-02-05T17:16:12+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=69969"},"wordCount":1807,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=69969#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg","keywords":["application","manually","Provision","Serverside","Tagging"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=69969#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=69969","url":"https:\/\/fivemor.com\/?p=69969","name":"Provision Server-side Tagging Application Manually - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=69969#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=69969#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg","datePublished":"2025-02-05T17:16:12+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=69969#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=69969"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=69969#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/provision-server-side-tagging-application-manually-scaled.jpg","width":2560,"height":1441},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=69969#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Provision Server-side Tagging Application Manually"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/69969","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=69969"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/69969\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/69970"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=69969"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=69969"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=69969"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=69969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}