How to find out if fans of a facebook page also like another page of the brand

Here's a situation that might happen to a bid brand where Facebook pages overlap and fans might join one or more pages, thinking that they're on the right page OR

They might be interested in two completely different product pages provided by the same brand.

Finding out audience insights about these pages can show details about either of these pages , but not together. Facebook Ad Manager allows one to check the overlap between two audiences. Knowing this can help you decide on ad set targeting, remarketing or exclusions. What you'll need for this:

1. Access to the pages you want to check. 

2. Access to a Facebook Ad Manager account that is connected to these pages [allowing you to create ads for these pages if you wanted to].

Sign in to Facebook Ad Manager and head to the 'Audiences' tab.

Go to create audience > Saved audience.

To create your audience, in terms of demographics, you need to enter at least one location. If you want to show overlap for all countries, just paste a list of all countries and Facebook will match the country names. You can then decide on the age/gender/language and interest targeting options to decide depending on your requirements. 

The last bit is about connections targeting. Scroll to the bottom and choose connections targeting> Fans of > Name of the page 1. Similarly, create the saved audience for other pages [you can choose up to 5 audiences to check on overlap].

Head back to the main Audiences tab and select the audiences you want to compare > Click Actions > Show audience overlap.

Once you select the pages, you can now see in the above screenshot that 4.5 K users [5% of page 1 fans] are also fans of page 2. 

Knowing the overlap can help multi-page brands in a few ways:

  • Understand if they want to move fans from one regional page to another.
  • Show specific content to users who might meet more specific requirements.
  • Help with co-branding campaigns.

That's it for this blog post. Till next time.


How To Fire DoubleClick Counter Tags For Multiple Countries/Languages More Efficiently In GTM

This post is a combination of my two threads opened on Google Tag Manager forum. Both were answered by Simo Ahava and explains how to do this [Always helpful!].

So we have a multi country/lang website that has DoubleClick counter tags on it [6 countries/up to 3 languages - EN/AR/FR]. With DoubleClick tags created specifically for each market/lang, creating individual triggers for each lang/market can make GTM triggers/tags section look messy. More importantly, if the 6 countries were now expanded to 10-20 countries, would you continue creating 1 trigger per DC tag? hmmm, nope!

Here's an example of the DC tags structure for just AE/EN site


The DoubleClick counter tags are setup to fire on brochure downloads. An example of a trigger would be:

if page path matches regex /ae/en/

         and click url matches regex /brochure.pdf

then fire DoubleClick tag corresponding to Brochure Download for this particular market + lang.

Here's how the DC tag would look like in GTM.


Step 1: Getting the country name and language of the page being accessed.

Here's my first thread on GTM forum asking about how to scoop the country name / lang from the page path and store it as a variable:!topic/tag-manager/nCgNpdRhaR4;context-place=topicsearchin/tag-manager/authorid$3AAPn2wQcoU-Azf0LsKlh6uHfYaSXH0hjoRDDwomZ0MCRNUL9Z7--q74gHU6hcPyRk3OS93PLJsUtZ%7Csort:date%7Cspell:false

Simo's respone to this was to create two JS variables:

JS variable to scoop country name:

function() {

  return document.location.pathname.split('/')[1];


JS Variable to scoop language:

function() {

  return document.location.pathname.split('/')[2];


Since the url taxonomy is  or, using document.location.pathname.split finds the first /and then saves the value (in this case, 'ae' as a string). The second JS variable finds the next '/' in the url and saves it as 'en' - again as a string.


So, having the country name and language currently being viewed as variable values takes care of the parameter - when to fire which tag.

Step2: Associating the right DoubleClick tag for each market/lang. 

Here's the second thread!topic/tag-manager/DHlRuPMj_3s;context-place=topicsearchin/tag-manager/authorid$3AAPn2wQcoU-Azf0LsKlh6uHfYaSXH0hjoRDDwomZ0MCRNUL9Z7--q74gHU6hcPyRk3OS93PLJsUtZ%7Csort:date%7Cspell:false

In this particular DC tag example, the advertiser ID was common for all sites, only type= and cat= parameters changed between individual DC tags. Creating one JS variable for each dynamic value, we would have 6 JS variables,

  1. Brochure download type JS variable.
  2. Brochure download cat JS variable.
  3. Tel clicks type JS variable.
  4. Tel clicks cat JS variable.
  5. Emails sent type JS variable.
  6. Emails sent cat JS variable.


Example, brochure download type= JS variable.

function() {

  var country = {{country variable}};
  var language = {{language variable}};

  if (country === 'ae' && language === 'en') return 'type=string value for ae/en DC tag';

  if (country === 'ae' && language === 'ar') return ...;

  return undefined;


In the above JS variable, the var country and language were solved in the first part of the thread. That's why in this variable, we've used a dynamic value of {{country variable}} the following lines, the script then checks if the values pulled in country/language variables matches both conditions. IF yes, return a type= string value that's specific to the particular DC tag.

Once this is done, you can go to the Brochure Download DC tag in GTM and in the Group tag string (type=) parameter, enter the dynamic tag value {{Brochure download type value}}, same for Activity tag (cat=) parameter, {{Brochure download cat value}}.

Something like this:


Hope this post makes it easier for others. Big thanks to Simo for answering these questions on GTM forum.



Facebook Ads Is Now Flagging Videos That Contain Too Much Text

Back in April, WeRSM reported on Facbeook relaxing the 20% text in image rule to give more flexibility to designers. The new rule gave much needed freedom to creative folks by bucketing the image into either of these four categories:

  • Image text: OK: You ad's image contains little or no text. This is the preferred image style. 
  • Image text: Low: Your ad may reach fewer people because there's too much text.
  • Image text: Medium: You ad's reach may be much lower
  • Image text: High: Your ad may not run

Coming back to videos, I just noticed this notification for a video ad.

Clicking on 'Heavy Text in Image' opens up this notification with the guidance link taking users back to the Facebook help link posted in this article.

This is really important to advertisers for a couple of reasons:

  • 85% of Facebook video plays are on mute. Videos need to be created for the 'silent generation'. Content should be short, easy to consume and understandable even on mute. 
  • Knowing the above figure, this opens to a discussion around how much text/captioning should be included in the video to facilitate consumption of key message(s) while balancing Facebook's guidance around including text.

Have you noticed this notification for any of your videos? How has this impacted the Cost Per Objective for such ads compared to non-flagged ads?





How To Frame Keywords Into Search Related Topics

Here's an interesting post I came across in my Feedly. It's from the guys at Seer Interactive, talking about free tools to identify customers. 

Search is obviously featured in this blog post. Going beyond the keyword planner, search console, GA (site search), the post mentioned about a free tool called Answer The Public. The site takes your topic and shows the most important searches related to that keyword.

How are the most important searches shown?  

Using questions and prepositions.

e.g. For this sample search, my topic was 'breakfast cereals'. The questions around breakfast cereals were build around the what / when / how / why / are / where / which / who.

Some really awesome questions showed up which could be a great opportunity for generic keywords. Yes, these are long-tail but it's natural in terms of keyword flow in query. These are questions being asked by people exploring this topic and are on the edge. Going through some of the questions is like a deep-dive into the mindset of consumers and if, people are getting more health conscious when it comes to breakfast category.

Some great questions here:

Q - Which breakfast cereals are high in protein?

Q - Are breakfast cereals nutrious?

Q - Why are breakfast cereals good for you?

Compare this visualization to Keyword Planner results for 'breakfast cereals'.

After going into Healthiest Cereals ad group, here's what we get:

Lots of ideas but still, not too many long-tail keywords that describe user searches in a more natural way. The best part about Answer The Public is the simple (yet awesome) visualization that puts the questions (and prepositions) at the centre of the search query and then separate the searches that show what's bothering potential consumers on the edge/converted customers looking for a change/addition or non-believers in your product/category (e.g. 'Are breakfast cereals bad for you?')

Answer The Public tool is totally free (as of now, no idea if freemium is something expected) and would definitely recommend playing around with searches. People are already on it




Measuring Audibility In Video Ads.

As video content increases its presence in our feeds, it's become more important to look beyond the aggregate metrics and focus on whether the message is actually conveyed or not. Came across a nice article from AdExchanger about audibility being the new viewability

It's quite true and is a serious topic. hmmm...let's take a look at the two biggest platforms: YouTube (Google AdWords) and Facebook. As surprising as it sounds, both platforms don't offer metrics on audibility yet to know what % of ads were watched with sound on.

YouTube/AdWords: As of today, you can't measure what percentage of your In-Stream or Disoveryads had sound on.

Facebook Ad Manager: Sound related metrics aren't available. You need to get this from Facebook Insights (will be combined for both, paid and organic).

How can you find out audibility related metrics from Facebook Insights?

Not exactly easy to spot.

Go to your page > Insights > Posts > Click on the video post. You should see something like this:

Click on 10 Second Views. You should now see this:

ok, you should definitely see more than that :)

Look at the last bit of info, gem right there. Sound On/ Sound Off. This shows the absolute number and %. Start comparing your recent videos and see what the % is like for sound on. If you're producing rather long-ish form content with the main message being conveyed via sound, the sound on metric becomes even more important.

How far can you go back in your timeline to check on this sound: on metric?

Facebook started providing this metric from Feb, 2016 only...hmmm, gotta live with it.

As Facebook tries to take a bigger piece of the video market, video measurement becomes critical. The standard definition for a view is when a user watches for more than 3 sec. That's not quite long and definitely not enough to know if brand messages are being consumed.

In order to tackle this, Facebook introduced the cost-per-10 sec-view bid besides the default option (impressions). Go to Facebook Ad Manager / Power Editor > Ad Set that has the video targeting > Scroll to the bottom > you'll see the option to bid by 10 sec.

This is a good option to test videos ads with. Although you won't be able to separate the sound:on metric for paid vs organic, if your total views are completely dominated by paid metrics, there's a strong possibility that bidding by 10 sec helped get an audience that heard your brand's message. These are the users who started the video on mute (default) and then cared enough to unmute. 

It's also possible that the effective CPV would be much higher in this test but here's where the education aspect comes in getting everyone on-board in understanding video metrics in details. 5M views may not necessarily be better than 2M views if the latter has more views with sound:on, better retention rate and completion rate.

What do you think about testing this approach for Facebook video ads? Any ideas for AdWords?

Update: Found this article in my Feedly. Facebook now testing ads with auto sound-on. Here's the link:


[FREE GA Tool] GAUPET: Google Analytics User Permission Data In Pivot Tables

Just found this tool from David Vallejo's blog [he created it] and thought it's really handy for agency folks.

GAUPET stands for Google Analytics User Permissions Tool and it does exactly what it says.

All you need to do is connect your GA account on this tool

and create pivot tables out of it. Something like this:

As you can see in the above example, I've dropped two fields under rows [account ID and GA ID] while columns has email address. For my personal GA account, it's much simpler to know this but with agency accounts, this can really help show governance rules setup in GA properties [or view level], especially when you want to check account level access [also included in this tool]. Something like this:

Be sure to try the visualization features to switch between bar charts/area/columns and heat map shown below.


Best part, it's FREE so that's always a good thing. Here's the full list of fields:

The included fields are:

  • Email Address
  • Email Domain
  • Access Level
  • Account ID
  • Account Name
  • Account Access Rights
  • Account Permissions
  • Property ID
  • Property Name
  • Property Access Rights
  • Property Permissions
  • View ID
  • View Name
  • View Access Rights
  • View Permissions




Udta Punjab Controversy: Another Example Of Streisand Effect

This post will be a break from the usual and just examine at how the Indian Censor Board has brought even more attention to an offbeat film [by Bollywood standards], one that addresses the drug menace in a local province called Punjab.

After the Indian censor board suggested 89 cuts in the movie, including removing reference to the province name, it's kinda clear that politics plays a bigger part there - especially when elections are coming up in the same province.

What the censor board didn't expect what the movie industry to virtually unite behind the movie - calling the cuts archaic and completely opposing freedom of expression via cinematic means.

Here's how it looks on Google Trends:

16th Apr: Movie trailer got released and it generated some interest [I'd watch this movie!].

28th May: The first round of movie screening process was completed a week ago and the makers deny claims that the movie will be banned due to the topic.

9th June: Creativity is killed as the censor board actually suggested 89 cuts in a movie [making it kinda pointless to even release it]. This actually opened up a can of worms with celebrities, newspapers going after the rather ludicrous idea of incorporating these cuts.

The interest line between 16th Apr and 28th May shows that interest in the movie was reasonably picking up with nothing particularly shocking about the content. Once rumours started flying about a possible ban [around 28th May], everyone's head turned to this movie to know what's it all about.

Related searches in Google Trends already suggests that the soundtrack is already getting picked up among popular searches.


On Twitter, the #udtapunjab has taken all forms with the movie characters getting featured, the main actors, censor board and of course, social commentary behind the reality of situation and how critical is it.

Right above, you can see the same data for the #udtapunjab really growing in the last one week.

If/when the movie gets released, it's now bound to a success, thanks to some innovative ideas from the censor board. The matter went to Bombay High Court and it seems, the same censor board has now approved the movie with an Adult rating [sure...] and 13 cuts. 

Here's some of the most popular RT's coming from celebrities in favour of the movie.


As of now, the trailer has been watch 12 M times on YouTube already. 73 K likes / 5.9 K dislikes and 6.5 K comments. Just scrolling through comments shows people hating on the censor board and the ruling political party in the province among other issues.

Have a look. Anything worth censoring in the first place...? :)






How To Get Blog Post Category From Squarespace To Google Analytics: DOM Method In GTM / Solution# 2

In the previous post on this topic, I covered how to scrape the DOM element value for the blog category and pass it as a variable and then into GA.

Here's the link to Solution #1 for getting blog post category from SquareSpace to Google Analytics.

A really quick recap is that we create a DOM element variable, define a trigger that includes this variable and then fire an event where action can be the DOM element {{Blog Category}} and label {{page path}}.

This is one method. The other method can be to use custom dimensions. 

Why would one use custom dimensions?

Here are some good examples of custom dimension usage from a Quora thread.

Even though knowing the blog category is fine, we need to first create a CD in Google Analytics and then decide the scope [hit, session, user]. This is important for GA to understand how this dimension operates.

e.g. If we chose hit for blog category, we would get hit metrics such as pageviews

If we choose session, then all the pages seen in a single session would get classified with the page category of the last page.

If we chose user, we would classify the user as a reader of a particular blog category type [so everytime this user shows up, the same category would be assigned].

A more detailed example is explained here.

In the blog category page, it would a hit metric.

Once we define a CD in GA, we then go to GTM for the tag.

In the event method, we created a event based trigger. In CD page. we create a pageview trigger instead where the CD matches the blog category.

and you're done. Once in GA, you can now combine it with other dimensions to create hit level reports and analyze the data more easily.

Debugging GTM: Data Layer Variable sending undefined value

Recently ran into this issue where a dataLayer was defined and showing in debug mode but GA would keep randomly sending out undefined as category/action/label values in GA - which was quite frustrating for the developer because the right details were indeed getting passed in DOM.

Something was going wrong between DOM and GA. Here's what I had going before seeking help in Google Tag Manager Product forum.


  1. Define dataLayer event to pick up category/action/label [action and label parts of event were dynamic and captured from page interaction.
  2. Create these dataLayer as unique category/action/variables for GTM to pick up the values.
  3. Created a click based trigger where when the page interaction took place + category/action/label matched RegEx .*  , an event fired.
  4. GA event created with action and label fields being the dataLayer values while the trigger being in step#3.

As dumb as it sounds now, step#3 was the problem where category/action/label were created as an event and not just a click. Changing the trigger in step#3 from click based to Custom Event where the event = the name of the dataLayer event name [not category/action/label] plus changing the matches RegEx .* to does not contain 'undefined' makes sure that we have values in place.

Here's the link to Google Tag Manager Product Forum where I got help in fixing this.!topic/tag-manager/V5Emqq8htgw;context-place=forum/tag-manager


How to get blog post category from Squarespace to Google Analytics: DOM method in GTM / Solution# 1

Getting Squarespace to work with Google Tag Manager is kind of a pain. Instead of using the async GA code into code injection setting, I opted for some search and found this handy JQuery script from Chris Eisenbraun that works amazingly well with GTM: Link to GTM script for SquareSpace.

Ok, so now that I have GTM up and running on this blog, the next question I had was related to which blog categories work well compared to others. After reaching out to SquareSpace support, was informed that dataLayer method isn't available in SS yet....hhhmmm.

This presents a challenge on how to get this done. In this post, I've used a video tip from MeasureSchool to capture the blog category by using the DOM Element variable in GTM.

Main steps in implementing this:

1. Finding out the name of the DOM element that has the blog post category.

Let's use a previous blog post from this blog as an example and scroll to the end where the post category [google analytics] is mentioned.

Right click on the category [google analytics] and choose 'Inspect Element'. Hover over the class and you'll see the blog category highlighted.

Go to the Console tab in dev mode and type 'document.querySelectorAll("span.categories")' Enter. Drop down and you should see the category.

2. Now that we know the DOM element that captures the blog category, we go back to GTM and create a variable that captures this particular DOM Element.

3. Create a GTM Trigger that we can use in our events.

Since we need to capture this as soon as a page is loaded and not on click, we will keep it as a Page View trigger with the Regex = .* . This would capture all the categories.

4. Create GTM event based on this trigger.

The Event Category is labelled as Blog Category while the Action and Label is dynamic.

Event Action = {{Blog Category}} captures the value in DOM element variable while Event Label = {{Page Path}} captures the blog post link except the part.

If a blog post does not have category assigned to it, Event Action will show as null. This is because Event Action is a required field.

First, we test it in Debug mode to be sure this is working. Open up an article and with DOM Ready left tab, go to Variables. This will now show the blog post category. Go back into GA and we now have the values in as events.

null is where a blog post did not have category assigned to it.

If you have more than one blog post category, it will capture as category1, category 2.

The event method can help where Custom Dimensions have been exhausted.  Will do a separate blog post on custom dimension method.

Here's the reference video I used from MeasureSchool in implementing this.

Update: Here's the Custom Dimension method for the same requirement.