5 Problems Thai SMEs Hit When Running Facebook Ads Themselves

5 Problems Thai SMEs Hit When Running Facebook Ads Themselves

eCommerce MarketingSeptember 8, 2026
By Antonio Fernandez

TL;DR

  • The pixel fires in the browser, so ad blockers, tracking prevention and app to browser handoffs drop events; the Conversions API sends the same events from your server and deduplicates them against the pixel using a shared event ID.
  • Meta documents roughly 50 optimisation events per ad set per week to leave the learning phase, and a significant edit to budget, targeting, creative or the optimisation event restarts that clock from zero.
  • A broad audience is not worse targeting, it gives delivery room to find buyers, but it only works when the ad set can reach enough events; a narrow audience raises frequency and cost per thousand impressions instead.
  • Attribution windows are finite, commonly 7 day click and 1 day view, so an order that closes in chat, by phone or on another device days later stays invisible unless you send it back as an offline or server event.

When you run Facebook ads yourself and the budget disappears without orders, the cause is usually not weak creative or a weak product. It is that the system never received a clear signal about who actually bought, so the algorithm optimises toward the people who click most easily rather than the people who pay most easily. That is how an account ends up with healthy click and comment numbers and flat sales, month after month.

This article breaks the failure into five problems that recur for small businesses in Thailand. For each one it explains what the problem does to delivery in mechanical terms, where to open the report in Ads Manager or Events Manager to confirm you have it, and what a correct configuration looks like step by step. It closes with a 12 point ad account setup checklist to run before you top up the budget again.

A common hypothetical situation

For example, assume a small online shop decides to run its own ads. The reason is simple: the boost button sits right there and takes a few seconds to press. The first week the numbers look encouraging. Reach climbs, people react, people message to ask about price and shipping. By the third week the budget is gone, and the question nobody can answer is how many of those messages turned into paid orders.

The report can say how many people saw the ad, how many clicked, and what each click cost. No line in it says how many bought, because nobody ever configured it to say that. This is the point where many owners conclude that Facebook Ads does not work for their business, while the real problem sits somewhere else entirely.

The situation above is hypothetical and used to describe the shape of the problem. It is not any specific business, and it deliberately carries no budget figure. What repeats across accounts is the structure of the mistake, not the numbers.

Five problems Thai SMEs hit when running Facebook ads alone

These are ordered by the sequence in which they should be fixed, not by severity. The first one underpins the other four. If the data going back to Meta is incomplete, changing audiences or swapping creative is steering with your eyes closed.

Not understanding why the pixel and the Conversions API matter

The pixel is code that runs in the visitor's browser. When someone views a product, adds to cart or confirms an order, that code fires an event back to Meta. The weakness is that browser side work is easy to interrupt. Ad blockers, tracking prevention settings, opening a link inside an app and being handed off to an external browser, or a dropped mobile connection all cause events to vanish quietly, with no warning anywhere in the interface.

The Conversions API is the second path. It sends the same events from your own server straight to Meta instead of trusting the customer's browser to do it. When both paths run together, the requirement is to attach the same event ID on both sides so Meta can recognise the two arrivals as one event and count it once. That process is deduplication. If the event ID is missing, your numbers inflate toward double and the system learns from data that is wrong, which is worse than having no data at all.

To verify this, open Events Manager, select your data source and check three things. First, the overview showing which channel each event type arrived through: if you only see Browser, the server side is not connected. Second, the section reporting what share of events was matched and deduplicated. Third, the event match quality score, which rises when you pass hashed parameters such as email, phone number, the click identifier fbc and the browser identifier fbp.

Two more settings belong in the same pass. Verify your domain under Brand Safety, and order your events in Aggregated Event Measurement so that the revenue event sits at the top. For users who declined tracking on iOS, only the highest priority event is reported back. If page view holds the top slot and purchase sits near the bottom, purchases from that group of users never reach your reporting at all.

The mechanical cost is straightforward. The fewer events that return, the fewer examples the system has, and the longer it takes to find the pattern that describes a buyer. On an account without a large budget, that delay can consume the entire month.

Setting the audience too broad or too narrow

Broad and narrow have no fixed correct value. They are relative to how many events an ad set can produce per week. A broad audience is not sloppy targeting, it gives delivery room to find buyers on its own, and it works when the ad set has enough budget to generate events the system can learn from. Pair a very broad audience with a thin daily budget and the system keeps exploring without ever reaching a conclusion, which is why cost per result swings every day.

The opposite failure is stacking interests until only a few tens of thousands of people remain, or targeting a single small district. Frequency then climbs quickly, the same people see the same creative several times within days, click through rate falls, and cost per thousand impressions rises because the auction inside a small pool is denser.

The invisible version of this problem is bidding against yourself. When several ad sets with overlapping interests run at the same time, in one campaign or across campaigns, the system lets one win the auction and suppresses delivery on the other, so budget quietly pools in a single ad set. Check the audience overlap tool under Audiences, and read the frequency column alongside the delivery column at ad set level.

Thailand adds a specific wrinkle. Interest pools built around Thai language terms are usually thinner than their English equivalents, so highly specific interest stacking risks producing an audience too small to learn from. The safer starting point is an audience wide enough to breathe, with language and delivery area matched to where you can actually ship, and conversion signal doing the filtering rather than manual selection.

A correct setup usually looks simpler than people expect: fewer ad sets so each one collects enough events, broad audiences as the main prospecting engine, engaged audiences separated into their own remarketing campaign, and recent buyers excluded from prospecting so you stop paying to reach people who already bought.

Creative that does not stop the scroll in the first 3 seconds

On feed and on Reels people move fast. What decides whether an ad earns more time is the first frame and the first line of audio, not the offer sitting at the end of the clip. A lot of small business advertising opens with a logo, then a static product shot, and reaches the actual message around second seven, by which point most of the audience has scrolled past.

Mechanically, early retention is a signal the system uses to judge whether this piece deserves more impressions. When people scroll past unusually fast, cost per thousand impressions rises because delivery has to pay more to place content users do not want. Cost per click and cost per order rise along the same chain.

Check it by breaking the report down by placement, comparing three second video plays against impressions, and reading ThruPlay next to them. If the three second figure is unusually low compared with other pieces in the same account, the opening is the problem, not the audience. If Reels behaves very differently from feed, the asset has not been cut for the vertical aspect ratio.

Thai language creative has its own constraints that do not survive a direct translation from English. On screen text needs to be shorter than you would expect, because Thai script carries vowels and tone marks above and below the line and eats vertical space, which makes long lines hard to read on a phone. Price and shipping terms are the details Thai buyers look for first, so burying them at the end of a clip loses people who were ready to order. Spoken lines should sound like speech rather than written sentences read aloud.

The test that produces real information is three to five genuinely different openings per offer: start with the customer's problem, start with the price, start with the product in use, start with a before and after comparison. Five versions of the same clip with a different caption colour never answers the question of what makes someone stop.

Editing or killing campaigns before the learning phase ends

Every new ad set enters the learning phase, the period when delivery is still spread out while the system collects examples of who responds. Meta documents the threshold at roughly 50 optimisation events per ad set per week to exit that phase. While an ad set is in it, cost per result swings more than usual, and the first three days are not a fair sample of long run performance.

The most common self managed mistake is seeing a bad first day and going in to fix it. Edits the system treats as significant, such as changing targeting, changing creative, changing the optimisation event, changing the bid strategy, or moving the budget in a large step, restart learning from zero. An ad set that gets edited daily never leaves learning, and pays the price of the most expensive phase permanently.

Read the delivery column at ad set level. "Learning" means the sample is still being collected. "Learning limited" means that ad set cannot reach the threshold with its current budget and structure, which is a different problem with a different fix. The first needs time. The second needs consolidation into fewer ad sets, a wider audience, more budget per ad set, or optimisation toward an event that happens more often, such as conversation started or add to cart.

The working practice that limits the damage is to set a decision window in advance. Before launch, write down how many days you will observe and which number decides the outcome, then leave it alone unless something genuinely breaks, such as a dead link or a disapproved ad. Raise budget in small steps with gaps between them rather than doubling in one move, and when you want to test new creative, add it as a new asset or a new ad set instead of editing the one that is already running.

Not tracking conversions that happen after the browser closes

Plenty of real selling in Thailand does not finish on a web page. Someone sees the ad on a phone, opens a chat to ask a question, continues the conversation the next day, then transfers payment or chooses cash on delivery. Some come back on a work computer, some have a family member place the order. None of those paths fire a purchase event in the browser that clicked the ad, so the system has no way of knowing that the ad produced revenue.

Attribution windows compound this. The common default is a 7 day click and 1 day view window, so an order that closes on day eight or day ten is not credited to the ad that started it. The higher the price and the more comparison shopping involved, the wider that gap grows, and the worse the reported numbers look compared with reality.

The fix is to send the data back yourself. Events that happen off the website can be sent through the Conversions API or uploaded as an offline event set, carrying hashed identifiers such as phone number or email along with the time of the transaction and its value, so Meta can match them back to people who saw or clicked the ad. Shops that close in chat should capture the ad referral parameters at the moment the conversation starts, so revenue can be traced back to a specific piece.

The other half is making the website measurement consistent across the whole stack. If order counts in your back office, your analytics tool and your ad reporting never agree, arguments about performance never end. Standardising events and parameters once is durable work, and it is the core of a GA4 measurement setup. It belongs before a budget increase, not after the budget is gone.

5 Problems Thai SMEs Hit When Running Facebook Ads Themselves

How a professional team works differently

The first difference is not skill at picking audiences, it is sequence. A team doing this professionally does not start by building campaigns. It starts by checking whether the events you need are actually arriving, whether the domain is verified, whether event priority is ordered, and whether the reported numbers reconcile with the back office. That audit takes days and determines the quality of every baht spent afterwards.

The second difference is setting benchmarks before spending. Before launch, an acceptable cost per order is worked backwards from price and margin per unit, then translated into ad set level thresholds for cost per conversation started or cost per add to cart. With those written down, the decision to stop or continue follows an agreed number instead of the mood on a bad day.

The third is structured testing. Instead of changing several things at once and guessing which one worked, tests are queued, run one variable at a time, given long enough to clear the learning phase, and recorded so the account keeps a memory and nobody retests a question that already has an answer. That routine is the everyday work of a team running a social ads programme.

The fourth is looking across channels. Many people who see a Facebook ad go and search the brand on Google before deciding. If nothing is waiting for them there, demand you paid to create leaks away. Complete planning looks at both sides at once and asks how budget should split between creating demand and capturing demand that already exists, which is why plenty of businesses run Facebook alongside Google Ads campaigns rather than choosing one.

The last difference is continuity. An ad account is not a build once job. Creative fatigues as the same people see it repeatedly, auction costs move with the season and with new competitors entering. A weekly review that reads the same set of numbers every time catches those shifts before they eat a month of budget. Businesses without the time for that cycle often hand it to an outside team through a Facebook Ads service, and keep their own hours for selling and shipping.

A 12 point checklist for a correctly configured ad account

Run this list against your own account before the next top up. Each item says where to look so you can confirm it rather than assume it.

  1. The pixel fires every step of the purchase path. In Events Manager, confirm that view content, add to cart, initiate checkout and purchase all arrived in the last seven days, not just page view.
  2. The Conversions API is connected and deduplicating. The event view should show both browser and server channels, with events marked as deduplicated on a shared event ID.
  3. The domain is verified. Check Brand Safety for verified status on your main domain, otherwise you cannot set event priority at all.
  4. Event priority puts revenue at the top. Open Aggregated Event Measurement and confirm purchase, or a new customer event, sits in the first slot.
  5. Event match quality is not low. Read the match score per event and, if it is weak, add hashed email, phone, fbp and fbc parameters.
  6. The structure does not scatter events. Count active ad sets, divide weekly account events by that number, and consolidate if the average sits far below the 50 event threshold.
  7. No self competition from overlapping audiences. Use the audience overlap tool and look for ad sets that are being suppressed and barely spending.
  8. Recent buyers are excluded from prospecting. Check the audience exclusion field on every prospecting ad set, not just the first one.
  9. At least three genuinely different creative openings exist. Break the report down by asset and confirm the three second view figures actually differ between them; if they are identical, nothing is being tested.
  10. Assets are cut per placement. Confirm a vertical ratio exists for Reels and Stories, separate from the square used in feed, instead of one file everywhere.
  11. The attribution window is chosen deliberately. Open the campaign attribution setting and compare a short window against a longer one so you know what your numbers cover.
  12. Off site sales have a route back into the system. If you close in chat or take cash on delivery, an offline event set or a server side feed has to be running for real.

Problems matched to what you would see in the report

The table below pairs each of the five problems with the symptom you would actually notice in reporting, and with the thing to fix first in that case.

Problems matched to what you would see in the report
ProblemSymptom in reportingFix first
Pixel and Conversions API incompleteClicks and messages arrive but the purchase column is empty or far below the back office countConnect the server side, match event IDs, verify the domain and reorder event priority
Audience too broad or too narrowCost per result swings daily, or frequency climbs fast alongside a rising cost per thousand impressionsConsolidate ad sets, widen the main audience, and split engaged users into their own campaign
Creative does not hold the first 3 secondsThree second video plays are low against impressions and cost per click is high across every assetBuild three to five genuinely different openings and cut assets to each placement ratio
Editing before the learning phase endsThe delivery column sits on learning or learning limited for long stretchesSet a decision window, stop mid flight edits, and raise budget in small steps
Off site conversions not capturedBack office revenue is visibly higher than ad reporting every single monthSend offline events back in and capture referral parameters when the conversation starts

What this means specifically for Thai SMEs

Small businesses in Thailand face two constraints large brands do not. Monthly budget has a hard ceiling, which makes learning in the wrong direction far more expensive. And the person managing ads is usually the same person answering chat, packing orders and dealing with suppliers, so the hours left for reading reports are limited. Together those two facts mean a simple structure somebody actually checks beats a sophisticated one nobody has time to maintain.

Buying behaviour differs too. Asking questions in chat before ordering is more normal than completing checkout unaided. The questions that arrive are almost always the same: final price, shipping cost, delivery time, and whether the item is in stock. Put those answers in the ad and on the landing page from the start and message volume drops while message quality rises, which helps both ad cost and the time of whoever replies.

Destination choice matters as well. Many shops send traffic straight into chat because it closes more easily, but without sending purchase data back, that setup teaches the system who likes to message rather than who likes to buy. A shop with a full online storefront should run both routes, letting ready buyers order directly while hesitant ones can still ask, which is the same question as planning ecommerce marketing across the whole path rather than one step of it.

Finally, expectations about time. An account that has just fixed its measurement will not perform the next morning, because the system has to accumulate the new events first. Planning budget in four to six week blocks and reading weekly trends instead of daily ones gives a truer picture, and stops you switching off something that was about to start working.

FAQ

How much budget is enough to run Facebook ads

Enough budget is the amount that lets one ad set approach roughly 50 optimisation events per week, not a fixed number that applies to every business. Work it out by estimating an acceptable cost per result from your margin per unit, then multiplying by the events you need weekly. If the figure lands beyond your means, the answer is not to slice the budget thinner across more ad sets. It is to run fewer ad sets so the money concentrates, or to optimise toward an earlier event that occurs more often, such as conversation started, and move up to purchase once volume supports it.

Can I keep running ads myself without hiring anyone

Yes, if you have a consistent few hours a week and you finish the technical setup before adding budget. The hard part is not creating campaigns, it is installing complete events, connecting the server side feed, and having the discipline to leave an ad set alone while it is still learning. A middle path that works well is paying someone to build the measurement and account structure once, then running the daily management yourself, because setup is one time work that is expensive to get wrong while routine management can be learned from your own numbers.

How long before I know whether a campaign is working

Give it at least until the ad set exits the learning phase, which is measured in accumulated events rather than calendar days. In practice that means roughly one to two weeks for an account with steady event volume, and longer for products people take time to decide on. While you wait, watch the upstream signals: three second view rate, click through rate and cost per add to cart. Those move before purchase numbers do, so they tell you early whether the creative and the audience are doing their job.

Is installing the pixel on its own enough

It is not enough for an account that needs to measure sales properly, because browser side events can be blocked or lost in several ways. Sending the same events from your server in parallel gets more data back to Meta, on the condition that both sides carry a matching event ID so the system can deduplicate. Without deduplication your counts inflate and the system optimises against a distorted picture, which is a worse position than under reporting.

How do I measure results if I sell through chat or cash on delivery

Send closed orders back into the system as events, with hashed identifiers such as phone number or email, the time of the transaction and its value. You can do that by uploading offline event sets in batches or by feeding them automatically from your back office. Two things need to be in place alongside it: capturing the ad referral parameters when the customer first messages, and counting only orders that were actually paid, so cancelled cash on delivery parcels do not become a false signal the system learns from.

If several checklist items fail at once, the cheapest order is to fix measurement first and only then revisit audiences and creative, because those two cannot be judged while the numbers deciding their fate are unreliable. If you would rather have someone work through all twelve points with you and rebuild the account structure at the same time, the Relevant Audience team can look at your current account first and say what deserves fixing in what order.

Antonio Fernandez

Antonio Fernandez

Founder and CEO of Relevant Audience. With over 15 years of experience in digital marketing strategy, he leads teams across southeast Asia in delivering exceptional results for clients through performance-focused digital solutions.

Share to:
Copy link:

Read us often? Add Relevant Audience as a preferred source so our articles surface more in your Google results.