Overview
Meta — Facebook and Instagram — is a demand creation channel. Nobody on Instagram was searching for your sunset kayak tour; your Ad has to make them want it. That makes Meta very different from Google, and it is why the two need different campaign structures, different creative and different expectations.
This guide assumes you have read Paid Ads: How to Approach Advertising, and in particular §1: optimise for bookings, not clicks.
1. Connect your Meta Pixel to Spotinga
Your pixel is how Meta learns which of your Ads produced bookings. Without it, the algorithm is bidding blind and every campaign is guesswork.
Find your Pixel ID
- Go to Meta Events Manager.
- Data Sources → select your pixel (create one if you have none).
- The Pixel ID is shown at the top of the Settings tab — a long number.
Add it in Spotinga
This needs the Marketing add-on and an administrator of your organization.
- In the Host app, go to Organization → Settings → Integrations → Advertising.
- Click Connect on the Meta card.
- Paste your Pixel ID. Optionally add a Conversions API access token (generated on the same pixel’s Settings tab in Events Manager) and your Ad account ID.
- If you run several stores, choose which ones this pixel covers — leave it empty for all.
- Choose whether Spotinga’s own pixel keeps running on your store pages, and whether your results may count toward anonymised platform benchmarks. Your choice is recorded and you can change it at any time.
- Save.
Your pixel now fires on every page of the stores it covers. Each event goes to your pixel and Spotinga’s separately, so your Ad account sees only your own traffic and bookings.
In the Marketing app, Check with Meta sends a harmless test event through the Conversions API and confirms your token can reach this pixel. It is tagged as a test, so it lands in the Test Events tab and never counts as real data. Because it only sends an event, it needs no extra ad-account permission — the Conversions API token on its own is enough. (If you have also connected an Ad account for spend sync, the check additionally shows when Meta last received any event from the pixel.)
Verify it before you spend
Do not skip this. After Check with Meta passes, use the Test Events tab in Events
Manager, open one of your product pages, and confirm you see a ViewContent event arrive.
Then make one real test booking and confirm a Purchase arrives with the correct value and
currency.
A Purchase event with a value of 0, or no Purchase event at all, means your Ad account cannot optimise for bookings. Fix this before running a single ad.
Common reasons the check fails
- “This token cannot send events to this pixel.” The Conversions API token belongs to a different pixel or Business. Generate it on this pixel’s Settings tab in Events Manager.
- “The token is invalid or has expired.” Generate a fresh token and paste it in again.
- The check passes but no events appear. The destination is scoped to stores other than the one you are browsing — open the destination and widen or correct its store scope.
What Meta receives
| Event | When it fires |
|---|---|
PageView |
Any page on your store |
ViewContent |
A product page |
CustomizeProduct |
A date, time or party size chosen on a product |
AddToCart |
A product added to the cart |
InitiateCheckout |
Checkout opened |
AddPaymentInfo |
A payment method chosen, about to pay |
Purchase |
Payment confirmed — with booking value and currency |
Subscribe |
Someone joined your store’s mailing list |
Optimise your campaigns for Purchase. The steps before it are useful signals for Meta, but
they are also easy for automated traffic to trigger — a campaign told to find “add to carts”
will find plenty of them that never become bookings.
Purchase is sent from both the browser and our servers, tagged with your booking reference
so Meta counts it once. That matters: browser-only tracking loses every booking made by
someone running an Ad blocker, or who closed the tab before the confirmation page loaded.
See what each campaign earns
Spotinga reports spend, bookings, revenue and ROAS per campaign from your own booking records, under Marketing → Ad campaigns and Marketing → Reports. Two things make it work:
-
Tag every Ad link with the campaign. In Ads Manager, at the Ad level, open URL parameters and add:
utm_source=facebook&utm_medium=paid&utm_campaign={{campaign.name}}&utm_content={{ad.id}}Meta fills in the campaign name and each Ad’s ID for you. The last part is what lets Spotinga tell you which Ad earned each booking, not only which campaign.
Or let Spotinga build the link: Marketing → Ad links → Ad link — pick the product and the Ad campaign, and paste the short link into your ad. Add
utm_content={{ad.id}}in URL parameters as above, and each Ad still reports on its own. A booking is credited to a campaign when its Ad click carried that campaign’s name (or its ID, or theutm_campaignvalue you set on the campaign in Spotinga) and the booking was paid within 30 days of the click. -
Record what you spent. Either:
- Let Spotinga read it from Meta every night. In Organization → Settings →
Integrations → Advertising → Edit, add your Ad account ID and a Marketing API
access token with the
ads_readpermission (a system user token from Business Settings - not the Conversions API token), then switch on Read Ad spend from Meta every night. Your campaigns and their daily spend appear by themselves. - Or enter it yourself: per day on a campaign, or by importing a daily export from Ads Manager (breakdown by day, with Reporting starts, Campaign name and Amount spent) under Marketing → Ad campaigns → Import spend.
- Let Spotinga read it from Meta every night. In Organization → Settings →
Integrations → Advertising → Edit, add your Ad account ID and a Marketing API
access token with the
Revenue is booking value before tax, less refunds, in your organisation’s currency. Meta’s own purchase count is shown beside ours but never added to it - see the habits below for why they differ.
Marketing → Reports also breaks the same numbers down by product and by Ad, and its Booking funnel tab shows how many shoppers chose a date, added to cart, started checkout and chose how to pay - with anything that looked automated counted separately, so a flood of bot clicks shows up as junk rather than as interest.
2. Events vs evergreen tours — this changes everything
This is the most important section of this guide. Meta suits time-bound events far better than it suits evergreen tours, and running both the same way is why most operators conclude “Facebook Ads don’t work for us”.
| Events (a concert, a festival, a seasonal tour, a limited departure) | Evergreen tours (runs daily, all year) | |
|---|---|---|
| Why Meta works | Genuine urgency — a real deadline nobody can argue with | No urgency; the visitor can always book “later”, and later never comes |
| Audience | Local and regional. Someone in the city, or within driving distance | Travellers planning a trip — often in another country, weeks or months out |
| Timing | Heavy spend in a tight window before the date | Steady, always-on spend |
| Creative | Lineup, date, venue, atmosphere, “last tickets” | Experience, transformation, place, social proof |
| Main risk | Spending after the date is effectively sold out | Spending on people who will never travel to your city |
| Realistic ROAS | Higher — urgency converts | Lower — expect to lean on retargeting |
If you sell events
- Targeting is geographic first. Everyone within a sensible travel radius of the venue, broad age range. Interests are secondary — a local audience with a real date beats a perfectly-matched interest audience three countries away.
- Ramp the budget as the date approaches. Most ticket sales happen in the final two weeks; a meaningful share in the final 48 hours.
- Put the date in the creative, not only in the copy. It is the whole reason the Ad works.
- Turn it off the moment it sells out. Meta will keep spending happily.
- Use a deadline honestly. “Only 40 tickets left” works, once, if it is true.
If you sell evergreen tours
- Seasonality is your substitute for urgency. “Book before the summer slots fill” is a real deadline. Invent one if the calendar gives you one.
- Target travellers, not locals. Meta’s travel-intent signals, plus people who have recently engaged with your destination.
- Retargeting is where the money is. People who viewed a product page or started a checkout in the last 14 days are by far your cheapest bookings. Budget for this deliberately, not as an afterthought.
- Expect a long window. Someone who sees your Ad today may book in three weeks. Use a longer attribution window and judge on a longer period.
- Consider whether Google is the better first channel. If people are searching for what you sell, capture that demand first; it is cheaper.
3. Campaign structure
Keep it simple. Complexity starves every campaign of the data it needs to learn.
Campaign Objective: Sales. Conversion event: Purchase.
└── Ad set One audience. Budget lives here (or use campaign budget).
├── Ad Creative variant A
├── Ad Creative variant B
└── Ad Creative variant C
Recommended starting shape:
| Campaign | Audience | Budget share |
|---|---|---|
| Acquisition | Broad or interest-based, cold | ~70% |
| Retargeting | Viewed a product or started checkout in the last 14–30 days | ~30% |
Rules that matter more than they look:
- Objective: Sales. Conversion event: Purchase. Not Traffic, not Engagement, not Leads. This is the single setting that separates a campaign that produces bookings from one that produces a nice-looking click count.
- One conversion event per Ad set. Splitting the signal slows learning.
- Do not run five Ad sets on a small budget. Each needs roughly 20–30 purchases a week to exit the learning phase. Two well-funded Ad sets beat six starved ones every time.
- Let it run at least 7 days before judging, and do not edit budget, audience or the conversion event mid-flight — every significant edit restarts learning.
- Exclude existing customers from acquisition campaigns. You already have them.
4. Audience selection
Start with what you own. These are the highest-quality audiences available and they cost nothing to build:
- Website visitors — anyone who viewed a product page (your pixel builds this automatically once it has been live a few weeks).
- Checkout abandoners — started a booking, did not finish. Almost always your cheapest conversions.
- Past customers — uploaded as a Custom Audience. Use for repeat business, and as an exclusion on acquisition campaigns.
- Lookalikes of past customers — a 1–3% lookalike of purchasers (not of visitors) is the best cold audience most operators will ever find. It needs a few hundred customers to work properly.
Then go cold, in this order of preference:
- Geography + broad for events. Do not over-narrow.
- Travel intent + destination interest for tours.
- Interest stacks last. They are the weakest signal and the easiest to over-engineer.
Only upload customer data you are allowed to use for advertising. Someone who gave you their email to receive a booking confirmation has not necessarily agreed to be targeted with ads. Use your marketing consent records, not your whole contact list.
Building these in Spotinga. Marketing > Audiences makes 2 and 3 for you, and sends any CRM contact list, straight to your Meta Ad account. After that it builds lookalikes (4). It only ever sends customers who ticked “show me offers on Facebook and Instagram” when they booked or subscribed. The page shows how many people are in each list and how many of them agreed. Lists are re-sent every night, so anyone who changes their mind drops out within a day. Before your first audience:
- Your Marketing API token (Integrations > Advertising) needs the ads_management permission as well as ads_read.
- Accept Meta’s Custom Audience terms once for the Ad account. Spotinga links you to them if they are missing.
- Use Past customers as an Exclude audience on your Ad sets for new customers.
5. Avoiding wasted spend and bot traffic
A meaningful share of cheap Ad traffic is worthless — automated, accidental, or from people who will never travel to you. These settings and habits keep it out.
Settings
- Optimise for Purchase, never for link clicks or landing page views. Bots click. Bots do not complete payments. This is your strongest single defence.
- Review placements. Audience Network and some in-app placements generate cheap clicks with very low booking rates. If a placement is spending and never converting, exclude it — check the placement breakdown after your first two weeks.
- Exclude irrelevant geographies explicitly. “Worldwide” for a local walking tour is a budget disposal mechanism.
- Set “people living in this location”, not “recently in” or “travelling to”, for local events — otherwise you pay to reach people who were there once.
- Turn off automatic audience expansion until you have conversion data worth expanding from.
- Cap frequency on retargeting. Showing the same Ad fifteen times annoys more than it converts.
Habits
- Watch cost per booking, not cost per click. A campaign with a 0.10 CPC and no bookings is worse than one with a 2.00 CPC and a 15 CPA.
- Check the funnel, not just the top. Thousands of clicks, near-zero
ViewContentevents means the traffic never really arrived — a classic bot signature. - Compare Meta’s reported conversions with your own booking records in Spotinga. A large and growing gap means either a tracking problem or an attribution-window difference. Your booking records are the truth about money.
- Check cancellation rates by campaign. A campaign whose bookings cancel is not profitable, however good the ROAS looks.
6. Creative — what actually works for experiences
Creative is the largest single lever on Meta. A better audience improves results by percentages; better creative improves them by multiples.
Format
- Vertical video (9:16) first. Reels and Stories are where the reach and the cheaper inventory are. 15–30 seconds.
- Hook in the first 2 seconds. The view, the drop, the reaction, the food hitting the table. Not your logo. Not a slow drone approach.
- Shoot for sound-off. Most people watch muted — burn in captions.
- Real phone footage beats polished ads. Guests laughing, a guide talking to camera, the actual boat. Over-produced content reads as an advert and gets scrolled.
- Run 3–5 variants per Ad set and let Meta find the winner. Refresh when performance decays — every 2–4 weeks on a warm audience.
Content that converts for tours and activities
| Works | Why |
|---|---|
| The single most striking moment of the experience | Stops the scroll |
| A guest’s face reacting | People buy the feeling, not the itinerary |
| The guide talking straight to camera | Trust, and it is cheap to produce |
| User-generated clips and reviews on screen | Social proof beats claims |
| Before/after, or a “what you actually get” walkthrough | Answers the unspoken “is this worth it” |
Copy
- Lead with the outcome, not the logistics. “Watch the city go gold from the water” beats “2-hour guided catamaran cruise with licensed skipper”.
- Answer the three blockers fast: how long, how much, can I cancel.
- One clear call to action. “Book your spot” — not “learn more”, which is a click without intent.
- Price transparently. Hiding the price buys you clicks from people who will bounce.
- Add the real constraint: small groups, limited dates, seasonal. Only if true.
What to avoid
- Stock footage that is obviously not your experience.
- Text-heavy image Ads — they underperform video badly on Meta.
- Discount-led messaging as the default. It trains people to wait and it attracts the least valuable customers. Save it for genuine off-season pushes.
- Clickbait. It produces clicks and no bookings, and it teaches the algorithm to find you more people who click and do not book.
7. Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| “Check with Meta” says the token cannot send to this pixel | Token is from a different pixel or Business | Generate the token on this pixel’s own Settings tab and re-enter it |
| “Check with Meta” says the token is invalid or expired | The system-user token was revoked or lapsed | Generate a fresh Conversions API token and re-enter it |
| Check passes but no Purchase events | Pixel scoped to the wrong stores, or no test booking yet | Correct the destination’s store scope; make a real test booking — see §1 |
| Purchase events with value 0 | Currency/value not passing | Re-test; if still 0, contact support before spending |
| Nothing reaches Meta at all | Spotinga’s platform pixel is switched off for the destination | Turn the platform pixel back on, or confirm your own token is valid |
| Lots of clicks, no bookings | Optimising for the wrong event, poor placements, or an ad/landing-page mismatch | Optimise for Purchase; check placements and the landing link |
| Meta reports far more conversions than your booking count | Attribution window and view-through attribution — expected | Trust your own records for revenue; the gap is a health signal |
| Campaign stuck in learning | Budget too low, or too many Ad sets splitting the conversions | Consolidate Ad sets; raise budget to clear the learning threshold |
| Good first week, decline afterwards | Creative fatigue | Refresh the variants |
