It started in 2023 with an EU grant for an e-commerce loyalty programme. zest.agency, a performance agency running since 2015, kept developing it for its own client work and added the ad side next to the loyalty one.
ZEST.AGENCY · 2015
LOYALZ · 2023
FOUNDER
Karol MajewskiCEO Loyalz · zest.agency
In 2023, we had the idea of diversifying the agency’s work with a tool that supported customer retention. An EU grant enabled us to build a complete product, which became the first version of Loyalz.
The first Loyalz did retention and nothing else, and it ran on Web3. In 2023 that sounded like the future. By 2024 it sounded like something you had to apologise for — our own FAQ was still answering questions about NFTs and gas fees while the merchants I was actually sitting with wanted points, cashback, and a voucher that worked at checkout. None of them wanted to learn what a crypto wallet was.
For two years, we built an alternative version in parallel, without blockchain underneath. Points, cashback, benefits, levels, collections, quests — the mechanics people were actually asking for.
The second part of the tool grew out of the agency’s daily work, not a roadmap. It started with something very simple: adding labels to ads so we could compare them in one place. Next, we added an ad ranking to see which ads were really driving an account’s performance and, more importantly, to show designers what to create. As AI developed, the next steps seemed obvious: adding ad generation and direct publishing to save specialists time.
At zest.agency we rank client ads in Loyalz, set their pause rules there and send clients a live report link instead of a deck. Every brand gets the same panel, and the MCP server opens it to AI chat — 77 tools in all.
Four services — performance ads, analytics and CRO, creative and UGC, sites and stores — and the first three turned into Loyalz's ranking, Insights and creative analysis. Google Partner since 2019, Meta Business Partner since 2020, 4.9/5 on Clutch from 22 reviews. The agency's own line for the work is performance you can see in the P&L.
zest.agencyPerformance agency
Search and paid social on Google, Meta, TikTok and LinkedIn — a Google Partner since 2019 and a Meta Business Partner since 2020. This is the practice that produced the ranking and the pause rules.
GA4 and Tag Manager implementation, server-side tracking and consent handling, A/B testing wired to the system where the sale is actually recorded. This is the work that turned into Insights.
UGC-style videos and ad graphics produced in series, each version labelled and ranked on store revenue once it runs. That is why labelling and comparing creatives was the first thing built on the acquisition side.
SERIAL OUTPUTranked on store revenue
Design and build for shops and campaign pages, with the tracking installed as part of the build rather than bolted on afterwards. A campaign is only as measurable as the page it lands on.
Two of the agency's working rules ended up as product decisions rather than slogans. The results the agency publishes are its own figures on its own site, which is the right way to read them.
Four platforms, four ROAS figures, a spreadsheet, and a client asking why nothing adds up?
So we built a layer that brings every source into one format. Then a dashboard, because a report without a decision is just a prettier spreadsheet. Next, we added creative analysis, because “this ad works” is not enough to brief the next one. And as acquisition costs rose faster than margins, we’re rolling out the other half — the loyalty side — because the cheapest customer available to our clients was the one they already had.
The sum of platform ROAS never matched the invoice. This artefact is the whole justification for decision 03 below.
None of these came from a workshop. Every one of them exists because something went wrong on an account we were accountable for, in front of a client who was entitled to an answer.
A client read the weekly report, then opened the dashboard, and found the two praising different creatives on the same account in the same week. Both were correct. The report ranked on one window and one conversion definition, the dashboard on another, and nobody had ever written down which was the real one — because until somebody put them side by side, nobody had to.
The fix was not a better report. It was deciding, once, what the sentence “this is the best ad” means, and making every surface read that one definition: the ranking, the assistant, the weekly report, the pause rules. A number that changes depending on which screen you are looking at is not a measurement, it is an opinion with a decimal point.
An early automation did exactly what it was told. A new campaign had a poor first afternoon, the rule saw a cost per acquisition above target, and it paused the campaign on day one — before the platform had left the learning phase, on a sample too small to mean anything. The rule was right about the arithmetic and wrong about the world.
Now no rule can fire on an ad without delivery history behind it. Every automation carries a spend threshold as well as a performance one, and the threshold is a precondition rather than a setting somebody remembers to fill in. An automation that can act on noise will eventually act on noise, and it will do it at the worst possible moment.
The Monday report above is this one. Four platforms, four returns, each one confidently claiming the same order. Add them up and the total revenue exceeds what the shop actually took, sometimes by a third. Every platform counts a conversion it can see, and several of them can see the same one.
So the basis of the calculation changed. Revenue comes from the shop, not from the pixel, and platform figures are treated as claims to be reconciled against it rather than as the number. It makes the reported result lower and it makes it true, and only one of those two properties survives a conversation with a finance director.
“Who paused my ad?” is a question an agency gets asked, and the honest answer that week was that we were not sure — a rule had fired, or somebody had clicked, and there was no record that distinguished the two. Trust does not survive many of those.
Every automated action now writes a line: what changed, what triggered it, which account, and when. It is unglamorous and it is the feature that makes handing automation to a client possible at all, because the price of letting software touch a live budget is being able to say afterwards exactly what it did.
Loyalz is built by the team that runs client campaigns at zest.agency. Anything new goes onto real accounts with real budgets here first, so the problems turn up on our side before they reach yours.






Twenty minutes, live, on your data. We compute your fraction while you watch.
Book a demo — check ROAS in 20 min →