AI idea: public procurement monitor for Czech companies with a daily email digest

AI ideas AutomationDataCompaniesToolsGuides

Public procurement is a stable source of demand for many Czech companies, but monitoring it is often fragmented, manual, and prone to errors. A salesperson or bid manager often checks several portals, watches deadlines, copies key information into spreadsheets, and only then evaluates whether the tender has real business potential. This is exactly the type of work where AI pays off: not by replacing human decision-making, but by shortening the time between a tender being published and its internal evaluation.

In this guide, we will build a practical AI project for a Czech company: a system that regularly collects publicly available tender data, filters it by industry, region, and value, uses a language model to create a brief summary, and sends a daily email digest to relevant people in the company. This is not an academic prototype, but a realistic internal tool that can be deployed within a few days to weeks depending on the size of the company and the quality of the input data.

If you want to compare which AI tools make sense today for automation and working with text, it is also worth following the AI tools on AIVýběr section on an ongoing basis. For broader context on automation in companies, the automation section may also be useful, where you will find related procedures and usage scenarios.

Introduction

Stock image

The typical problem in a Czech company is not that no one monitors public tenders. Rather, several people monitor them in different ways, each in their own way and without uniform rules. One person watches the contracting authority’s profile, another the bulletin portal, and a third only reacts to a forwarded link from the sales team. The result is delays, duplication, and uncertainty about who evaluated what.

NordVPN

The AI watcher solves this chaos in three layers. First, it centralizes inputs from relevant sources. Second, it converts inconsistent texts into a unified structure: who is issuing the tender, what they are requesting, for how much, by when, and why it is relevant to the company. Third, it delivers the result in a format people actually read, namely as a short daily email with a prioritized list of new opportunities.

It is important to set expectations correctly. The goal is not fully automated decision-making about which competition the company should enter. The goal is to reduce information noise and provide salespeople, product managers, or company leadership with quality materials at the same time and in the same format.

Project goal

Stock image

The goal of the project is to create an internal workflow that performs the following sequence every working day:

NordVPN

  • downloads new or changed public procurement records from selected sources,
  • normalizes the data into a unified structure,
  • filters out only tenders relevant to the specific company,
  • uses AI to prepare a brief and comparable summary,
  • evaluates relevance according to predefined rules,
  • sends a daily digest by email to specific recipients.

Practical result: instead of manually going through dozens of records, the sales team receives a morning email with 3 to 10 tenders that match the company’s industry, region, minimum value, and type of delivery. For each item, they see the deadline, estimated relevance, a brief justification, and a link to the original source.

Prerequisites

Stock image

Before you start building your first automation, verify four basic prerequisites.

OpenAI

  1. You have a clearly defined business profile for the company. It is not enough to say “we do IT.” You need a list of key services, products, synonyms, unwanted categories, target regions, and the minimum tender value.
  2. You have selected legal and technically accessible data sources. Work only with publicly available information and official sources. In the Czech environment, it usually makes sense to start with the Public Procurement Bulletin or contracting authority profiles, or other openly published sources depending on the industry.
  3. You have chosen a technical platform. For a smaller company, a combination of Python, a PostgreSQL database, a job scheduler, and an email service is enough. For a quick start, part of the process can also be automated in Make or Zapier, but with larger data volumes, a custom backend is usually more robust.
  4. You have a process owner. Ideally a business owner and a technical administrator. Without that, over time the system will start sending irrelevant items or, conversely, miss important tenders.

For language summarization and classification, use only real services with clear operating terms. In practice, options include the OpenAI API (https://platform.openai.com/) or Microsoft Azure OpenAI Service (https://azure.microsoft.com/products/ai-services/openai-service/) if you need corporate administration and enterprise governance. For sending transactional emails, services such as Resend (https://resend.com/) or SendGrid (https://sendgrid.com/) work well.

Implementation steps

article-ai-1

Step 1: Define what a “relevant tender” is for the company

What and why: First, you need to teach the system the company’s business logic. If you do a poor job on this step, AI may generate nice summaries, but based on poorly selected inputs. Relevance is more important than summarization itself. The system must know which tender categories you want to see, which to ignore, which regions you prefer, and where the minimum business value lies.

NordVPN

How exactly: Create a simple relevance profile in a table or YAML/JSON configuration. Include a list of keywords, synonyms, exclusion terms, regions, minimum estimated value, and preferred types of delivery. Also add 20 to 50 historical tenders the company actually handled and label them as “relevant” or “irrelevant.” You will use this later to fine-tune the classification.

Specific input: Internal list of company services: “cybersecurity, SIEM, SOC, penetration testing, ISO 27001 audit” plus regions “Prague, Central Bohemian Region, remote within the Czech Republic.”

Specific output: A configuration file with fields include_keywords, exclude_keywords, regions, min_value_czk, preferred_buyers.

Success metric: At least 80% of historically relevant tenders pass the filter, and at least 70% of clearly irrelevant tenders are excluded by the system already at this stage.

Once you have a business definition of relevance, you can move on to data collection. Here it is important not to start too broadly. One well-processed source is better than five half-processed ones.

Step 2: Choose data sources and set up regular collection

What and why: You need a reliable inflow of new records. Without stable ingestion, nothing else will work. Public tenders often differ in structure, format, and completeness. That is why it is advisable from the start to store both the original raw record and its later processed form.

How exactly: Select 1 to 3 official sources. For each one, verify whether it provides an API, XML feed, RSS, or at least a stable HTML structure. If no API is available, use scraping carefully, respecting the source’s terms and a reasonable query frequency. In Python, collection can be built using libraries such as requests, httpx, and BeautifulSoup. Store each record with the source URL, download time, and content hash so you can detect changes.

Specific input: Feed URL or a list of URLs of specific contracting authority profiles and a run schedule every working day at 6:00.

Specific output: A raw_tenders table with fields such as source_name, source_url, downloaded_at, raw_html or raw_xml, content_hash.

Success metric: Download success rate above 95% and zero record loss during repeated runs within the selected time window.

Now the data is flowing in. But in raw form, it is not very usable for sales or AI. The next step is to convert it into one understandable structure.

Step 3: Normalize the data into a unified schema

What and why: Each source describes a tender a little differently. In some places, the contracting authority name is a separate field; elsewhere it is hidden in the text. In some places, the bid submission deadline is explicit; elsewhere it must be found in the detail. For filtering, deduplication, and later AI processing, you need a unified data model.

How exactly: Design a schema with fields such as tender_id, title, buyer_name, description, cpv_codes, estimated_value_czk, submission_deadline, region, source_url, published_at. Build a parser for each source that fills these fields. For missing data, store null; do not invent substitute values. At the same time, introduce deduplication logic based on a combination of identifier, URL, and title similarity.

Specific input: Raw XML record or HTML tender detail from the previous step.

Specific output: A normalized_tenders table with one row per tender in a consistent structure across sources.

Success metric: Completion of key fields title, source_url, buyer_name, and submission_deadline for at least 90% of records where they are available in the source.

Once you have a unified structure, it is time for the first real reduction in volume. Before involving a language model, remove everything the company clearly does not want.

Step 4: Do rule-based pre-filtering and relevance scoring

What and why: AI is more expensive and slower than simple rules. That is why it makes sense to first use a cheap filter based on keywords, CPV codes, region, estimated value, and deadline. This reduces the number of candidates for subsequent AI analysis and also improves the accuracy of the result.

How exactly: Calculate a basic relevance score over the normalized data. For example: +20 points for a match with a main service, +15 for a preferred region, +10 for a value above the specified threshold, -30 for the presence of exclusion terms, -20 for a deadline within 24 hours. If you have CPV codes, use them as a strong signal. Set a threshold below which the tender does not enter the AI pipeline at all.

Specific input: Normalized tender record and the relevance configuration profile from step 1.

Specific output: Fields rule_score, rule_reason, and status passed_to_ai=true/false.

Success metric: Reduction of record volume for AI by at least 60% while retaining at least 85% of truly relevant tenders.

After the rule-based filter, you will be left with a smaller and higher-quality set. Now it makes sense to use AI where it truly adds value: explanation, summarization, and finer classification.

Step 5: Add AI summarization and final classification

What and why: A language model helps convert long, often bureaucratic text into a brief and comparable format. At the same time, it can estimate relevance according to the company’s business profile and explain why the tender does or does not make sense. The key is not to let the model hallucinate freely, but to tie it to specific input and a fixed output format.

How exactly: Send only the necessary context to the model: tender title, description, buyer, deadline, value, region, and the company’s internal profile. The prompt should have a clear instruction: return JSON with fields summary_cz, fit_score_0_100, reasons_pro, reasons_against, recommended_team. Add an instruction that the model must not invent information that is not in the input. Validate the output against the schema. If validation fails, repeat the request or mark the record for manual review.

Specific input: Tender detail text of, for example, 2,000 to 8,000 characters plus the company relevance profile.

Specific output: Structured AI summary: “The City of Brno is requesting SOC security monitoring services for 48 months; high relevance for the company due to SOC and SIEM; the risk is a short deadline and a required reference in the public sector.”

Success metric: A valid structured output is produced for at least 90% of records, and human evaluation marks the summary as factually usable in at least 85% of cases.

At this point, the system can already select and describe relevant tenders. What remains is to deliver them in a way that people in the company will actually work with.

Step 6: Build a daily email digest

What and why: The best internal tool is one that people do not have to actively open. An email digest is simple, universal, and easy to audit. The important thing is not to overwhelm recipients: the digest should be short, prioritized, and readable even on mobile.

How exactly: Every morning, select new or changed tenders since the last send. Sort them by a combination of fit_score, tender value, and deadline proximity. Put a maximum of 10 items in the email and divide them into sections “high priority” and “worth considering.” For each item, include the title, buyer, deadline, brief AI summary, reason for relevance, source link, and an internal label indicating who it belongs to. Handle sending through a specialized service, not through corporate SMTP without reputation management.

Specific input: List of AI-evaluated tenders from the last 24 hours.

Specific output: HTML email with a subject such as “Public tenders – 6 new relevant opportunities for Tuesday 14 May.”

Success metric: Deliverability above 98%, internal digest open rate above 60%, and at least 30% of items opened via a click on the source link.

Once the digest works, the project is practically usable. Still, it makes sense to add one more layer: simple feedback collection, thanks to which the system improves over time.

Step 7: Add feedback from the sales team

What and why: Without feedback, you will not know whether AI and the rules are really helping. The sales team should be able to mark with one click that a tender was relevant, irrelevant, or duplicate. You can then use this data to adjust both the rules and the prompts.

How exactly: Add three links or buttons to the email or internal overview: “relevant,” “irrelevant,” “we are handling it.” Store each click with the tender ID, user, and time. Once a week, evaluate the most common reasons for errors: bad keywords, region too broad, false match in the title, hallucinations in the summary, incorrect reading of value or deadline.

Specific input: Salesperson ratings on 20 digests during a month.

Specific output: Human feedback dataset and a list of recommended configuration adjustments.

Success metric: Every week, you receive feedback on at least 20% of sent items, and relevance accuracy improves month over month.

This completes the basic implementation. What follows is verification that the system works not only technically, but also commercially.

Testing

Divide testing into three layers.

NordVPN

1. Technical tests of parsers and workflow. For each source, save representative data samples and write tests that verify correct extraction of the title, deadline, buyer, and URL. If the source’s HTML structure changes, the test will reveal it before a salesperson notices.

2. Relevance testing on historical data. Take 100 to 300 older tenders and compare the system output with what a human would mark as relevant. Track precision and recall. For an internal watcher, it is usually more practical to prioritize higher precision: it is better to send fewer items, but high-quality ones.

3. User testing of the digest. Send the digest to 3 to 5 people from sales and ask only one thing: does it save time in the morning and lead to faster decisions? If not, the problem is usually not the model, but the output format or poor priority ordering.

Recommended metrics for pilot operation:

  • relevance precision above 70%,
  • recall above 80% on the target sample,
  • average time from publication to internal digest within 4 hours on working days,
  • less than 5% duplicates in the digest,
  • user satisfaction at least 4 out of 5.

Deployment

For small and medium-sized companies, the following deployment approach is reasonable:

NordVPN

  1. Pilot in one department. Launch the digest only for sales or bid management, typically for 2 to 4 weeks.
  2. Limited number of sources. Start with one main source and add others only after stabilization.
  3. Clear operating mode. Define who handles data collection outages, who adjusts filters, and who approves prompt changes.
  4. Monitoring and logging. Track the number of downloaded records, the number of filtered items, AI call error rate, runtime, and email delivery.
  5. Security and compliance. Store only what you need. If you add internal notes or sensitive business comments to the system, set access rights and a retention policy.

Technically, operation in Docker containers with daily scheduling via cron or orchestration such as GitHub Actions works well for smaller volumes, or cloud jobs in Azure or AWS. A PostgreSQL database is sufficient and easily auditable for this type of project.

Limits

Every similar project has its limits, and it is better to acknowledge them upfront.

NordVPN

  • Incomplete or inconsistent data. Some sources do not contain all important information. AI cannot reliably “infer” it if it is not in the input.
  • Changes in source structure. With HTML scraping, parser maintenance must be expected.
  • Model hallucinations. That is why AI output must always be tied to specific text and validated against a structure.
  • False positives and false negatives. Especially with generic service names or multi-discipline tenders.
  • Legal and operational limits of sources. Not every website should be downloaded aggressively. Always respect the operator’s terms and technical limits.

A good decision rule is: an AI watcher is a system for preselection and prioritization, not a replacement for business judgment or legal assessment of tender documentation.

FAQ

Is this project suitable for a smaller company with up to 50 employees?

Yes. A smaller company often appreciates the time savings the most. Start with one source, a simple filter, and one daily digest for 2 to 3 people.

What is the minimum technical stack?

Python, PostgreSQL, a job scheduler, an email service, and an API for a language model. Complex infrastructure is not necessary for a pilot.

How much does operation cost?

It depends on the volume of records and the number of AI calls. If you first filter the data well using rules, model costs will remain low. The biggest item is usually the initial implementation and parser maintenance.

Can it be operated without an AI model?

Yes, but you will only get a list of filtered tenders without high-quality summaries and finer prioritization. For many companies, even that can be a useful first step.

Does fine-tuning the model make sense?

In most cases, not at the beginning. First improve the input data, relevance rules, prompt, and feedback collection. That usually brings a greater effect than fine-tuning.

How often should the digest be sent?

The standard is once daily in the morning. If the company competes in very fast procedures, you can also add a midday summary or an alert for high-priority tenders with a short deadline.

Conclusion

An AI public tender watcher is exactly the type of internal project that has a fast return on investment while not overpromising. You do not need to build a complex autonomous agent. It is enough to properly handle seven steps: define relevance, reliably collect data, normalize it, pre-filter it with rules, add AI summaries, deliver the result in a daily email, and continuously collect feedback.

If you do it in this order, you will get a system that reduces routine work for salespeople, gives company leadership a better overview of new opportunities, and enables the bid team to respond earlier. And in public procurement, that is often the difference between a missed opportunity and a bid submitted on time.

Recommended AI stack for implementation

Choose tools according to your budget and level of automation. Below is a direct overview of services for implementing the project.

Service Service description Offer
NordVPN VPN service for privacy protection and secure connections. Open offer
Semrush SEO and marketing platform for analysis and traffic growth. Open offer
Make Advanced visual automation for workflows and integrations. Open offer
Hostinger Web hosting and domains for fast website launch. Open offer
Fiverr Marketplace for freelancers and external specialists. Open offer
Adobe Creative tools for graphics, video, and digital content. Open offer
Canva Online design tool for graphics, presentations, and social media. Open offer
Jasper AI tool for marketing copy and content campaigns. Open offer

Note: We use affiliate links for listed services. If you purchase through them, we may earn a commission at no extra cost to you.

Links in the article

Sources of illustrative images

The custom illustrative image was created using the OpenAI Images API.