We’ve been through it with Reddit and LinkedIn ads, so today it’s time to take you through how I set up Meta ads for MyFBAPrep.
I was the least excited about this platform, and didn’t expect too much from it. Meta has been around a long time, which means their ad setup is more complex with a lot of competition. In addition, they’re known to be best for a B2C audience, rather than B2B.
However, the learning process for Meta was my favorite of the three thanks to my teacher and our ads consultant, Katherine Schneider.
Quick reminder, I set up Reddit myself with later input from our Reddit account manager, and set up LinkedIn ads alongside a trainer from an agency.
I can confidently say that working directly with an expert and consultant is the best of the three options, with self-taught coming in second, and an agency trainer in last place. Although I liked who I worked with, there was too much segmentation among the agency skillset and I only worked with one person who was laser-focused on ads, which meant that when we had to set up analytics (to better track ad results) they could no longer help me and tried to refer me to someone else in their agency (at an additional cost).
I may write up an overview of all the channels once we decide which to keep or drop, but for now here’s how we set up Meta ads!
Table of contents
Planning and preparation
Katherine came equipped with a planning doc! If you’ve seen my template library, you know I love a good planning doc.
We used the document to cover guidelines and collate all our key information and resources.
The planning document included;
- Kick-off date (January 2, 2025)
- Our daily budget (we discussed our monthly budget beforehand, which she divided by 30 to get this number)
- Starting ads (we wanted to start with 5 initially; 3 images, 1 video, and 1 GIF)
- Formats for the ads (PNG, MP4, and GIF)
- Ad sizes needed (1:1 | 1080×1080 px & 9:16 | 1080×1920 px – also an optional 1920×1080 px just for images)
Then we brainstormed and filled in our creatives together, fixed conversion tracking, and set up audiences, exclusion lists, retargeting lists, and forms.
Creatives
I came with a few images and videos we could use for inspiration, and Katherine was able to consult on how to adjust them to perform better as ads. For example, she picked out three images we could test and had me move the headline to the top, main graphic to the middle, and our logo to the bottom of the image.
We also turned to ChatGPT for some headline ideas to AB test, and came away with 4 that we really liked.
- You Sell. We’ll Prep.
- Save Time, Sell More
- Get Amazon Ready
- Hassle-Free FBA Prep
She had no notes on the video, so I sent that for resizing along with the image requests.
Here’s a sample of what we ended up with.
Tracking
Next, while we waited for the images and videos to be adjusted and resized, we set up the Facebook Pixel using Google Tag Manager and GA4.
First we created a new Thank You page that visitors would redirect to once they took our key action (submitted the contact form).
Then we went into the Facebook Pixel, since it was already installed via Google Tag Manager, and navigated to Events Manager > Custom Conversions > Create custom conversion.
This is where we were able to utilize our thank you page URL to track.
This allowed us to add a new event in Google Tag Manager that we could mark as a lead for the Meta Pixel to read.
Audiences
Then we had to set up our audience, and the more ICP lists we had the stronger we could start. Fortunately I had a target ICP list from our co-founder, which gave us a little over 6,000 names and emails to create a lookalike list from.
To do this, we went to Audiences > Create a lookalike audience.
Then selected Create new source > Custom audience to upload our list.
To create the list, we checked Meta’s CSV template (Download file template) to make sure our headings matched their requirements (ex. “first name” had to be “fn”).
Then uploaded our list, matched columns, and confirmed.
After uploading the list, Katherine recommended keeping the lookalike audience set to the top 1% match. She mentioned for a niche industry like ours, you don’t want to go too wide to ensure relevance.
Here’s the lookalike list we ended up with;
Tip: Include the number of list values/rows in your title, because Meta doesn’t automatically show you how many people were in custom lists you’ve uploaded.
Exclusions
We didn’t want to waste any ad spend retargeting someone who already filled out our form, so we set up a custom list using the Pixel to track anyone who converted (submitted the contact form) within the last 180 days to exclude them from future ads.
To do this, we went to Ads Manager > Audiences > Create audience > Custom audience.
We set the Source to our Website, since the Pixel is set up and can see who has interacted with our form.
Then we need to set up the website custom audience form.
The event we want to track is called a Lead, which we set up our Google Tag Manager to track form submissions as an event.
We set our audience retention to 180 days (currently the most you can do) and named it so we could easily remember what the list is tracking.
Then we uploaded a custom list of everyone who has historically filled out our form so we aren’t sending ads their way.
To do this, we went to Ads Manager > Audiences > Create audience > Custom audience. This time, we chose Customer list.
You’ve seen how list uploads go, so I’ll skip repeating the steps. We named it “Exclusions list – [file name]”
We could now use these two lists when creating ads to avoid targeting anyone on them.
Retargeting
To create a retargeting audience, we created a custom audience of anyone who visited our website in the past 180 days (the maximum lookback period).
Go to Audiences > Create audience > Custom audience > Website > Next.
Then, set events to All website visitors, and set Audience rentetion to 180 days.
You can also create audiences of anyone who watched a video ad for more than 3 seconds, or anyone who interacted with your Instagram or Facebook ads in the past 60 days.
We then used these audiences with a duplicated campaign to create our retargeting ads.
Tip: When starting out we grouped all of our retargeting audiences together into one campaign. Once you have more data, you can split these audiences off and test a 60 day website visitor lookback, or separate out anyone who has interacted with either your Facebook or Instagram. You can even set up retargeting content to deliver based on which ads someone has already seen.
Native Facebook forms
We recreated our contact form in Facebook. To do this, in your Ads Manager, go to Manage > Instant Forms.
A few tips in creating a Facebook-native form;
- Once you publish you can’t make changes, so keep it in a draft.
- Name it a version, since if you want to change it you need to clone and make your changes.
- We kept the phone number requirement in, which would decrease leads but likely increase quality.
Ad setup
The buckets for Meta ads are;
- Campaigns – Can be grouped by event (ex. BFCM), promotion (ex. summer sale), TOFU, BOFU (ex. has visited the website), or a testing campaign where you test new ads. You can set budget on the campaign level, then drill down by ad set.
- Ad sets – Can divide by media type (image or video), audience, or other AB tests. You can also set minimum and maximum budgets at this level.
- Ads – Individual ads where you select the accounts to run the ad on, upload assets, set up text, CTAs, and UTM parameters. Usually you want no more than 5 ads turned on per campaign.
On a small budget, it’s better to start with fewer ads and then rotate in new ones, otherwise you aren’t devoting enough spend to see any results.
Creating a campaign
To start off, create a campaign by going to Campaigns > + Create
We chose the Auction buying type and Leads campaign objective.
We chose manual setup, because we wanted to use our exclusion lists.
Then we wanted to start with TOFU (top of the funnel) campaigns, so we named it accordingly. The naming convention for campaigns that we used is: TOFU_Leads_Evergreen_V1
- TOFU – Stage of the funnel the campaign is targeting (other option is BOFU. MOFU is not as common).
- Leads – The goal of the campaign. Other options are Awareness, Traffic, Engagement, App promotion, and Sales.
- Evergreen – Specifies the lifecyle or focus of the campaign. Other examples here could be Testing, BFCM or Q4.
- V1 – Once a campaign has been named and parameters are entered, changing the name won’t change the parameters. So best practice is to create a copy of the campaign and then name it V2, then adjust the rest as needed.
We turned on the Advantage campaign budget option so we could add budget at the campaign level. So if we have multiple ad sets under a campaign, it’ll split the total campaign across the ad sets. If this is turned off, we would set budget at the ad set level instead.
Creating an ad set
Then we went into individual ad sets. For ad set naming, you want to use audience, breakdowns (in this case we didn’t), and location.
We named our first ad set AllLists_LAL1%_US and set our website as our conversion location.
Then we set our performance goals to max number of conversions on the website, tracking leads.
We set our target audience to the USA, and switched to original audience options instead of the Advantage+ automation. Katherine mentioned the Advantage+ option could be good for an eCommerce or B2C company, but in B2B it’s best to set your own audience.
After clicking Use original audience to get the original audience options, we could set audience to our pre-build lookalike 1% audience and use our exclusions list.
We also set ages to start at 25 rather than 18. Here’s what our audience setup looked like once we were done with the customizations.
Then we updated the placement settings.
We opted for manual placements to have more control of where our initial ads showed up. We also opted out of the Audience Network option, which would show ads on non-Meta-owned platforms, and Messenger ads.
As for where our ads could show up on Meta properties, we selected Feeds, Stories and Reels, In-stream ads, and Search results.
Creating an ad
Finally it was time to create the ad itself. First we named the ad with the format, tagline, and their corresponding asset ID. In this case, Video_AsEasyAs_M05.
We selected Manual upload, Single image or video, and turned off Mult-advertiser ads to avoid Meta auto-resizing our assets in any case.
Then we selected our ad creative, in this case a video.
We uploaded the square and vertical sizes of our video.
We went forward with the square version and then replaced the vertical asset where needed.
Then, be sure to check all of the optimizations before turning on your ad. We turned most of our extra ones off, like ad overlays, text improvements, and site links.
One best practice is to disable anything wherein Facebook automatically resizes or adjusts your graphics.
After that, it was time to add copy under the creative.
We added five headlines, one description, and two different primary texts.
- Headline: Title under the image (“Stress-Free FBA Prep”)
- Description: Copy under the headline (“24-48 hour FBA prep turnaround”)
- Primary text: Post text accompanying the ad (“Tired of the hassle…”)
- We used the same bullets but tested the text that appeared above the fold
- We also re-stated the landing page URL at the bottom of the primary text, in case visitors wanted a link there rather than in the CTA
Next, we entered our landing page URL and then removed all of the automatically-added site links. Those could be good in the future, but we didn’t want to test those now.
Then we hopped down to Tracking to add our URL parameter.
We used the Build URL parameter tool to set ours up.
There’s a dropdown you can use to select each of your options.
This is what we ended up with after working with the tool: utm_source={{site_source_name}}&utm_medium={{placement}}&utm_campaign={{campaign.name}}&utm_content={{ad.name}}
- Site source name – That will be Instagram or Facebook
- Placement – These will be stories, reels, or other areas our ads appear
- Campaign name – Will help us find which campaign the ad was under
- Ad name – Will be the individual ad
It’s good to note that once you publish your ad, this stage is where all the names of your current campaign, ad sets, and ads are locked into the UTM parameters. So even if you edit the names in the dashboard, your UTMs will follow the old names.
Then, we hit publish and our first ad was live! We could then duplicate this ad to add our alternative creatives.
Tip: When duplicating ads, go through the settings and double check things like the CTA buttons to make sure everything still looks good.
Setting up retargeting campaigns
To set up a retargeting campaign, we duplicated our TOFU campaign, swapping “TOFU” for “BOFU” and adjusted our audience to include;
- Anyone who visited our website in the last 180 days
- Anyone who engaged with our Facebook or Instagram pages in the last 60 days
- Anyone who viewed a video of ours for more than 3 seconds in the last 180 days (normally this would be 30 or 60 days, but since we were just starting we did 180 days)
We then double-checked all the settings of the campaign, set a budget (this is usually 10% of the main campaign), and then named our adset so we could see our retargeting audience at a glance.
Tip: For BOFU ads, pay attention to the frequency that your ad is shown. You don’t want to go over 3, meaning one person is shown your ad no more than 3 times.
If you start to see your frequency reach 3, either lower your budget or rotate in new ads to prevent someone feeling like your ad has turned into spam.
Reporting and organization
Finally, we got our reporting documents lined up and ready to track our results.
Katherine set up a tracking document for us to capture:
- Ad ID (for each new ad variation, copy it and give it a new ID)
- Media type (image, video, GIF)
- Name & Link (hyperlink to the file in Google Drive)
- Hook
- Spend
- CTR
- CPC
- Leads
- Cost/Lead
- Launched
- Updated
I uploaded all of our ad creatives into a Google Doc, linked to it from the “Name & Link” column, and then filled in the initial 5 ads we were starting with. I also named them by size (1080×1080 or 1080×1920).
Here’s what our initial batch upload looked like:
She also recommended the following customized columns for our campaign views;
- Delivery
- Ad Set Name
- Budget
- Amount spent
- Results
- Cost per result
- CTR (all)
- Link clicks
- CPC (cost per link click)
- CPM (cost per 1,000 impressions)
- Frequency
To set these up, go to Columns > Customize columns.
Then add what you want to track and Save as column preset.
Here’s what that column setup looks like:
Finally, Katherine set up a working document to track all of the tasks we had to do relating to paid ads. This document included;
- Date Completed
- Platform
- Update
- Status
- Notes / To Do
Here’s what our initial task list looked like:
And that’s where we are now! Everything has been set up and is running smoothly, with check-in and reporting calls twice a week. I’ll be back with an update once we see some results.