Client name withheld under NDA.
The chain had six outlets and sold frames, lenses and contact lenses, with a booking page for appointments at each shop. For two years it had paid one full-service agency a retainer of S$6,500 a month. That fee covered SEO, Google and Meta ads, social posts and design, and the chain also put about S$3,300 a month into ad spend. The agency was friendly and responsive, and its monthly report was a polished deck with reach, impressions, followers and clicks. The trouble was what the deck could not say.
Nobody could tell which channel produced appointment bookings. The report showed one combined result, and the agency had not set up tracking that separated phone calls, booking page submissions and walk-ins by source. The owner was not unhappy with the people. She wanted to see what each part of the spend was doing, and she asked us to look at the whole picture as a digital marketing agency in Singapore that would report by channel. We measured the starting position first, and found that only about one fifth of spend could be tied to a booking.
| Metric | Month 0 |
|---|---|
| Appointment bookings per month | 118 |
| Cost per booking | S$83.05 |
| Total monthly marketing cost (fees and ad spend) | S$9,800 |
| Outlets in the top 3 local results | 2 |
| Google Business Profile actions per month (calls, directions, website clicks) | 1,420 |
| Share of spend with a measured result | 20% |
We reviewed the old accounts, which the chain owned, and listed what each part of the retainer had been doing. Then we set up tracking for the three ways a customer books: the booking page, a phone call from the website or the Google listing, and a walk-in who mentions an offer. Every outlet got its own tracked phone number and booking link. We kept the old design files and the brand colours.
You cannot judge a channel you cannot see. Until each booking carried a source, a cost per booking would have been a guess. The old agency's work was not thrown out. We kept what was sound, including the brand look and the content library.
We agreed four modules with the owner: local SEO, Google Ads, social media, and monthly reporting by channel. Each had its own scope, its own monthly fee and its own target. In month 1 the chain kept the same total spend as before, about S$9,800 including media, because set-up work needed the time. We also wrote down which module would shrink once set-up was done.
A single retainer hides trade-offs. With modules, the owner could see the price of each part and ask for more or less of it. Total cost stayed level at first because building things properly takes more effort than keeping them running.
Each outlet got a full Google Business Profile: correct hours, services, photos, a booking link and a steady stream of review replies. We built one page per outlet on the website with its address, nearest MRT and parking notes. Citations were cleaned up, so every shop used the same name, address and phone number across directories. We asked customers to review after visits, never with rewards.
Most people searching for a shop nearby pick from the top three results on the map. Outlets that appear there get the calls and direction requests. Consistent details and fresh reviews are what move a shop into that group.
We rebuilt Google Ads by outlet, with search campaigns for eye test appointments, glasses and contact lens terms near each shop. Radius targeting stopped overlap between outlets, and each campaign pointed to the right outlet page. Social posts were cut to a steady schedule focused on frames, new arrivals and store events. We stopped Meta campaigns that produced clicks but no bookings, and moved that money to search.
Search catches people who already want an appointment. Social keeps the shops visible but rarely produces a booking by itself, so it got a smaller share. Moving spend by outlet kept budget where bookings were actually coming from.
Each month the owner received one page per channel: spend, bookings, cost per booking and what we would change next. In the second quarter the heavy set-up work ended, so the module fees came down and the monthly cost dropped. We kept a short list of things we chose not to do, such as bidding on very broad terms, so the owner could see the reasoning.
Reporting by channel was the whole point of the switch. Once set-up gave way to upkeep, the fees fell without any drop in bookings, which is how a modular arrangement should behave.
Six months in, the chain was getting 204 appointment bookings a month, up from 118, at a cost per booking of S$41.18 instead of S$83.05. Five of six outlets now sat in the top 3 local results, up from two, and Google Business Profile actions rose from 1,420 to 2,610 a month. Total monthly marketing cost fell from S$9,800 to S$8,400, and 90% of spend could be linked to a measured result, up from 20%. The first quarter cost about the same as the old retainer, and the saving came afterwards.
| Metric | Baseline | Month 6 | Change |
|---|---|---|---|
| Appointment bookings per month | 118 | 204 | +73% |
| Cost per booking | S$83.05 | S$41.18 | -50% |
| Total monthly marketing cost (fees and ad spend) | S$9,800 | S$8,400 | -14% |
| Outlets in the top 3 local results | 2 | 5 | +150% |
| Google Business Profile actions per month (calls, directions, website clicks) | 1,420 | 2,610 | +84% |
| Share of spend with a measured result | 20% | 90% | +70 pts |
Tracking live for every outlet, four modules agreed, total cost kept level with the old arrangement.
Business Profiles and outlet pages rebuilt, Google Ads restructured by outlet, social schedule simplified.
Reports by channel, set-up fees tapered, spend moved toward the channels that produced bookings.
The old report was polished but could not show which channel gave bookings. Once every call and form carried a source, 90% of spend had a measured result, and decisions got easier. A nice report is not the same as a useful one.
Our first quarter cost about the same as the previous retainer because tracking, profiles and campaigns had to be built. After that, monthly cost fell to S$8,400. If a proposal charges the same fee forever, ask which work it covers each month.
Moving from two outlets to five in the top 3 local results lifted profile actions by 84% and bookings by 73%. For a shop that customers visit in person, the map listing often matters as much as the website.
How we plan and run digital marketing across several channels, with reporting for each.
Helping every outlet show up when people search nearby.
Search campaigns built around the shops you run.
A multi-channel programme for a restaurant business.
Share your latest monthly report. We will tell you what it shows, what it hides and how we would split the work into measurable parts.