Zhytomyr property portal with analytics and video ads
One system in three parts, grown around a regional property portal. The portal takes in listings and visitors every day; the analytics desk gathers what happens on it and on outside platforms; the generator pulls properties from there and turns them into ad videos. All three run on the same data, which is why they belong together.
The portal
- Search by number of rooms, district, price and features; separate sections for new developments, houses, land and rentals
- Agency ratings and personal areas for agents
- Telegram bot: new listings arrive immediately, matched to your own filters
- Automatic sync with OLX and DIM.RIA; feeds rebuilt every hour
- Own analytics: views, searches and the history of every listing
The analytics desk
- Collector for listings from OLX and DIM.RIA, refreshed daily
- Views as a feed, as analytics and as a map
- Metrics per listing and per agent, tracked over time
- Suburb analysis: where supply and demand come apart
- Import of messages into Telegram, user management
The video generator
- Advertising wears out: frequency climbs past 6, cost per enquiry rises, new creatives are needed weekly
- Pulls the cheapest listings straight from the portal
- Assembles the rough cut itself: photos, price tag, rooms, floor area, district, music
- Correction in the browser, then finished MP4 in 9:16 for Reels and Stories and 1:1 for the feed
- Generates the ad copy alongside
Result
- 720 active objects, 2,180 objects in the database, 19,246 photos
- EAV data model: 73,644 field rows, served through a denormalised table
- Own analytics since 5 June 2026: 1,042,821 recorded events, 22,693 stored searches, 146,557 daily values per object
- The enquiry rate rose from 1.9% to 5.9% with traffic unchanged. Not more visitors: the same visitors calling or writing three times as often
- Market monitoring: 2,085 listings collected from other portals, 5,395 price changes kept over time, 101 duplicates found automatically across two portals
- 2,789 posts published automatically on seven Facebook pages, 1,495 of them object videos
- Videos are rendered locally with ffmpeg: no cloud service, no running costs
Operations and data protection
- Moved from shared hosting to a dedicated Docker VPS: reverse proxy, TLS, page cache, deployment through Git instead of FTP
- Seller documents live outside the web root under a random file name; the access right is computed on every request from the current object assignment, with an access log and deletion after 90 days
- Internal dashboards and partner feeds sit behind an access check at web-server level
- Currently being built: a self-hosted n8n as an orchestration layer, deliberately without direct access to the production databases, with a central error workflow and alerting
Figures taken on 3 September 2026 directly from the production databases.
Stack: WordPress with custom modules, PHP, MariaDB, Redis, Node.js, TypeScript, PostgreSQL, Prisma, Docker, ffmpeg, Telegram Bot API