Facebook offline conversion using server GTM

Aug 18, 2022
Aug 16, 2022
Also available in

Facebook advertisers are always looking for ways to improve their campaign efficiency. One way they do this is by enhancing conversion tracking, which has not been an easy task in recent years. 

Since the rise of tracking restrictions, implementing Facebook Conversion API (which sends data to FB servers from your server) is the most popular way of improving FB tracking. We already have a detailed blog post on how to set up FB CAPI

You can also use Facebook’s older way of sending server events, the offline conversions. This solution relies on first-party data that cannot be affected by tracking restrictions or short-lived cookies.

This blog post will discuss the recent tag for the server Google Tag Manager container - Facebook offline conversion tag. It allows sending data to FB offline conversion using the server Google Tag Manager container. 

What is Facebook offline conversions?

Facebook offline conversions is a great way to track actions that people take off your site, such as in-store purchases or by phone.

You can upload offline event data to Facebook, which will match events to people who saw or clicked FB ads. If FB can identify a person and match them with the ad, it will count the event as a conversion towards the ad campaign. 

Nowadays, the conversion funnel is complicated and includes many touchpoints (both click-through and view-through). For this reason, some marketers choose offline conversions as their second angle of analysis when evaluating results from Facebook campaigns, both offline and online.  

There are several ways how advertises approach setting up FB offline conversions:

  • Manual upload using a CSV file
  • Built-in a custom integration
  • Connectors like Zapier

Each of these methods has its disadvantages. To implement custom integration, you need to hire developers who will create a connector for your CRM (or POS, etc.) and FB offline conversion. With tools like Zapier, it might be easy to set up, but the price will be high, especially if there are many events. With manual upload, a lot of work must be done when preparing a CSV file. 

Setting up FB offline conversions using the sGTM tag might be the best solution for those already familiar with server-side tagging. Setting up won’t take long, and you can save money by not using connectors or hiring developers.

If you are unfamiliar with server-side tagging, I highly suggest starting to implement this new technology sooner than later. The idea of server-side tagging has been around for some time, but it's only recently becoming more popular. This technology is designed for tracking that relies on first-party cookies and first-party data, making it more secure for your and your customers.

Two essential things that need to be done before setting up ss tagging using sGTM are creating a server GTM container and delivering data to sGTM (there are several ways of sending data, the most popular are GA4, DataTag/DataClient, Webhooks, etc.).

Why use Facebook offline conversions?

There might be multiple reasons to use Facebook offline conversions. 

  • Measure events more accurately
  • Create quality custom and lookalike audiences
  • Optimize campaigns towards the best performing ads and ad sets
  • Increase ROAS of FB campaigns

But if you have already implemented FB CAPI? Should you consider implementing FB offline conversions using sGTM?

I would suggest doing so. The main reason is that the more data about customers you send to Facebook, the more information is fed to FB machine learning algorithms that select who should see your FB ads. This may have a positive effect on the results of FB ads. 

What about FB offline conversions and iOS tracking restrictions? There is no official documentation on how FB offline conversion affects those who opted out of tracking on their mobile phones. Below I will describe my opinion on how FB processes such data. 

This guide will use a CRM webhook to trigger FB offline conversion tags. When a user on iOS devices who opted out from tracking makes a purchase, FB pixel won't record this event (at least they should not track it following user privacy policy rules). 

After a user makes a purchase, CRM sends a webhook to sGTM with all the information about order details and user information. Once sGTM receives this data, it sends a request to FB offline conversion. In the webhook data, there will be no identification of whether the user allowed/not allowed FB to track them. In theory, this means that if FB can match this user with the person who saw your ad, the offline conversion will be counted towards the result of the FB campaign.  

Another massive benefit of FB offline conversion is that it’s still eligible for a 28-day attribution window. While with FB pixel or FB CAPI, the maximum you can get is 7-day attribution. 

Send data to sGTM using webhook

1. Open sGTM container preview -> click three dots in the top right corner -> click Send preview manually -> copy X-Gtm-Server-Preview HTTP header

http preview header sGTM

2. Log in to your stape account -> open sGTM container -> go to Power-Ups tab -> Click config HTTP Header Config -> paste the value you’ve copied from server Google Tag Manager container preview -> click Save. 

Once you've added the HTTP Header, you can see webhooks in the sGTM preview. 

Do not forget to remove the HTTP Preview header power-up once you finish the setup.

send request to sGTM preview

3. In this step, I will set up webhooks that send data to sGTM. Go to your CRM (in my case, it’s WordPress).  Add webhook name and webhook URL. Use your tagging server URL as a webhook URL+custom path (you can find tagging server URL inside the sGTM container settings on stape). Configure the webhook data you want to send. 

send webhook to sGTM

4. Open sGTM container preview and test webhook. You should see the corresponding request in the sGTM debugger.  

debug webhook sGTM

5. Let’s set up a client in sGTM that will claim the request sent by webhook. To do so, you must import Data Client to your sGTM. Once you’ve added Data Client to the sGTM client template, go to the Clients section in sGTM -> Click new Client -> Select Data Client and scroll down to Accepted Path Settings -> Add request path of your webhook. Save client. 

set up webhook sGTM

6. Open the sGTM debugger and test if the Data Client claimed webhook requests correctly. Check event data. You should see all the information you’ve configured in the webhook. 

webhook sGTM

How to set up Facebook offline conversions using sGTM

Before July 2023, Offline Conversions API was used to send data to Facebook Offline conversions. But now things are getting way easier because of the update Facebook Conversions API. 

If you we using Stape’s Facebook Offline Conversion Tag that is now depreciated, in July 2023 your events may have stopped coming in, and when debugging you get an error like this:

events stopped coming

As the Offline Conversions API will soon be completely discontinued, we'd recommend going straight to reporting via the updated standard Conversions API, especially as it's become easier and more logical. 

Previously you sent Offline conversions to a separate Offline Dataset, this is no longer necessary as instead of the standard FB Pixels you now probably have a 'Dataset' which is essentially the same thing and most pixels have been automatically converted to Dataset, which you may not have even noticed :)

And so, for FB Offline reporting, it is now mandatory to use exactly Dataset, not Pixel. In most cases if you go to your pixel and check - you will notice that it has already become a Dataset. 

The easiest way to check this is to simply go into the settings and make sure you have 'Dataset ID' instead of 'Pixel ID' (the number remains the same):

dataset id

If in your case you still have a pixel - you can find instructions on how to convert FB Pixel to Dataset or create new Dataset here.

And so, we made sure that you already have a Dataset, now it remains to configure the sending of offline events, which is actually no different than configuring standard FB events.

Previously, we added an update to the Facebook Conversion API tag for the server container. In addition to switching to the new version of the API, an item with an Action Source selection has also been added to the interface:

facebook capi tag fo server container

And yes, to send an event as offline - all you have to do is select Physical Store in Action Source. 

Case example

So, let's assume that we have a CRM system in which the company's clients are kept. Some sales happen on the website and we already have online conversion sending set up, but also some sales happen via email or phone, or in the physical shop. For such sales the user does not go through the standard online flow, so the only option for us is to ask developers to set up a webhook in JSON format which will be sent to our server GTM container when for example a customer card goes to Done status which means the transaction is closed.

It is extremely important that the webhook contains as much user data as possible, as this is the only source from which the event can be attributed to your adverts (as there is no fbc cookie).

The data in the webhook does not need to be hashed, the tag itself will do it automatically before sending the event.


If in your case, for example, a user leaves a lead request on your website before an offline sale, you can store his marketing click cookies (for Facebook, these are fbp and fbc cookies) in your CRM system along with the lead data. In this case the webhook can also contain data from these cookies and attribution for such events will work much better.

For webhook debugging, you will need to use Stape Power-UP 'Htttp header', we have described how to send and debug webhooks in sGTM earlier in this blog post. 

Further setting is no different from setting up a standard event.

1) Map the data from Event Data into the format required by Facebook.

2) Add the corresponding variables to the Facebook tag and select Action Source: Physical Store (this very point and send the event to the offline type).

facebook conversion api tag configuration

3) Add the correct trigger.

In my example, I use Data Client to get the webhooks (and I recommend you to do the same).

Data Client has a handy option - additional path. I always use this for webhooks to make sure there are no false positives fires from other tags. I use the /webhook path for webhooks, which means that developers send webhooks to my container

And accordingly I can use a simple trigger for my event with additional validation:

trigger in the custom event

It remains to make sure in debug mode that the tag worked and Facebook accepted the data and you can publish the update to live.

debug mode for the tag

And you should subsequently see events with the Offline type in your Dataset in both the overall list and in the event details:


And so, now setting up Offline events is no more complicated than standard Facebook events, also now it is more convenient to track all events, as now everything is collected in one place - in a single dataset.

The aim is to enhance your tracking capabilities and give you more insight into your offline conversions. This, in turn, can help improve your marketing strategies and drive better results for your business.


Facebook offline conversion is one of the ways to boost your FB campaign results and improve attribution. Though offline conversions only are not enough for proper FB tracking and audience collection, it might be an excellent addition to your existing FB pixel tracking and FB CAPI. 

Using FB offline conversion tag for the sGTM container, you can now set up offline conversion easier and cheaper than before. Remember to follow offline conversion best practices to improve the efficiency of your setup. 

If you need help setting up ss tagging, we are here to help!

Tagged with:Facebook

Host your GTM server at Stape