This column setup gives a good overview of your ROI focused e-commerce campaigns and ad sets.
Order
Column Name
1
Object Names & Ids > Campaign Name
2
Object Names & Ids > Ad Set Name
3
Performance > Delivery
4
Ad Relevance Diagnostics > Quality Ranking
5
Performance > Attribution Setting
6
Performance > Impressions
7
Performance > Reach
8
Performance > Clicks (All)
9
Clicks > Outbound Clicks
10
Performance > CTR (All)
11
Clicks > Outbound CTR
12
Conversions > Adds to Cart: Total Deselect all sub-categories
13
Conversions > Purchases: Total Deselect all sub-categories
14
Conversions > Purchases: Value Deselect all sub-categories
15
Conversions > Purchases: Cost Deselect all sub-categories
16
Performance > Amount Spent
17
Goal, Budget & Schedule > Budget
18
Performance > Frequency
19
Conversions > Website Purchase ROAS (Return on Ad Spend)
Select “Save as Preset” and name your column set “ROAS”
Click the column icon and select “Set as Default”
Optional: Custom Columns
Optionally, create the following custom columns
% Cost of Sales
This indicates what percentage of your sales are going towards Facebook ads cost (ad spend as a cost of sales). Where ROAS is advertiser centrice, Cost of Sales is more business centric.
You have been running a campaign for 7 days with a daily budget of $50. Over those 7 days you have spent $350 with an ROAS of 1500%. You are using a “Maximize ROAS” bid strategy, and want to hit an ROAS of 2000%.
What should your daily budget be?
Here is the formula:
Formula for adjusting a budget towards a target ROAS
This formula calculates what your daily spend should have been to hit your target ROAS. Although there are no guarantees that future performance will be the same as past performance, it does provide a baseline from which to work.
If you are running a smart bidding campaign in either Google Ads or Facebook Ads, and are aiming for a target Return on Ad Spend (ROAS), this is a great formula to use for adjusting your budgets.
Evergreen Campaigns add some structure and sanity to your Facebook Ad management. They prevent the typical disorganized Campaign sprawl that plagues most Facebook Ads Accounts. Evergreen Campaigns encourage continuous improvement and optimization, facilitates data analysis, and lowers maintenance costs.
An Evergreen Campaign Structure doesn’t change much year over year: The Campaigns and Ad Sets are continually in use, and only the ad creative is changed.
Campaign Structure
The campaign structure is relatively simple: 3-4 primary campaigns targeting 3 main segments: Past Purchasers, Remarketing, and Prospecting.
Past Purchasers
Remarketing
Prospecting
People who have previously purchased from you.
People who have interacted with your brand via your website, social media, or otherwise, but have not purchased from you yet.
People who have never purchased from you, and who have not interacted with your brand in the past 180 days.
CPA $
CPA $$
CPA $$$
Budget $$
Budget $$$
Budget $
Facebook Evergreen Campaign Structure
Audiences
Before you can create your campaigns, you will need to define some base audiences to capture purchasers and website visitors. A full description of the essential Facebook audiences that should be created is available here.
Building the Campaigns
Campaign #1: Past Purchasers
This campaign targets people who have previously purchased from you. Generally your cost per acquisition will be low, and your budget will be a function of how many customers you have.
Campaign Name
Buying Type
Objective
Past Purchasers
Auction
Conversions
Ad Sets for Past Purchasers Campaign
At it’s most basic, the campaign contains a single Ad Set containing all your past customers:
Ad Set Name
Audiences
Past Purchasers All Time
Purchase 10d Purchase 30d Purchase 180d Purchaser All Time
For high volume businesses that have large amount of customers, multiple Ad Sets could be create, one for each audience to have more granular control based on past purchase date. However, a single campaign targetting all past purchasers is also quite effective, trusting Facebook’s algorithm to take purchase recency into account.
Campaign #2: Remarketing
This campaign targets website visitors and people who have previously engaged with your brand on facebook, instagram, or otherwise, but who have NOT previously purchased from your business.
Your Cost per Acquisition (CPA) will be relatively low, and therefore you should manage to have a relatively large budget while maintaining a profitable CPA.
This campaign actually needs to be setup as two separate campaigns
Campaign Name
Buying Type
Objective
Remarketing
Auction
Conversions
Dynamic Remarketing
Auction
Catalog Sales
The Remarketing campaign needs to be split into two: one for regular ads, and another for dynamic product ads.
Ad Sets for Remarketing Campaigns
Ad it’s most basic, the Remarketing Campaign contains only two Ad Sets targeting visitors who engaged with your brand up to 30 days ago, and another for people who engaged with your brand up to 180 days ago (the Facebook maximum)
Ad Set Name
Audiences
Exclude
Remarketing 30d
Add to Cart 30d Visitors Top 25% 30d FB Engagement 30d IG Engagement 30d
Purchase 30d
Remarketing 180d
Add to Cart 180d Visitors Top 25% 180d FB Engagement 180d IG Engagement 180d
Purchase 180d Add to Cart 30d Visitors Top 25% 30d FB Engagement 30d IG Engagement 30d
For higher volume sites, you can consider adding more granular Ad Sets for 10, 60, 90 day etc… remarketing audiences.
Ad Sets for Dynamic Remarketing
Ad Set Name
Audiences
Product View 30d
Retarget Ads: Viewed or Added to Cart but not Purchased: 30d
Product View 180d
Retarget Ads: Viewed or Added to Cart but not Purchased: 180d
Cart Abandon 30d
Cart Abandon 30d
Cart Abandon 180d
Cart Abandon 180d
For high-volume sites, or for periods of high sales such as Black Friday, you can also consider creating 10, 4, or even 1 day Ad Sets.
Campaign #3: Prospecting
This campaign will target “brand unaware” customers. People that have never purchased from you, and that have not interacted with your brand or site in at least 180 days.
This campaign will feed your Remarketing campaigns. You can expect your Cost per Acquisition (CPA) to be relatively high and your budgets will need to be relatively low to remain profitable. But the more you can manage to spend here, the more you will be able to spend on Remarketing.
Campaign Name
Buying Type
Objective
Prospectiv=ng
Auction
Conversions
Ad Sets for Prospecting Campaign
At it’s most basic, the prospecting Campaign should target a 1% look-a-like audience (based on the Purchase pixel event).
More advanced campaigns can also target 2%-10% look-a-like audiences, or custom interest based audiences. But it is important to always exclude your Past Purchasers and Remarketing audiences so that there is no overlap with your campaigns.
Ad Set Name
Audiences
Exclude
1% Look-a-like Purchase
1% Look-a-like Purchase
Purchase All Time Purchase 180d Add to Cart 180d Site Visitors Top 25% 180d FB Engagement 180d IG Engagement 180d
The Big Picture
Once all the above is setup, your Campaign and Ad Sets should look something like this:
Facebook Ads Evergreen Campaign Structure
All that remains now is to create ads or duplicate your posts into these campaigns. But that is a topic for another day.
Below is a list of the Essential Facebook Audiences the every e-commerce site should create in their Facebook Ads Account. Even if you don’t plan on using them right away, creating them now will ensure that you can serve ads to these users in the future.
Past Purchasers
Past Purchasers audiences will be used to target users that have previously purchased from you. There are 4 audiences with varying time periods, to allow you to target your past purchasers by how recently they purchased from you.
To create these go to Audiences > Create Audience > Custom Audience
Audience Name
Source
Pixel Criteria
Purchase: 10 day
Website
Purchase: 10 days
Purchase: 30 day
Website
Purchase: 30 days
Purchase: 180 day
Website
Purchase: 180 days
Purchase: All Time
Customer List
Customer list upload*
* The “Purchase: All Time” audience will need to be updated every 180 days.
Visitors and Social Fans
These audiences include website visitors, cart abandoners, and people who have engaged with your content on Facebook and Instagram. These are all people that are “brand aware” and are some of the lowest hanging fruit in terms of generating sales.
To create these audiences go to Audiences > Create Audience > Custom Audience
Audience Name
Source
Pixel Criteria
Add to Cart: 1 day
Website
AddToCart: 1 day
Add to Cart: 4 day
Website
AddToCart: 4 days
Add to Cart: 30 day
Website
AddToCart: 30 days
Add to Cart: 180 day
Website
AddToCart: 180 days
Site Visitors: Top 25%: 10 day
Website
Visitors by Time spent: Top 25%: 10 days
Site Visitors: Top 25%: 30 day
Website
Visitors by Time spent: Top 25%: 30 days
Site Visitors: Top 25%: 180 day
Website
Visitors by Time spent: Top 25%: 180 days
FB Engagement: 10 day
Facebook
Everyone who engaged with your page: 10d
FB Engagement: 30 day
Facebook
Everyone who engaged with your page: 30d
FB Engagement: 180 day
Facebook
Everyone who engaged with your page: 180d
IG Engagement: 10 day
Instagram
Everyone who engaged with your business: 10d
IG Engagement: 30 day
Instagram
Everyone who engaged with your business: 30d
IG Engagement: 180 day
Instagram
Everyone who engaged with your business: 180d
Lookalike Audiences
Lookalike audiences are a good base to use for new customer prospecting. If you target multiple countries, you will need to create a separate set of these for each country.
To create these audiences go to Audiences > Create Audience > Lookalike Audience
Lookalike Source
Event
Number of Audiences
Audience Markers
Facebook Pixel
Purchase
4
0%, 1%, 2%, 5%, 10%
Choose 4 audiences, and set markers at 0%, 1%, 2%, 5%, and 10%
Next: Campaigns
Once you’ve created your audiences, the next step is to create a Facebook Evergreen Campaign Structure properly segmented into Past Purchasers, Remarketing, and New Customer Prospecting.
If you use the Facebook Channel on your Shopify store, you will notice that some product attributes are missing in the product catalog:
Google Product Categoryfixed!
SEO Description
Gender
Material
Additional Images
Below is the solution to add these missing details. This will give you finer control over your Facebook Product Sets and will let you create richer dynamic ads with multiple product images.
Pre-requisites
Before we start, make sure all of the following are done:
Install the Google Sales Channel The script leverages some of the metafields that are created on by the Google Sales Channel
Install the Facebook Sales Channel
Setup Empty Field Rules This is not actually a pre-requisite, but it’s a good backup in case things break down with your feed. This sets some default values for fields such as condition and availability.
Go to Facebook Business Manager and then Commerce Manager > Catalog > Data Sources
Click on your data feed and go to Settings
Scroll down to Data Feed Rules and click on Add Rules > Set Default Values
Create default values for age_group, gender, availability, condition, material, and any other fields that make sense for your business.
Step 1 Create the Facebook Product Feed Template
To create the Facebook product update feed, we will use a “hack” to transform a standard Shopify Collection page into and XML data feed:
In the Shopify admin, go to Online Store > Themes > Action > Edit Code
Under Templates, choose Add a new Template
Choose collection from the drop down and name your template facebook-feed-template
Paste the code below into your newly created template file and click Save.
{% layout none %}<?xml version="1.0"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
{%- paginate collection.products by 1000 -%}
{%- assign useSEOdescription = true -%}
{%- assign additionalImagesForVariants = false -%}
{%- assign includeOutOfStock = false -%}
{%- assign filterVariantImagesByColor = false -%}
{% comment %}
This template is used to add additional information to the Facebook product catalog
Documentation: https://business.czarto.com/2019/12/11/update-your-shopify-facebook-product-feed-with-missing-attributes/
<comment:title>{{ product.title}} {{variant.title}}</comment:title>
{% endcomment %}
<channel>
<title>{{ shop.name }} {{ collection.title | replace: '&', '&' }}</title>
<link>{{ shop.url }}</link>
<description>{{ collection.description | strip_html }}</description>
{% for product in collection.products %}
{%- assign Gender = product.metafields.mm-google-shopping.gender -%}
{%- assign AgeGroup = product.metafields.mm-google-shopping.age_group -%}
{%- assign Material = product.metafields.mm-google-shopping.material -%}
{%- assign Color = "" -%}
{%- if product.variants.size > 0 -%}
{%- for variant in product.variants -%}
{%- if includeOutOfStock or variant.available -%}
{%- for option in product.options -%}
{%- if option == 'Color' -%}{% capture Color %}{{ variant.options[forloop.index0] }}{% endcapture %}{%- endif -%}
{%- endfor -%}
{% assign additional_images = product.images %}
{% if filterVariantImagesByColor %}{% assign additional_images = product.images | where: "alt", Color | sort: 'attached_to_variant' | reverse%}{% endif %}
<item>
<g:id>{{ variant.id }}</g:id>
<g:brand>{{ product.vendor }}</g:brand>
{% if useSEOdescription and product.metafields.global.description_tag.size > 0 %}<g:description>{{ product.metafields.global.description_tag | strip_html | strip_newlines | replace: '&', '&' }}</g:description>{% endif %}
<g:product_type>{{ product.type | replace: '&', '&' }}</g:product_type>
<g:mpn>{{ variant.sku }}</g:mpn>
<g:item_group_id>{{ product.id }}</g:item_group_id>
<g:content_id>{{ variant.id }}</g:content_id>
<g:material>{{ Material }}</g:material>
<g:gender>{{ Gender }}</g:gender>
<g:age_group>{{ AgeGroup }}</g:age_group>
{% if additionalImagesForVariants %}
{% if additional_images.size > 1 %}{%- for image in additional_images offset:1 limit:10 -%}
<g:additional_image_link>https:{{ image.src | product_img_url: 'master' }}</g:additional_image_link>
{% endfor %}{% endif %}
{% endif %}
</item>
{%- endif -%}
{% endfor %}
{%- else -%}
<item>
<g:id>{{ product.id }}</g:id>
<g:brand>{{ product.vendor }}</g:brand>
{% if useSEOdescription and product.metafields.global.description_tag.size > 0 %}<description>{{ product.metafields.global.description_tag | strip_html | strip_newlines | replace: '&', '&' }}</description>{% endif %}
<g:product_type>{{ product.type | replace: '&', '&' }}</g:product_type>
<g:item_group_id>{{ product.id }}</g:item_group_id>
<g:material>{{ Material }}</g:material>
<g:gender>{{ Gender }}</g:gender>
<g:age_group>{{ AgeGroup }}</g:age_group>
{% if product.images.size > 1 %}{%- for image in product.images offset:1 limit:10 -%}
<g:additional_image_link>https:{{ image.src | product_img_url: 'master' }}</g:additional_image_link>
{% endfor %}{% endif %}
</item>
{% endif %}
{% endfor %}
</channel>
</rss>
{% endpaginate %}
Although the script above will work as is, there are three items that you can configure:
useSEOdescription = true Setting this to true will use your product’s SEO description. Setting to false will not upload any description (default Shopify feed will be used)
additionalImagesForVariants = false Setting this to true will upload all your product’s additional images. If you use variants, all your variants will have the identical additional images (their primary image will be as-configured in Shopify)
filterVariantImagesByColor = false Setting this to true will only upload additional images for a variant IF the ALT text of the images exactly match that variant’s color attribute.
Step 2 Select the Products to Send to Facebook
Now select which products will be included in your feed.
In Shopify Admin, go to Products > Collections > Create Collection
Enter a Title: “Facebook”
Add Products to the collection (either manually or using conditions). If you want to include all your products, then add a rule similar to “Inventory Stock is greater than 0”.
IMPORTANT! Assign the Facebook Feed Template to this collection. In the bottom right column of the page, you should see a section called Theme templates. Choose collection.facebook-feed-templateotherwise none of this will work.
At the bottom of the page, click on Edit Website SEO and enter “facebook” as your collection url handle. (optional – but helps with remembering your feed url)
Save and Preview the collection. You should see unformatted text on the screen. This is your Facebook feed. Do a “View Source” in your browser to preview the XML data.
Go to your Facebook Business Manager and go to Commerce Manager
Expand Catalogs in the left hand menu and select Data Sources
In the Supplementary Feeds section, click on Add supplementary feed
Click Upload Feed and choose Scheduled Feed
Paste in the feed url generated in Step 2 and click Next (leave Login Details blank)
Schedule your updates to occur daily or hourly. Turn off automatic updates (or try leaving this on — I’ve never tried it)
Select the data feed to update
Name your supplementary feed and click Upload
Wait for Facebook to finish fetching your feed
Done
Your products should now have the missing information added. You will probably want to repeat STEP 3 anytime you modify or add new products to your shop.
It’s just a matter of time before Shopify starts uploading the full data specs to Facebook, but until that time, this is the workaround!
Once a week (or sometimes daily if we are in a period of high activity or if we have launched a new promotion), first thing in the morning, I look at the past 7 days and run the above formula for each of my campaigns.
If my target ROAS is very close to my actual ROAS, then I don’t bother with the calculation, nor with adjusting budgets.
If the results call for a decrease, then I decrease the budgets.
If the results call for an increase, then I increase budgets, but usually by no more than 10%.
WARNING! This code is no longer maintained. Although the code in this post should still work, please use at your own risk. I recommend using the Shopify Facebook Marketing App to sync your product catalog.
Below is a free customizable DIY solution to create a Facebook Product Feed in Shopify.
This is an advanced topic and assumes you have the required understanding of HTML/XML/Liquid, the Shopify Store Admin and Facebook Business Manager.
Enter the feed collection url you copied in step 3 above. Leave the username & password blank. Choose a time for your daily upload to occur (early morning is usually a good time). Choose your currency.
Click Start Upload and wait for the feed to be fetched and processed.
Fix errors: If there are errors, go back, fix them, re-fetch, and keep doing so until the feed is error free. Sometimes it is necessary to delete and re-create your catalog in Facebook for some changes to appear.
5. Prevent the Facebook Feed from Showing on your Store
Depending on how your store is setup, you may need to add some code to prevent your Facebook feed collection from showing up on your store. The exact way to do this may depend on your theme, but generally you will want to have an “unless” statement within the loop that displays your collections:
My personal experience with View Through Conversions (VTCs) is that they provide very little real-world lift in sales, and are more likely just poaching attribution from other channels. So I almost always give VTCs a value of zero and ignore them.
The truth probably lies somewhere in-between. For lower funnel remarketing campaigns VTCs probably provide close to zero value, while for truly brand-unaware audiences, the value is somewhere between 0 and 100%.
If you are one of those who wants to believe in the value of VTCs, you should calculate the true value of VTCs by running a placebo A/B test. Below is just such a test that we ran on the AdRoll network back in 2013:
Placebo A/B Tests to Measure View Through Conversions
How to Setup a Placebo A/B Test
You will likely need assistance from your ad platform or ad agency to properly run this sort of test. It is usually difficult to have a blank or psa ad approved.
Create 2 separate (but equal) non-overlapping campaigns
Campaign A will serve your “normal” ad Campaign B will serve a Public Service Announcement ad
Run both campaigns for a few weeks
Calculate VTC “lift” as follows:
Real Life Example
Campaign A (Real Ad)
Campaign B (PSA Ad)
Impressions
99,467
97,412
VTCs
329
261
Data from a real world A/B test performed in 2013 on the AdRoll network
VTC “Lift” = (329 – 261) / 329 = 20%
In this real life example, the irrelevant PSA Ads still managed to generate 80% of the View Through Conversion volume that the real ad generated. To be more clear, 261 people saw an ad to adopt a cat, and later went to BOATERexam.com to purchase a boating license.
So 80% of VTCs can be given a value of zero. Of the remaining 20%, more analysis is needed to figure out exactly how they influenced sales. The Real Ad did seem to generate more VTCs than the PSA ad, but the real question is if those VTCs resulted in extra incremental sales or were they simply tracking sales generated by another channel such as e-mail?
Real Life Example #2: Facebook
A few years later we ran a similar Placebo A/B test on Facebook with the help of SocialCode. Unfortunately I no longer have the data for this test, but the end results was that there was ZERO lift from VTCs, and the PSA ad actually outperformed the real ads from a VTC standpoint! (People seeing cats were buying more boating licenses than the people seeing ads for a boating license)
So how should you value View Through Conversions?
Here are my recommendations:
Give View Through Conversions a value of ZERO. Unless you can prove otherwise via an A/B test. This is especially true for re-marketing campaigns where the visitors have previously visited your site, and may be actively engaged in checkout when the ad is shown.
Run your own Placebo A/B test. If someone insists on using VTCs in performance metrics, then you should insist on running an A/B test to calculate the true value. You should run at least two tests: One for remarketing audiences and another for brand-unaware audiences.
Be cautious and skeptical of anyone pushing the value of VTCs especially if they are an ad agency or ad platform that will benefit from including the extra VTCs in their performance metrics.
When can View Through Conversions be valuable?
Brand Unaware Audiences on Trusted Networks: If you are marketing to a 100% brand-unaware audience, and a trustworthy network, then there might be a valid argument to give VTCs some credit.
To measure which sites your customers frequently visit: Looking at VTCs on a per-placement level, *should* theoretically be a good indication of which sites your customers spend time on. You can then consider having targeted prospecting campaigns focused explicitly on those sites.