Proposals answered within 2 business days
All case studies
Analytics and BIPublic dataIntegrations

Public tender analytics platform with a competitor relationship graph

Client: Construction and development company entering public procurementIndustry: Construction24 April 2026
Results
tenders in the database
537k
bids linked to companies
315k
public registers in one view
4

Challenge

Before every tender, the team manually checked who else might bid, what prices they had submitted before and how often they had won. After the tender, the knowledge was kept nowhere, so the next one started from zero and the price was set by feel.

Tools available on the market help find tenders and write bids, but they do not analyse competitors or their pricing strategy. That was exactly what was missing.

Approach

Instead of a subscription to a ready-made service, we built the tool on free public sources: the Public Procurement Bulletin, KRS, the REGON register and the VAT taxpayers White List. The starting point is the company, not the notice.

The statistical layer came first and works on hard data. The language layer, which describes findings in plain text, is added on top of it in the next stage, so that the model comments on the numbers instead of inventing them.

Implementation

The backend synchronises notices daily and hourly, and enriches company profiles with registry data: management board, shareholders, capital and industry. The historical import runs as a stream, page by page, because loading hundreds of thousands of records at once overflowed memory.

The analytics modules calculate the probability of winning, the optimal price range and anomalies, for example companies that always win with one contracting authority or abnormally low bids. The interface has 17 views, including a graph of personal connections, a map, company comparison and alerts for watched competitors.

Results

The database holds 537k tenders and 315k bids linked to specific companies. Bid statistics, meaning the number of bids and the minimum, maximum and winning prices, have been calculated for 215k proceedings.

A competitor profile that used to require searching several registers is available in one view. The next stages are importing the years 2021-2024 and the AI descriptive layer.

How it is built

Architecture
FastAPI with SQLAlchemy and Alembic, PostgreSQL, Celery with Redis and a scheduler: a full synchronisation daily and an incremental one every hour. Frontend in Next.js.
Data sources
The Public Procurement Bulletin API, KRS, the REGON register and the VAT taxpayer White List. Companies are matched by tax ID (NIP) and enriched with board members, partners, capital and PKD industry codes.
Import
Streaming, page by page, with batched writes. Loading the whole dataset into memory failed at hundreds of thousands of records.
Analytics
Win probability from a multi-factor model, a price range against historical data, and detection of anomalies and groups of related companies. A personal-connections graph in D3.js and a map in Leaflet.
Product
17 views, a command palette, a watchlist of companies and alerts generated after every synchronisation.
Data limitations
The KRS parser handles limited liability companies, limited partnerships and commercial proxies (prokurenci). Some personal data is masked in the register (GDPR), which deliberately limits the scope of the connections graph.

Technologies

  • Python
  • FastAPI
  • Celery
  • SQLAlchemy
  • PostgreSQL
  • Redis
  • Next.js
  • D3.js
  • Leaflet
Case studies

More case studies

Real estate

AI sales assistant platform for property developers, powered by live inventory

A chat on the developer’s website answers questions about available flats and prices using live data. In a test of 106 scenarios, the number of answers containing invented facts fell to zero.

View case study
Education and personal development

AI coach on WhatsApp with participant memory and handover to humans

A thirty-day programme run as a WhatsApp conversation, with the author’s knowledge base and a memory of each participant. AI resolved 92% of cases without human involvement, and difficult conversations went to the coaches.

View case study
Real estate

Sales and after-sales system for a developer, with 3D walkthroughs built from floor plans

An offer generator with open tracking, a defects dashboard with the statutory 14-day deadline, complaints with a phone line, and 360° walkthroughs generated automatically from floor plans for 81 of 82 flats.

View case study
Healthcare

Health app taken over, with a new product catalogue and 47 languages

We took over the app from the previous contractor: an audit, security and payment fixes, a new product search and localisation into 47 languages, without stopping sales.

View case study
Real estate

Automated system for statutory reporting of flat prices to dane.gov.pl

An audit of 612 files against the act and the ministry template, a fix to the generator at the source, and automatic upload of 409 overdue resources to a portal that has no write API.

View case study
Technology

Kubernetes platform with GitOps and image signing for 32 applications

We are moving several dozen applications from a single server to a Kubernetes cluster with Git-based deployments, a security policy and backups whose restoration we check every week.

View case study
Media

AI short-video factory with human approval in a mobile web app

Script, illustrations, voiceover, subtitles and render in a single pipeline. A person approves every episode in a phone app, and publishing runs in scheduled slots.

View case study
Customer service

Voice AI assistant for a helpline, with a custom audio pipeline for Polish

A phone line where the caller talks to an AI. We rebuilt the whole audio path so that conversation in Polish flows, and the system detects the end of an utterance by meaning, not by silence.

View case study
Hospitality

Video menu platform for restaurants with HLS streaming and QR codes

A guest scans a code at the table and sees short videos instead of a list of dishes, with no app to install. Video in three quality levels, data isolation for each restaurant and a database restore verified in practice.

View case study
Pharma

Analytics dashboard for a group of e-prescription online shops, with no patient data

The dashboard collects orders from many shops in real time, while patients' personal data never leaves the shops. Privacy by design from the first version.

View case study