Skip to content

Engerio: the ad stack we build and run

An ad server, contextual engine and TTPA-ready political ads for a network of Slovak media. In production since 2022.

Client
Engerio
Market
Slovakia
Our role
Development & operations
Since
2022
71.4%
reach for Engerio
100k
req / min peak
300M
avg impressions / month
No tracking
contextual targeting only

Numbers from Engerio, the ad stack we build and run.

1 · Context

Problem
Slovak publishers needed to sell ads beyond Google, on their own terms and with their own data.
What we built
A shared ad stack for a network of media publishers, supporting direct, sponsored and programmatic campaigns.
Outcome
71.4% reach for Engerio on one stack.
  • Publishers
  • Ad network
  • Slovakia

2 · Our ad server

Problem
Engerio had to pick the best campaign for every page in real time, then win against other bidders in the publisher's auction.
What we built
Our own ad server with a Prebid-compatible bid server written in Python. Campaigns from advertisers and agencies compete inside Engerio by priority and dynamic CPM; the winning bid then competes with other bidders in the publisher's Prebid auction. On Engerio's own widget placements, the same engine serves the ad directly.
Outcome
Every bid decision made in ~100 ms, handling up to 100k requests per minute at peak.
Diagram — Engerio's ad server: sponsored widgets, image overlays, story cards and Prebid.js bid requests go through one decision engine (read the request, shortlist, pace and prioritise, choose) in ~100 ms per request, fed by campaigns and the content index.
  • Ad server
  • Prebid-compatible
  • Python

3 · Contextual engine

Problem
Third-party cookies were going away, and tracking users was never an option.
What we built
A contextual engine that classifies page content in real time and matches ads to it.
Outcome
Relevant targeting with no user tracking.
Screenshot — Engerio admin: a scraped article with the categories assigned by the contextual engine (demo data).
  • Contextual
  • Cookieless
  • IAB categories

4 · Content pipeline

Problem
Contextual targeting needs fresh, structured content from every partner publisher.
What we built
An ingestion pipeline that discovers new articles, extracts and classifies them, and re-crawls them as they change.
Outcome
100,000+ articles in the index, continuously refreshed through re-crawling and used by the contextual engine.
  • Ingestion
  • Scrapy
  • Classification

5 · Political ads (TTPA)

Problem
The EU TTPA regulation set new rules for declaring and labelling political ads.
What we built
A TTPA flow inside the ad server: declarations, labels and transparency notices.
Outcome
Political campaigns run in compliance with TTPA, without a separate tool.
  • TTPA
  • Transparency
  • Labelling

6 · Formats

Problem
Standard IAB units weren’t enough for sponsors, and heavy creatives slowed pages down.
What we built
Custom formats and an embeddable widget that render fast on any publisher page.
Outcome
Widgets load only when they come into view, so ads don't slow down the publisher's page.
  • Formats
  • Widget
  • Core Web Vitals

7 · Scale & cost

Problem
Traffic peaks multiplied the load, and the infrastructure bill with it.
What we built
Widget assets and creatives on S3 behind Cloudflare. Bid and widget requests go through a load balancer to ECS on EC2 across at least two availability zones, with Aurora (writer and autoscaled readers) and Redis. Celery workers handle logging, stats and content ingestion off the bid path. A scheduled Lambda replaces frozen instances automatically; CloudWatch and Grafana show it all.
Outcome
100k requests per minute at peak, with cost that follows traffic.
Diagram — Engerio's AWS infrastructure in eu-central-1: widget assets and creatives from S3 behind Cloudflare; bid and widget requests through a load balancer to ECS on EC2 in several availability zones, each with Redis and Aurora (one writer, autoscaled readers); Celery workers off the bid path; CloudWatch, Grafana and a scheduled Lambda that replaces frozen instances.
  • AWS
  • Multi-AZ
  • Autoscaling

8 · Reporting

Problem
Yield decisions were made from exported spreadsheets.
What we built
Reporting on campaigns, formats and placements, in one interface.
Outcome
Campaign and yield reporting in one interface, used by publishers and advertisers.
  • Reporting
  • React

9 · Integrations

Problem
Publishers wanted more demand without running a second stack.
What we built
Equativ demand integrated next to Engerio's own campaigns, in its own allotted widget slots.
Outcome
Additional demand through the same widgets, without the need for a second ad stack.
  • Equativ
  • Widgets

10 · Prebid.js bidder adapter

Problem
Publishers wanted to add Engerio demand to their existing Prebid setup, without a custom integration.
What we built
Engerio's Prebid.js bidder adapter, authored by Think Easy in the official Prebid repository and maintained across Prebid releases.
Outcome
Engerio is a listed Prebid bidder: publishers enable its demand with standard Prebid.js configuration.
Diagram — how a Prebid bid is won: a reader opens an article; the Engerio bid server picks the best campaign by context, seller, filters and CPM in about 100 ms; its bid wins the publisher's Prebid auction against three other bidders; the ad renders.
How a Prebid bid is won — from our work on Engerio.
  • Prebid.js
  • Bidder adapter
  • Banner

11 · Operations

Problem
An ad stack that generates revenue has to run around the clock.
What we built
Monitoring, alerting, releases and incident response, run by the team that wrote the code.
Outcome
4+ yrs in production.
  • Monitoring
  • Releases
  • Incident response

Engerio says

“Engerio has run on Think Easy’s engineering since 2022. They built our ad server, our Prebid bidder and the contextual engine that lets us target without tracking readers, and they run it every day for more than 120 Slovak media. When regulation changed, as with political ads under TTPA, they turned it into a working product instead of a problem. What I value most is that they think about our business, not just the code: they tell us what’s worth building and what isn’t. For us, they’re not a supplier but part of the team.”
— Filip Kuna, CEO, Engerio

Running an ad stack like this?

Start with an audit. We reply within 24 hours.