Fundusze Europejskie Województwo Łódzkie Unia Europejska
Home / About us
About us

Built inside a performance agency, on our own clients' budgets

Loyalz started as internal tooling at zest.agency. This page is the long version: what the agency does, what broke, and what we built because of it.

zest.agency ZEST.AGENCY · 2015 LOYALZ · 2023 Loyalz
In my own words

Karol on where the tool came from

Karol Majewski speaking at the ecommerce.pl conference FOUNDER Karol MajewskiFounder, Loyalz · zest.agency
ecommerce.pl conference · photo: Eventshooters
2023FIRST VERSION 3 yrsON OUR OWN ACCOUNTS

In 2023 I had one problem and one grant. The problem was that every loyalty programme I could buy for a client was either a plastic card or a plugin nobody opened twice. The grant was European Funds money, and what it really bought was the right to build the thing properly instead of in the evenings.

2023 — the first version

Loyalty only, and built on Web3

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 wallet was in order to give somebody five percent back.

NFTs Gas fees Wallets
2024–2025 — taking it apart

The same mechanics, none of the vocabulary

So we spent two years rebuilding it without the chain underneath. Points, cashback, benefits, levels, collections, quests — the mechanics a shop asks for by name, and nothing it never asked for. That is the retention half, and it is the half the grant paid for.

Points Cashback Benefits Levels Collections Quests
Starter Explorer Elevated Premier Icon THE LEVELS SHIPPED
2024–2026 — the other direction

Acquisition, because retention alone answers half the question

The second half came from the agency floor rather than from a roadmap. It began narrowly: read the creative, work out which ad was actually carrying an account, because knowing that an ad works is not enough information to brief the next one. Then the models got good enough that the same layer could make the creative rather than only rank it, and then good enough to run the campaigns it made. Analysis, production, management — in that order, and each step only because the one before it had stopped being the bottleneck.

STEP 01Analysis STEP 02Production STEP 03Management
Today

It has to survive our own Mondays first

The agency runs on it daily. Client campaigns at zest.agency are planned, ranked, cut and reported inside Loyalz, which means the awkward edges are found by us, on accounts we are accountable for, before they ever reach anybody else. That is also why it is built for two readers at once: the brand that wants to know what a customer cost and what they went on to be worth, and the agency that has to answer that question for thirty brands before Monday lunch.

The agency

What zest.agency actually does

Named services, named channels, named partnerships. This is the part that makes the origin story checkable rather than charming — the agency sells the same four things it built the tool out of. Its own line for the work is performance you can see in the P&L.

zest.agency zest.agencyPerformance agency

Performance ads

Search and paid social on Google, Meta, TikTok and LinkedIn, run for stable sales scaling rather than for a good-looking week. This is the practice that produced the ranking and the pause rules.

Google Meta TikTok LinkedIn

Analytics and CRO

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.

GA4 GTM Server-side A/B

Creative and UGC

Serial production of user-generated video formats and ad graphics, made in volume specifically to bring acquisition cost down. This is why creative analysis was the first thing built on the acquisition side.

SERIAL OUTPUTranked on store revenue

Sites, stores and landing pages

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.

WooCommerce Landing pages
Google PartnerSINCE 2019
f Meta Business PartnerSINCE 2020
4.9 4.9/5 on ClutchFROM 22 REVIEWS
RULE 01 Measurement is verified before a budget is released.
RULE 02 The client owns every account, pixel and connection from the first day.

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.

02The origin

The Monday report problem

Long form of what the homepage says in three sentences: four platforms, four ROAS figures, a spreadsheet, a client asking why nothing matched.

The scene repeated itself: four ad platforms reporting four different ROAS figures, a spreadsheet where someone reconciled them by hand, and a client asking why none of it matched what their store actually took. We were the ones who had to answer that on Monday.

So we built the layer that normalises every source into one shape, to stop reconciling manually. Then ranking, because a report with no decision attached is a prettier spreadsheet. Then creative analysis, because “this ad works” is not enough information to brief the next one. And when acquisition cost kept climbing faster than margins, we built the other half — the loyalty side — because the cheapest customer available to our clients was the one they already had.

The agency still runs on it every day. Campaigns for e-commerce and B2B clients are planned, cut and reported inside Loyalz, which means every awkward edge gets found by us before it reaches you.

Monday report, 2021 illustrative
MMeta Ads4,10× GGoogle Ads3,20× TTikTok Ads6,80× AAllegro Ads2,40×
SUM NEVER MATCHED THE INVOICE
What the store actually tookOne fraction, from store revenue 2,90×

The sum of platform ROAS never matched the invoice. This artefact is the whole justification for decision 03 below.

What stayed in the product

Four product decisions and the incident behind each

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.

01 The incident

One definition of “best ad”, everywhere

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.

RULE One definition, computed once, quoted everywhere.
02 The incident

A spend gate on every pause rule

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.

SPEND GATE RULE MAY FIRE
RULE No rule fires until the ad has spent enough to have an opinion.
03 The incident

Blended ROAS computed from store revenue

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 denominator moved. 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.

RULE The shop is the source of revenue; the platform is a witness.
04 The incident

A log on every automated action

“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.

09:14 rule cpa_guard paused ad 1202149… 11:02 user k.majewski raised budget +15%
RULE Anything that can change a campaign leaves a name and a timestamp.
Loyalz & Zest team

The same people build it and use it

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.

Paweł Strzelecki
Paweł StrzeleckiTest it till you make it.
Tymoteusz Krężel
Tymoteusz KrężelMeasure it to manage it.
Aga Sujka
Aga SujkaContent is queen.
Beata Dośpiał
Beata DośpiałStart with why.
Bartłomiej Madej
Bartłomiej MadejTest, optimize, succeed.
Bartosz Bełtowski
Bartosz BełtowskiThe best marketing is invisible.

Bring one ad account and one month of orders

Twenty minutes, live, on your data. We compute your fraction while you watch.

Book a demo — 20 min
Loyalz
Loyalz · built inside zest.agency © 2026