By Unwired Logic - a Storeganise marketplace add-on for Google Ads and Meta conversion tracking
Works with: Storeganise booking engine, marketing website, Google Ads, Meta Ads
About This Application
Google + Meta Ads Conversion Tracking is a Storeganise marketplace add-on for self-storage operators. Its purpose is to measure how well an operator's advertising performs: when someone clicks a Google Ads or Meta ad, lands on the operator's Storeganise booking website, and goes on to reserve or move into a storage unit, this Add-on reports that booking back to Google Ads and Meta as a conversion. This lets the ad platforms optimise the operator's campaigns toward real bookings and move-ins rather than just clicks.
To do this for Google, the operator connects the Add-on to their own Google Ads account with a Google service account - a machine credential the operator creates once in Google Cloud and adds as a user on their Google Ads account. With that access, the Add-on uploads offline click conversions to the account through Google's Data Manager API. The Add-on is installed and operated by the storage business; it uses that access solely to upload these conversions - never to read campaigns or change settings. See What the Add-on Does below for detail, and the FAQs for what data is sent and how it is protected.
Contents
How It Works with Storeganise
Small self-storage operators run Google and Meta ads and take bookings on their Storeganise site - but the ad platforms only ever see the click. They never find out which clicks turned into a real customer. So the algorithm keeps optimising for cheap inquiries, not signed leases.
Google + Meta Ads Conversion Tracking follows the whole booking journey - from the ad click, through the website and booking flow, to the reservation and move-in - and sends those real outcomes back to Google and Meta. Storeganise stays the single source of truth throughout; there is no separate CRM to buy, configure, or maintain.
In short: it connects your ad spend to the real money, using the system you already run.
The Data Loop from Your PMS
Each stage of the Storeganise booking journey maps to a signal the ad platforms understand. This is the starting model - it can be customised per operator:
| Storeganise data | What it means | Sent back to ads as |
| Lead | Someone started a booking but didn't finish - our earliest real-intent signal | Lead |
| Move-in created | A unit gets reserved (the native Storeganise status, kept as-is) and value of booking | Reservation & Basket Size |
| Move-in started | The lease starts and value of the unit booked | Sale & Basket Size |
| Move-in completed | When customer moved in | Customer moved in & Basket Size |
These outcomes carry the value back to Google and Meta, so the platforms can optimise spend toward the audiences that book and move in - not just the ones that click.
What the Add-on Does
- Recognises a visitor from their first ad click and remembers them through the whole journey.
- Knows when someone moves from one stage to the next - visit, booking, reservation, move-in.
- Picks up the outcome from Storeganise - the reservation, the move-in, and the unit's size and value.
- Sends each outcome back to Google and Meta, tagged so the ads learn which clicks become real customers.
- Lets you set and adjust the attribution model per account - mapping the Lead and move-in stages to your own Google Ads and Meta actions.
What Sets It Apart
- PMS-native, not CRM-dependent - works directly off Storeganise booking data, with nothing extra to buy.
- Closed loop, not one-way - real outcomes (move-ins, unit value) flow back to the ad platforms, not just leads flowing in.
- Optimises for move-ins, not clicks - your ad budget chases signed leases and bigger units, not cheap inquiries.
- Fully managed - Unwired Logic handles setup, monitoring, and maintenance, so your team never babysits a broken pixel.
Instructions
Setup takes about an hour and runs entirely inside Storeganise admin plus your Google Ads and Meta accounts. You can enable Google, Meta, or both - any field you leave blank is simply skipped.
1. Install the Add-on
Install Google + Meta Ads Conversion Tracking from the Storeganise marketplace. Once installed, its settings appear under the Add-on's configuration in Storeganise admin.
2. Set Up Ad-Attribution Capture on Your Booking Site
The Add-on needs to know which ad each customer came from. Google Tag Manager (GTM) reads the ad parameters (utm_*, gclid, gbraid, wbraid, fbclid) from the landing URL and passes them to Storeganise.
- Storeganise-hosted booking site: follow the GTM Setup section below to install three small GTM tags (attribution cookie, waitlist capture, booking capture). Takes about 30 minutes.
- Your own booking site: contact support@unwiredlogic.com and we'll help wire up the capture.
3. Set Your Currency
Set Ads Currency Code (ISO 4217) to the currency your prices are in, e.g. HKD, USD, JPY. This is used whenever an action sends the booking value back to the ad platform.
4. Connect Google Ads
In the Add-on settings, fill in your Google Ads credentials (see Google Ads Setup Prerequisites for how to create the service account and add it to your account):
- Google Ads Customer ID - the account that runs your ads. You can paste it in the XXX-XXX-XXXX form shown in Google Ads; the Add-on strips the dashes and spaces for you.
- Google Ads Service Account JSON - paste the entire service-account key file (JSON) that Google Cloud downloads when you create the key. It is stored encrypted (AWS KMS).
- Consent - Ad User Data and Consent - Ad Personalization - set each to Granted, Denied, or Unspecified to reflect the consent you hold from the customer. Anything left blank defaults to Denied, so set these to Granted only where you have a lawful basis to do so.
Then map each Storeganise event to a Google Ads conversion action ID (see Google Ads Setup Prerequisites for how to create these). Fill in only the events you want to track - any you leave blank are skipped, so the Add-on never uploads a Google conversion for that event:
- Lead - the waitlist signup / new-customer signal.
- MoveIn Created - a unit gets reserved.
- MoveIn Started - the lease starts.
- MoveIn Completed - the customer moves in (the typical sale conversion).
Each MoveIn event has an Include Value toggle. Set to Yes to send the rental's monthly price as the conversion value - typically Yes for MoveIn Completed.
5. Connect Meta Ads
In the Add-on settings, fill in your Meta credentials (see Meta Ads Setup Prerequisites for how to obtain the Pixel ID and access token):
- Meta Ads Pixel ID - your Pixel / Dataset ID (16-digit number) from Events Manager.
- Meta Ads Access Token - a long-lived Conversions API token from Events Manager > Settings > Conversions API.
- Meta Action Source - defaults to website; leave as-is unless your bookings come from another source.
- Meta Ads Test Event Code (optional) - set during testing so uploads show in Events Manager > Test Events. Leave blank in production.
Then map each Storeganise event to a Meta event name. Fill in only the stages you want to track - any you leave blank are skipped, so the Add-on never uploads a Meta event for that stage:
- Lead - Lead
- MoveIn Created - InitiateCheckout
- MoveIn Started - Schedule
- MoveIn Completed - Purchase
These are Meta standard event names, so they plug straight into Meta's ad optimisation and reporting. You can substitute other standard events or your own custom names, but standard events are recommended.
Each MoveIn event has an Include Value toggle to send the rental's monthly price as the conversion value.
6. Verify It's Working
- Run a test booking through one of your live ads (or a link with utm_* / click-id parameters).
- For Meta, set a Test Event Code first and watch the conversion appear in Events Manager > Test Events within a few minutes.
- For Google Ads, the conversion appears against your conversion action within a few hours.
- Every successful upload is recorded back on the Storeganise customer, so the same conversion never fires twice. If an upload fails permanently it surfaces as an admin task rather than being lost silently.
GTM Setup
This section gets ad-attribution capture working on a Storeganise-hosted booking site in about 30 minutes. It assumes you can edit your Google Tag Manager (GTM) container.
What You'll Set Up
Three GTM tags work together to feed ad-attribution data into the Add-on:
- Attribution cookie - reads UTMs (utm_source, utm_medium, etc.) and ad-platform click IDs (gclid, gbraid, wbraid, fbclid) from the landing URL and stores them in a first-party cookie on the customer's first visit.
- Waitlist capture - when the customer clicks 'Join waitlist', posts the cookie + email to the Add-on. The Add-on attaches that ad data to the new customer the moment Storeganise creates them.
- Booking capture - on successful unit booking, does the same thing. The Add-on then uses that ad data when uploading the conversion to Google or Meta.
GTM Prerequisites
- A GTM container created at tagmanager.google.com. You'll need the container ID (format: GTM-XXXXXXX).
- Paste that container ID into Storeganise admin: Settings > Developer > Customer Portal integrations > Google Tag Manager ID. Storeganise injects the GTM snippet for you - no need to add script tags manually.
- Allowlist https://services.unwiredlogic.app in the booking-site Content Security Policy. In Storeganise admin: Settings > Developer > Custom CSP, add the URL to the connect-src field.
⚠️ Consent and GDPR (do this first)
Required before you go live. The attribution tags collect advertising data, so under GDPR / ePrivacy they must not fire until the visitor consents. Set up the consent gating in this section first - skipping it means collecting ad data without consent, which is a compliance breach, not just a missing feature.
The tags below store advertising identifiers (gclid, gbraid, wbraid, fbclid) in a first-party cookie and later send them, with the customer's email, to Google and Meta for conversion matching. Under GDPR and the ePrivacy rules that is advertising data that needs the visitor's prior consent - being a first-party cookie does not exempt it.
As the operator you are the data controller: you are responsible for showing a cookie-consent banner - the "Accept / Decline cookies" popup, usually provided by a dedicated tool (a consent management platform, or CMP) such as Cookiebot or OneTrust - and for your legal basis. The Add-on's job is to honour whatever consent signal that banner sets. This is done with GTM's built-in Consent Mode and needs no changes to the tag scripts - only configuration.
1. Default everything to denied. So that nothing fires until the visitor accepts, add a Custom HTML tag on the Consent Initialization - All Pages trigger:
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied'
});
</script>
If you already use a cookie-consent banner tool that supports Google Consent Mode (Cookiebot, OneTrust, Usercentrics, etc.), it sets these defaults for you and flips them to granted only after the visitor accepts - in that case rely on it and skip this tag. What matters is that the banner actually sets the Consent Mode signals, not the brand; a banner that only hides itself without updating consent will leave the tags switched off.
2. Gate each Add-on tag on consent. On each of the three tags below, open Advanced Settings > Consent Settings > Require additional consent for tag to fire and add the listed consent type(s). GTM then blocks the whole tag - the cookie is never written and nothing is posted - unless consent is granted.
What this gives you:
- Visitor declines: the tags never fire, so nothing is stored in the cookie or sent to the Add-on or the ad platforms.
- No consent banner at all: with the default-denied state above (and because GTM treats an unset consent type as not granted), the tags are treated as declined and stay off. Attribution runs only once a visitor has actively accepted.
- No partial mode: everything the Add-on captures - the UTMs (utm_source, utm_medium, ...) as well as the click IDs - goes into one advertising cookie for the same advertising purpose. Declined ad consent blocks that cookie entirely, so nothing is saved, UTMs included. There is no reduced or "UTM-only" version, and none of it would be usable anyway: a conversion upload needs both a UTM source and a click ID.
Step 1 - Create the URL Query Variables
In GTM: Variables > User-Defined Variables > New, type URL, component type Query.
Create eleven variables (variable name > query key):
| Variable Name | Query Key |
| url.utm_source | utm_source |
| url.utm_medium | utm_medium |
| url.utm_campaign | utm_campaign |
| url.utm_term | utm_term |
| url.utm_content | utm_content |
| url.gclid | gclid |
| url.gbraid | gbraid |
| url.wbraid | wbraid |
| url.fbclid | fbclid |
| url.captured_at | captured_at |
| url.landing_url | landing_url |
Step 2 - Tag 1: Attribution Cookie
Tags > New > Custom HTML. Name it cHTML.sg_attribution_cookie. Paste:
<script>
(function () {
var COOKIE = 'sg_attribution';
if (document.cookie.split('; ').some(function (c) {
return c.indexOf(COOKIE + '=') === 0; })) return;
var fields = {
utm_source: {{url.utm_source}},
utm_medium: {{url.utm_medium}},
utm_campaign: {{url.utm_campaign}},
utm_term: {{url.utm_term}},
utm_content: {{url.utm_content}},
gclid: {{url.gclid}},
gbraid: {{url.gbraid}},
wbraid: {{url.wbraid}},
fbclid: {{url.fbclid}}
};
var hasAny = Object.keys(fields).some(function (k) { return !!fields[k]; });
if (!hasAny) return;
fields.captured_at = {{url.captured_at}} || new Date().toISOString();
fields.landing_url = {{url.landing_url}} || location.href;
document.cookie = COOKIE + '=' + encodeURIComponent(JSON.stringify(fields))
+ '; Path=/; Max-Age=' + (60 * 60 * 24 * 30) + '; SameSite=Lax';
})();
</script>
Trigger: built-in All Pages.
Consent Settings: require ad_storage (see Consent and GDPR).
Step 3 - Tag 2: Waitlist Capture
Triggers > New > Click - All Elements. Name it cl.join_waitlist.
- This trigger fires on: Some Clicks
- Condition: Click Element matches CSS selector #subscribe-form button[type="submit"], #subscribe-form button[type="submit"] *
- Condition: Page Path matches RegEx ^/sites/[^/?#]+/?$
Tags > New > Custom HTML. Name it cHTML.waitlist_capture. Paste:
<script>
(function () {
var COOKIE = 'sg_attribution';
var CAPTURE_URL = 'https://services.unwiredlogic.app/ads-conversions/storeganise/capture';
var host = (window.location.hostname || '').toLowerCase();
var parts = host.split('.');
var BUSINESS_CODE = (parts.length >= 3 && parts[1] === 'storeganise') ? parts[0] : '';
if (!BUSINESS_CODE) return;
var raw = document.cookie.split('; ').find(function (c) {
return c.indexOf(COOKIE + '=') === 0; });
if (!raw) return;
var adData;
try { adData = JSON.parse(decodeURIComponent(
raw.split('=').slice(1).join('='))); } catch (e) { return; }
var emailEl = document.querySelector('input[id="siteDetail.subscribe.email"]');
var email = emailEl ? (emailEl.value || '').trim() : '';
if (!email) return;
try {
fetch(CAPTURE_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ businessCode: BUSINESS_CODE, email: email, adData: adData }),
keepalive: true,
}).catch(function () {});
} catch (e) {}
})();
</script>
Trigger: cl.join_waitlist (the trigger you created above).
Consent Settings: require ad_storage and ad_user_data (see Consent and GDPR).
Step 4 - Tag 3: Booking Capture
Tags > New > Custom HTML. Name it cHTML.booking_capture. Paste:
<script>
(function () {
if (window.__sgBookingCaptureInstalled) return;
window.__sgBookingCaptureInstalled = true;
var COOKIE = 'sg_attribution';
var API = location.origin + '/api/v1';
var CAPTURE_URL = 'https://services.unwiredlogic.app/ads-conversions/storeganise/capture';
var host = (window.location.hostname || '').toLowerCase();
var parts = host.split('.');
var BUSINESS_CODE = (parts.length >= 3 && parts[1] === 'storeganise') ? parts[0] : '';
if (!BUSINESS_CODE) return;
function readCookie() {
var raw = document.cookie.split('; ').find(function (c) {
return c.indexOf(COOKIE + '=') === 0; });
if (!raw) return null;
try { return JSON.parse(decodeURIComponent(
raw.split('=').slice(1).join('='))); } catch (e) { return null; }
}
function runCapture() {
var adData = readCookie();
if (!adData) return;
fetch(API + '/user', { credentials: 'include' })
.then(function (r) { return r.ok ? r.json() : null; })
.then(function (user) {
var email = user && user.email ? String(user.email).trim() : '';
if (!email) return;
return fetch(CAPTURE_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
businessCode: BUSINESS_CODE, email: email, adData: adData }),
keepalive: true,
});
})
.catch(function () {});
}
var origFetch = window.fetch;
window.fetch = function (input, init) {
var url = (typeof input === 'string') ? input : (input && input.url) || '';
var method = (init && init.method) || (input && input.method) || 'GET';
var promise = origFetch.apply(this, arguments);
if (String(method).toUpperCase() === 'POST' &&
url.indexOf('/units/orders') !== -1) {
promise.then(function (res) {
if (res && res.ok) setTimeout(runCapture, 500); },
function () {});
}
return promise;
};
})();
</script>
Trigger: built-in All Pages (NOT a path-restricted Page View - the booking site is a SPA and route changes don't refire Page View).
Consent Settings: require ad_storage and ad_user_data (see Consent and GDPR).
Step 5 - Test and Publish
- Open your site with a tagged URL: https://<your-business>.storeganise.com/sites/<siteId>?utm_source=google&utm_medium=cpc&gclid=test-AbCdEfGh-12345678
- Devtools > Application > Cookies - confirm sg_attribution is set with the values you passed.
- Submit the waitlist form. Devtools > Network - confirm the POST /storeganise/capture returns 200.
- Complete a test unit booking. Confirm another POST /storeganise/capture returns 200.
- In GTM, Submit > Publish.
Google Ads Setup Prerequisites
Connecting Google Ads (step 4) needs two things prepared beforehand: a Google service account that is added as a user on your Google Ads account, and a conversion action for each Storeganise event you want to track. The Add-on uploads through Google's Data Manager API using the service account you create below.
1. Create a Google Cloud project and enable the Data Manager API
- Go to the Google Cloud Console and click Select a project > New Project. Give it a name that identifies both the owner and the purpose, so it's easy to recognise later - e.g. <your-company>-ads-conversions (lowercase, words separated by hyphens). Click Create.
- With the new project selected, open APIs & Services > Library, search for Data Manager API, open it, and click Enable.
2. Create a service account and download its key
- In the Cloud Console, open IAM & Admin > Service Accounts and click Create Service Account. Enter a name that identifies its purpose, so it's easy to recognise later - e.g. ads-conversion-uploader (lowercase, words separated by hyphens). Click Create and continue, then Done (no project roles are needed).
- Open the new service account, go to the Keys tab, and click Add Key > Create new key. Choose JSON and click Create - a JSON key file downloads. This is the file you paste into the Google Ads Service Account JSON field in step 4. Store it securely; treat it like a password.
3. Add the service account to your Google Ads account
The service account must be added as a user on the same Google Ads account you entered as the Customer ID.
- Copy the service account's email from the JSON file (the
client_emailvalue, formatxxx@xxx.iam.gserviceaccount.com). - In your Google Ads account, go to Admin > Access and security, click + to add a user, paste the service account email, and choose an access level that allows uploading conversions (Standard or Admin).
- Send the invitation. A service account is added without needing to accept an email, so access takes effect immediately.
4. Create Conversion Actions for Click Uploads
Create one conversion action for each Storeganise event you want to track - Lead, MoveIn Created, MoveIn Started, and MoveIn Completed. Repeat the steps below for each one, then map them in step 4.
- In your Google Ads account, go to Tools (or Goals) > Conversions.
-
Click New conversion action.
-
Choose Conversions offline. Click Edit data sources, select Connect data source later, then save and continue.
-
Set the category, name, and value settings as you like, then save. Google walks you through a few screens:
-
Open the new conversion action and copy the ctId value from the page URL - this is the conversion action ID you paste into the matching field in step 4.
Note - timing: Wait about 4-6 hours after creating an action before uploads attribute cleanly to it, and allow a further 24-48 hours for reporting to catch up. The action must be ENABLED.
Note - the type is permanent: A conversion action's type is fixed when it's created; Google has no "edit type" option. You can't convert an existing website-tag (WEBPAGE) action into an UPLOAD_CLICKS one - leave any website-tag action as-is for on-site tracking and create a new offline action using the steps above. You can still edit an action's name, category, value settings, and status later - just not its type.
5. Tag your ad campaigns with utm_source
Google Ads auto-tagging adds the gclid for you, but it does not add utm_source - so set it yourself on each campaign's final URL (for example, append ?utm_source=google). The other UTMs (utm_medium, utm_campaign, and so on) are optional and used only for your own reporting.
6. Turn on enhanced conversions and accept the customer-data terms
In your Google Ads account, go to Goals > Conversions > Settings (on some accounts this is under Tools > Conversions). The Settings tab has two related switches - turn on both and accept the customer-data terms when prompted:
- Enhanced conversions - tick Turn on enhanced conversions.
- Enhanced conversions for leads - tick Turn on enhanced conversions for leads.
- Accept the customer-data terms when prompted, then Save.
Note - the setup method doesn't matter for the Add-on: Each switch asks you to choose a method for collecting user-provided data (Google tag, Google Tag Manager, or Google Ads API). That choice only governs Google's own on-site data collection - it does not affect the Add-on, which uploads through Google's Data Manager API regardless. Any method is fine; what matters is that both switches are on and the customer-data terms are accepted.
Why both: Both switches accept the same customer-data terms, and turning on both is the configuration confirmed to work for the Add-on's uploads. If you prefer to enable only one, verify with a dry-run test before going live.
Note - timing: Accepting the terms can take a few hours to take effect. During dry-run testing, a "terms not signed" failure usually means this step is still propagating or was not completed.
7. Check your Data Manager consent settings (EEA / UK)
This is a separate setting from the customer-data terms above, and it matters if you advertise to visitors in the EEA or UK. The Add-on already labels every upload with the consent you chose in the step 4 Consent - Ad User Data / Ad Personalization fields, so those are the primary control. This page is the account-level fallback for uploads that arrive without a consent label.
- In your Google Ads account, go to Tools > Data manager > Consent settings tab.
- Under Imported and uploaded data > Default consent settings, decide how Google should treat uploaded data that is not labelled with consent:
- No - do not automatically mark this data as consented (the default): Google won't use unlabelled EEA/UK data for ads personalization. Because the Add-on sends its own consent signal, only events you marked as granted will be used - the safe, consent-first choice.
- Yes - automatically mark this data as consented: Google treats uploaded data as consented. Only choose this if you have a lawful basis to assert consent for all uploaded data.
Meta Ads Setup Prerequisites
Before connecting Meta Ads in step 5, complete these one-time setup steps to obtain the Pixel/Dataset ID and Conversions API access token.
1. Create or Access Facebook Business Manager
- Visit business.facebook.com
- Create a new Business Manager account or log in to your existing one
- Complete business verification if required
- Note your Business Manager ID (visible in Business Settings)
2. Create or Access a Meta Ads Account
- Navigate to Business Settings > Accounts > Ad Accounts
- Click Add > Create a new ad account (or link an existing one)
- Complete the setup process
- Note your Ad Account ID (format: act_XXXXXXXXXX)
3. Set Up a Meta Pixel (Dataset)
- Navigate to Business Settings > Data Sources > Pixels
- Click Add > Create a Pixel (or select an existing one)
- Enter a name, click Create
- Copy your Pixel ID - this is the Dataset ID used in Conversions API, and goes in the Meta Ads Pixel ID field
- Install the pixel code on your website (optional but recommended for web tracking)
Note: The Meta Pixel ID is the same as the Dataset ID used in the Conversions API.
4. Enable Conversions API and Generate an Access Token
- In Business Manager, navigate to Events Manager
- Select your pixel/dataset > Settings tab
- Scroll to Conversions API > click Generate access token
- Copy and securely save the token - you won't be able to see it again. This goes in the Meta Ads Access Token field.
- Verify that the Conversions API is enabled
Important: Store the access token securely. Treat it like a password. Anyone with this token can access your ad account.
For the latest documentation, refer to: developers.facebook.com/docs/marketing-api/conversions-api/get-started
FAQs
Do I need a CRM to use the Add-on?
No. The Add-on reads outcomes directly from Storeganise, your PMS. Because there's no lead record to store, it tracks real intent inside the booking flow instead - so operators with no CRM get full closed-loop attribution.
What does it actually send back to Google and Meta?
The Storeganise booking outcomes: the lead (waitlist signup), and the three move-in stages - move-in created (reservation), started (the lease starts), and completed (the customer moves in, the real conversion). Each move-in stage can also carry the booking value (basket size). You map each one to a Google Ads or Meta action of your choosing.
Do I need to add UTM parameters to my ad campaigns?
Yes - one is required. Every campaign's landing URL must include a utm_source that names the platform: utm_source=google for Google Ads, or utm_source=facebook, instagram, or meta for Meta. The Add-on uses utm_source to decide which platform to upload the conversion to, so without it the booking is captured but no conversion is sent - even when the click ID (gclid / fbclid) is present. Note that Google Ads auto-tagging adds the gclid automatically but does not add utm_source, so you still set it yourself on each campaign's final URL. The other UTMs (utm_medium, utm_campaign, utm_term, utm_content) are optional and feed your own reporting only - if you want a campaign label stored, put it in the standard utm_campaign parameter (a custom key such as ul_campaign is not captured).
Will tracking still work as browsers block cookies, and is it GDPR-compliant?
The Add-on uses a first-party cookie instead of third-party cookies, so it keeps working as browsers phase third-party cookies out. First-party does not mean consent-free, though: the cookie stores advertising identifiers, so it runs only after the visitor consents. The GTM tags are gated on Consent Mode - default denied, fired only when the visitor accepts - and you (the operator) remain the data controller responsible for your consent banner and privacy notice. See Consent and GDPR for setup.
What happens if a visitor declines cookies, or we have no consent banner?
Nothing is captured. The attribution tags are gated on consent and default to denied, so if the visitor declines - or if there is no consent banner to grant consent - the cookie is never written, so no UTMs, click IDs, or email are stored or sent to the Add-on or the ad platforms. UTMs are blocked too, not just the click IDs. That visitor's booking simply isn't attributed. See Consent and GDPR.
Can I change how the journey stages map to ad signals?
Yes. The Lead and move-in mapping shown above is the starting model, configured per account. You choose which Google Ads conversion action or Meta event each stage maps to, and can adjust it whenever you want.
Do I have to connect both Google and Meta?
No. Enable Google, Meta, or both. Any credential or event mapping you leave blank is simply skipped, so you can start with one platform and add the other later.
Do I need a Google Cloud project, a Google Ads Manager (MCC) account, or Google Ads API access?
You need a Google Cloud project with a service account - a free, one-time setup covered in Google Ads Setup Prerequisites. You do not need a Google Ads Manager (MCC) account, an API developer token, or approved Google Ads API access. The Add-on uploads through Google's Data Manager API using the service account you add directly to your own Google Ads account.
Are my Google and Meta connections secure, and how is the access used?
Yes. For Google, you create a service-account key in Google Cloud and add that service account as a user on your own Google Ads account, then paste the key into the Add-on; for Meta, you paste a Conversions API access token. Both credentials are encrypted at rest (AWS KMS) and stored privately per account. They are used only to upload conversion events to your Google and Meta accounts - never to read your campaigns, change settings, or for any other purpose. You can revoke Google access at any time by removing the service account from your Google Ads account's users, or by disabling or deleting the key in Google Cloud; for Meta, revoke the token in Events Manager. See the Privacy Policy for full detail.
How soon do conversions show up after a booking?
For Meta, set a Test Event Code and the event appears in Events Manager > Test Events within a few minutes. For Google Ads, an uploaded conversion typically appears against its conversion action within a few hours, and reporting can take a further 24-48 hours to fully settle.
Could the same booking be counted twice?
No. Every successful upload is recorded back on the Storeganise customer (and, for move-ins, the rental), so each event uploads at most once - even if a webhook is retried.
What if a booking happens long after the ad click - can the click ID expire?
Each ad platform only attributes a conversion if the original click is recent enough (Google Ads typically allows up to 90 days, Meta up to 7 days; the exact window depends on your account and conversion settings). The Add-on doesn't discard old bookings - it always attempts the upload using the actual booking date, and lets Google or Meta apply their own window. If a click is too old to attribute, the platform rejects that one event; the Add-on records it as an admin task in Storeganise so your team can see it, and then marks it as handled so it isn't retried repeatedly or counted twice. Bookings within the window upload normally.
What happens if an upload fails?
Temporary problems (network glitches, rate limits) are retried automatically. If an upload fails permanently, it surfaces as an admin task in Storeganise rather than being lost silently, so your team can see and act on it.
What customer data is sent to the ad platforms?
The ad click IDs captured from the landing URL (gclid / gbraid / wbraid / fbclid), plus the customer's email and phone - and the email and phone are SHA-256 hashed before they leave Storeganise, never sent in the clear. Move-in events can also include the booking value and currency.
Will bookings that didn't come from an ad create conversions?
No. Only bookings that can be traced back to a tracked ad click are sent to the platforms. Organic or direct bookings with no ad attribution are ignored, so your conversion data stays clean.
Should I use Meta standard event names or my own?
Standard events (Lead, InitiateCheckout, Schedule, Purchase) are recommended - they plug straight into Meta's ad optimisation and reporting. Custom names work too, but you'd then need to create a matching Custom Conversion in Events Manager for each one before they're useful for optimisation.
Where can I read the privacy policy and terms of service?
The Add-on handles booking data and connects to your Google and Meta accounts, so its data handling is covered by two documents:
In short: customer email and phone are SHA-256 hashed before they leave Storeganise, only ad-attributed bookings are sent to the platforms, and the Google Ads connection is used solely to upload your conversions - never to read campaigns or change settings. See the Privacy Policy for the full detail.
Ready to connect your ad spend to real move-ins?
Unwired Logic info@unwiredlogic.com
Comments
0 comments
Please sign in to leave a comment.