Portfolio

We build the thing, then we fill it.

Most agencies do one half. A development studio hands you a site and walks away from whether anyone converts on it. A marketing agency buys traffic and sends it into a page they are not allowed to change. We do both, which means when the numbers move we know exactly what moved them, and when they do not, we can go and fix the actual cause. Below is the work, with every number stating how it was measured.

18
Projects across web and marketing
17%
Page-open to booking on a build we also market
6
Disciplines under one roof
5
Years running paid, SEO and CRO
Why this matters

The gap between the two agencies is where your money goes

Every business that has hired both separately knows this feeling. Something is not converting, and the two suppliers each explain why it is the other one's problem.

The development studio

Ships a site, then stops

The build is judged on whether it looks right and loads fast. Nobody on that team ever opens the ad account, so nobody notices that the highest-intent traffic is landing on a page that answers a different question. The site is finished. It is just not earning.

The marketing agency

Buys traffic into a page it cannot touch

They can see the drop-off and they can write the recommendation. They cannot deploy it. So the fix waits in a ticket queue while the budget keeps running, and the monthly report explains the same leak it explained last month.

One team, both halves

The fix ships the same week it is found

We read the funnel, we change the page, and we watch what the change did. There is no handover, so there is nobody to blame, which is the point. Every case below has a section naming the exact moment the two halves met, because that moment is the whole argument.

What we actually did

14 of these 18 projects needed more than one discipline

This is the differentiator, laid out rather than claimed. 7 of them needed three or more. Read down a column to see depth in one discipline. Read across a row to see why a project needed one team instead of three suppliers who each own a piece of the answer.

Every project on this page and the disciplines it required.
ProjectWeb buildMarketingSEOCROCRMDashboardTotal
Perth Pre-Purchase Inspection●·●●·●4
US translation-device brand·●●●··3
Suwasetha●·●···2
Lotus Edge●·●···2
AgrilHoTech●●●●··4
Sri Lankan motorbike parts store·●●●··3
Sri Lankan sportswear brand·●·●··2
Sri Lankan fashion label●●·●··3
Resort group, Maldives·●·●··2
Spear Systems Modular Solutions●·●·●·3
Kenny Dissanayake●·●···2
Vigor Security●·●···2
Ransewana Constructions●●●·●·4
Event ticketing campaign·●····1
Footwear brand, New Zealand·●·●··2
International e-commerce brand·●····1
Education brand·●····1
HNC Associates·●····1
Case studies

The work, with the numbers and where they came from

Every figure here says how it was measured. Where a project has no number yet, it says that too, and shows the build instead. Filter by the discipline you care about.

Showing all 18 projects.

Outcome · Built and marketed by usVehicle inspection · Perth, Australia
Perth Pre-Purchase Inspection

17 percent of everyone who opened the booking page went on to book.

Opened the page to confirmed booking17%
Final step completion (details started to booking confirmed)50%

How it was measured. The site's own funnel report, reading the live booking database. Every step is a recorded event, not a modelled estimate. In the first three days after launch, that was 28 confirmed bookings from 162 page opens. Volume has grown since, which is why the rate above is the number we track rather than the count behind it.

Where the two connected

The funnel report was naming the wrong drop-off. It still counted postcode entry as a step from an earlier version of the form, so it pointed at a problem that no longer existed. Fixing the measurement changed the decision: at three inspection slots a day, the fall-off between choosing a tier and picking a time is mostly a full calendar rather than a broken one. The advice was to check the bookings list before buying any traffic. An ads agency reading the same chart would have sold more clicks into a capacity ceiling.

Engagement: Build & Run
Opened the booking page 100%
Chose an inspection 65% of the step before65%
Picked a time 58% of the step before38%
Started their details 90% of the step before35%
Confirmed the booking 50% of the step before17%

The last step is the current leak. Half of everyone who starts entering their details does not finish, which is where the next work goes.

Web buildBooking engineSEOCROAdmin dashboardSMS & email
Outcome
US translation-device brand
Consumer electronics e-commerce · United States

The receipt page that would have trained the ad campaign on fake orders

Marketing audit score, July → September46 → 56

How it was measured. The same five-part marketing audit, covering content, conversion, SEO, competitors and brand, run against the live site in July and again on 10 September 2026. The client's developers shipped the fixes. We wrote the list and re-checked each item on the live site rather than taking it on their word.

Where the two connected

Before any budget went into Google's Performance Max, the tracking check found that the order confirmation page believed whatever was typed into its address bar. A made-up order for $14,999.50 showed the "your payment went through" screen and fired a real purchase event. Performance Max learns from purchase events, so every fake or test visit would have taught it to find more people who never buy. The fix went in on the server, and seven fake orders were rejected on the retest before the campaign plan was written.

Marketing auditTracking QAGA4 & GTMPerformance MaxCRO
Build
Suwasetha
Elder care, wound care and home nursing · Veyangoda, Sri Lanka

The person searching is rarely the person being treated.

Claims on the site traced to a source before launch574 of 574
Accessibility violations in the launch scan0
Home page load on a phone, against a 2.5s budget1.4s

What we built. A nine page site, relaunched in September 2026 with elder care as the lead service alongside wound care, home visits and care at the centre. Every price, qualification and clinical statement was checked against a source before launch, and the release gate ran an automated accessibility scan and a timed page load. Enquiries open a prefilled WhatsApp message instead of an email form.

Where the two connected

The person searching is usually an adult child, often working abroad, arranging care for a parent who is not the one doing the searching, so the site answers a stranger's questions about someone else's condition. When elder care became the lead service, the site's single set of opening hours contradicted every elder-care package on the same domain, because the evening hours belonged to the nurse's wound-care clinic. It now publishes two labelled sets of hours, in the copy and in the data Google reads. One combined span would have been false, since nobody covers the gap between them.

Service siteElder care relaunchWhatsApp enquiriesAccessibilityLocal SEO
Live at suwasetha.lk
Build
Lotus Edge
Garden restaurant and lounge · Matale, Sri Lanka

A menu the owner changes in a spreadsheet, live on every table's QR code within a minute

Menu page load on a phone, median of five live tests1.4s
Dishes the owner edits without a developer85

How it was measured. Load time is the largest-paint figure from five Lighthouse mobile runs against the live menu page, all inside a 2.5 second budget. The 85 dishes in 14 sections are read from the restaurant's own Google Sheet, refreshed every 60 seconds, with a saved copy served if the sheet is ever unreachable.

Where the two connected

The printed leaflets already pointed at lotusedge.lk, and the page they reached still said "Opening" with a countdown, sample prices and a demo phone number, so fixing it came before any promotion. Nobody on staff is there to update a website, so the menu reads the sheet the owner already edits: untick a dish and it shows as sold out on every table. Table ordering was held back on purpose until the restaurant picks a till that can accept orders from the web, because two systems holding the same order is how staff end up abandoning one of them.

Restaurant siteQR menuGoogle Sheets as CMSRestaurant schemaPerformance
Live at lotusedge.lk
Outcome · Our own store
AgrilHoTech
Premium houseplants and tropicals · Sri Lanka

The AI search audit that found the shop introducing itself as "Agril"

AI-visibility baseline63/100
Discovery · Data quality · Actionability82 · 48 · 60

How it was measured. A live audit of the store run on 12 July 2026 against a fixed three-part rubric, with the evidence file saved. This is a starting score on our own property, published because a baseline you can check beats a result you cannot.

Where the two connected

robots.txt explicitly allows GPTBot, PerplexityBot and ClaudeBot while blocking the scrapers that give nothing back. That is a server-level edit made for a marketing reason: being answerable when a buyer asks an AI assistant where to buy a plant in Sri Lanka. A build team has no reason to touch robots.txt for answer engines, and a marketing team is not allowed to. The same audit found the homepage title reading "Home - Agril" and the shop description still carrying an unedited plugin placeholder, one file away from an llms.txt that was thorough.

Engagement: Build & Run
WooCommerceAI search visibilityTechnical SEOCROLiteSpeed
Outcome
Sri Lankan motorbike parts store
Spare parts e-commerce · Sri Lanka

Scored 38 out of 100, and the biggest single win was a phone number

Conversion readiness at the start38/100

How it was measured. A full UI, CRO, SEO and technical audit run on 4 June 2026 against a scored rubric, with the report and eight screenshots saved. Same rubric on re-audit, so the next score is comparable rather than a fresh opinion.

Where the two connected

The store had no main navigation menu, no meta descriptions anywhere, a pricing bug, a broken wishlist and thirty-one products with no descriptions. It also had no phone number, which in this market is the largest single trust barrier before anyone will order a part they cannot inspect. Three fixes, navigation, phone number and meta descriptions, were modelled to move the score past 55. Selling traffic into that store first would have spent the budget on a shop nobody could navigate.

Engagement: The Leak Report
Conversion auditTechnical SEOTrust signalsWooCommerce
Outcome
Sri Lankan sportswear brand
Sportswear apparel · Sri Lanka

Return on ad spend from 2 to 9, average order value up 177 percent

Return on ad spend, 2.5 months2 → 9
Average order valueLKR 2,472 → 6,841
Conversion readiness at the start54/100

How it was measured. The 54/100 starting score comes from a scored audit run before any spend. ROAS and AOV are drawn from the client's own Meta Ads Manager and store reporting over the 2.5-month engagement.

Where the two connected

The account was rebuilt into six campaigns, but the first job was verifying that the Pixel and the Conversions API were actually reporting before a rupee of the new structure went live, since optimising against broken data is how budgets disappear quietly. Average order value moving from LKR 2,472 to 6,841, up 177 percent, is not an ads result. It is a merchandising and on-site result that the ads then get to spend against, and it is the reason the return on spend had room to move at all.

Meta adsPixel & CAPICampaign architectureCRO
Build
Sri Lankan fashion label
Clothing · Sri Lanka

A body-shape fit simulator, built because ads cannot answer a sizing question

What we built. A custom HTML5 Canvas tool that renders an anatomical body silhouette from the shopper's own measurements, so they can see how a piece will sit before they order it. The label's Meta sales campaign is running now, and its results are not in yet, so none are shown here.

Where the two connected

Online fashion here loses orders at the size question, and no amount of ad spend answers it, so the fit tool exists because the same team was watching where the drop-off happened. The ads audit found the same kind of gap from the other side: in the 31 days before the audit, the store's Pixel recorded about 100,000 page views, one add-to-cart and no purchases. A campaign told to find buyers would have had nothing to learn from, so the site's tracking went first on the launch plan, ahead of any creative.

Engagement: Build & Run
HTML5 CanvasCustom toolWooCommerceMeta sales campaignPixel auditCRO
Outcome
Resort group, Maldives
Hospitality and resorts · Maldives

The account reported 2,853 conversions. They were clicks on Book Now, not bookings.

Google Ads spend audited, 12 weeks$4,669
Spent on searches that should have been blocked≈ $520
Search-term spend already going to generic searches68%

How it was measured. Read from the account's own exports for 6 July to 28 September 2026, across three campaigns and 21,915 search terms, with every figure marked as either observed in the data or calculated from it. Underneath the ads sits the stack built earlier in the engagement: Meta Pixel, Google Ads and GA4, Hotjar session recordings and Klaviyo email automation.

Where the two connected

Bookings finish on a third-party booking engine, so the campaigns launched optimising for the last step the site could see: a click on Book Now. Twelve weeks of data showed that stand-in was measuring browsing, not buying. It counted every click, and brand and generic searches converted at the same 30 percent, which real booking data never does. A real booking event from the booking engine is the fix now being set up. The same audit found one resort's only ad disapproved, which had switched its whole campaign off, and the blocked-search waste above going to competitor resorts, job hunters and a Careers link Google had added on its own. Earlier, the same weekly watch caught copycat domains impersonating the brand.

Google Ads auditConversion trackingMeta Pixel & GA4HotjarKlaviyo automationBrand protection
Build
Spear Systems Modular Solutions
Modular industrial systems · Sri Lanka

Seven pages, dark industrial, and every path ends in WhatsApp

A static lead-generation site built for speed and for one job: getting a qualified enquiry into the owner's hands.

Where the two connected

Built lead-generation first rather than brochure first. In this market the enquiry happens on WhatsApp, so the site hands people to WhatsApp with context already attached instead of burying a contact form on page seven and hoping.

Static buildLead generationTechnical SEOCRM handoff
Build
Kenny Dissanayake
Fashion model portfolio · Sri Lanka

A portfolio that reads like a magazine and indexes like a business

A dark editorial single-page site with scroll-driven motion, built to hold attention on a phone.

Where the two connected

A portfolio site is usually treated as decoration. This one had to satisfy two very different readers at once: a casting director scrolling on a phone, and a search engine deciding whether this name is a real, indexable entity worth ranking for.

Editorial designScroll motionEntity SEOPerformance
In build
Vigor Security
Private security services · Moratuwa, Sri Lanka

A security firm with no track record yet, so every trust signal has to be checkable

What we built. A six page site covering six service lines, careers and contact, on a brand system sampled from the logo file rather than eyeballed. A holding page is live at vigorsecurity.lk while the full site is completed.

Where the two connected

A new security company has no clients to name, no testimonials and no photographs of its guards, and this industry's templates fill that gap with invented numbers. The first detail we asked the client for was their Ministry of Defence registration, because it is the one credential a buyer can check. The same rule runs through the design: the brand gold measures 1.76 to 1 against white, unreadable as text, so it only appears on navy, where it clears 8 to 1.

Brand systemSix service linesTrust designCareers pageLocal SEO
In build
Ransewana Constructions
Construction and contracting · Nittambuwa, Sri Lanka

A new contractor's site with no invented history on it

Five pages plus service-detail pages, real photography, and a contact path that falls back to the visitor's own email client if the server ever fails, so an enquiry is never silently lost.

Where the two connected

The client is newly established, so the site carries its founding year, an in-house team, a 24-hour reply commitment and a two-year workmanship warranty, instead of the fabricated project counts and certification badges that this industry's templates ship with by default. The homepage runs an honest FAQ where testimonials would normally sit. Trust signals that turn out to be false cost far more than having fewer of them.

Engagement: Build & Run (in progress)
Static buildLocal SEOLead captureCRMMarketing
Outcome
Event ticketing campaign
Live event, ticket sales · Sri Lanka

LKR 1M in ad spend turned into LKR 18M in bookings

Ad spend to bookings, ~18× returnLKR 1M → 18M

How it was measured. Reported spend and bookings across Meta and Google for the campaign, pulled from the platforms' own ad accounts.

Paid socialGoogle AdsEvent ticketing
Outcome
Footwear brand, New Zealand
Footwear e-commerce · New Zealand

Conversion rate from 0.7 percent to 2.8 percent in one month

Conversion rate, one month0.7% → 2.8%
Return on ad spend3.2 → 7.6

How it was measured. Site-wide conversion rate and blended ROAS, read from GA4 and Meta Ads Manager over a one-month engagement, alongside a 28 percent lift in average order value.

CROPaid acquisition
Outcome
International e-commerce brand
E-commerce

Cost per purchase from $28 down to $4 in two months

Cost per purchase, 2 months$28 → $4

How it was measured. Cost per purchase reported in the ad account, tracked over a two-month engagement.

Paid socialCost efficiency
Outcome
Education brand
Education

Registrations from 28 to 346 in one month, cost per lead halved

Registrations, one month28 → 346
Cost per leadLKR 414 → 192

How it was measured. Course registrations and cost per lead, read from the platform's own lead-gen reporting over a one-month window.

Lead generationPaid social
Outcome
HNC Associates
Accounting and financial services · Sri Lanka

$400 in ad spend turned into LKR 9M in revenue for an accounting firm

Ad spend to revenue, FY 2024-25$400 → LKR 9M

How it was measured. Lead-generation campaign spend and attributed revenue for FY 2024-25, reported by the client against closed engagements.

Where the two connected

Accounting firms sell on trust and referral more than on a landing page, so the ads are doing the work a website usually would: explaining the service and getting a name into a conversation. That funnel is currently running with no site behind it, which is the honest state of this engagement right now. The website is the next lever, once the same numbers are there to justify what to build.

Meta adsLead generationWeb build upcoming

How to read this page

Marketing results are shown by industry rather than by client name, because those numbers came out of accounts we do not own. Websites are named, because a live site you can open and inspect is a stronger proof than anything we could write about it.

  • Every number says how it was measured. If a figure cannot state its basis, it is marked rather than dressed up.
  • Projects without a result yet are shown as builds, not padded with estimates. There are no illustrative figures anywhere on this page.
  • Starting scores are published alongside finishing ones. A baseline you can check is worth more than a result you cannot.
  • Some results were delivered by our founder during agency roles before CeyagMark was founded.

Find out which half is costing you

The Growth Audit takes about three minutes and tells you whether your problem is the traffic, the site, or the gap between them. No call required to get the answer. If you already know what you need, every engagement above is scoped and priced on the services page.

WhatsApp us