<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eren Yeager</title>
    <description>The latest articles on DEV Community by Eren Yeager (@eren_yeager_9a2ae92830309).</description>
    <link>https://dev.to/eren_yeager_9a2ae92830309</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4014701%2F14dbe2c4-8d79-4c93-bcf4-d4f1834c28d0.png</url>
      <title>DEV Community: Eren Yeager</title>
      <link>https://dev.to/eren_yeager_9a2ae92830309</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eren_yeager_9a2ae92830309"/>
    <language>en</language>
    <item>
      <title>How to Track Public Tenders from UK and EU Sources with Apify</title>
      <dc:creator>Eren Yeager</dc:creator>
      <pubDate>Sat, 04 Jul 2026 08:32:57 +0000</pubDate>
      <link>https://dev.to/eren_yeager_9a2ae92830309/how-to-track-public-tenders-from-uk-and-eu-sources-with-apify-13pl</link>
      <guid>https://dev.to/eren_yeager_9a2ae92830309/how-to-track-public-tenders-from-uk-and-eu-sources-with-apify-13pl</guid>
      <description>&lt;p&gt;Public tenders and RFPs can be valuable, but checking different procurement portals manually is slow.&lt;/p&gt;

&lt;p&gt;A bid team, public-sector sales team, or GovCon consultant usually needs to answer a few practical questions quickly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who is the buyer?&lt;/li&gt;
&lt;li&gt;What is the opportunity?&lt;/li&gt;
&lt;li&gt;When is the deadline?&lt;/li&gt;
&lt;li&gt;Where is the official source?&lt;/li&gt;
&lt;li&gt;Is this worth reviewing?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this walkthrough, I’ll show a simple way to collect public tender records from UK and EU sources into a structured dataset using Apify.&lt;/p&gt;

&lt;p&gt;Actor used here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/fascinating_lentil/global-government-contracts-aggregator" rel="noopener noreferrer"&gt;https://apify.com/fascinating_lentil/global-government-contracts-aggregator&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Actor Supports
&lt;/h2&gt;

&lt;p&gt;The Global Government Contracts &amp;amp; Tenders Scraper currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UK Contracts Finder&lt;/li&gt;
&lt;li&gt;EU TED&lt;/li&gt;
&lt;li&gt;SAM.gov, when you provide your own SAM.gov API key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this tutorial, we’ll use UK Contracts Finder and EU TED because they do not require an API key for a first test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Open the Actor
&lt;/h2&gt;

&lt;p&gt;Open the actor on Apify:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/fascinating_lentil/global-government-contracts-aggregator" rel="noopener noreferrer"&gt;https://apify.com/fascinating_lentil/global-government-contracts-aggregator&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Try for free&lt;/strong&gt; or open it in Apify Console if you are already logged in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Use a Small First Input
&lt;/h2&gt;

&lt;p&gt;Start with a small run so the test stays quick and easy to inspect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"uk_contracts_finder"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ted"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"software"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"noticeStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxyConfiguration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"useApifyProxy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What the fields mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sources&lt;/code&gt;: procurement sources to search&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keywords&lt;/code&gt;: search terms such as &lt;code&gt;software&lt;/code&gt;, &lt;code&gt;cybersecurity&lt;/code&gt;, or &lt;code&gt;facilities management&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;noticeStatus&lt;/code&gt;: use &lt;code&gt;active&lt;/code&gt; for open opportunities&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxResults&lt;/code&gt;: total records to save&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;proxyConfiguration&lt;/code&gt;: proxy is usually not needed for official APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Run the Actor
&lt;/h2&gt;

&lt;p&gt;Click &lt;strong&gt;Start&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When the run finishes, open the &lt;strong&gt;Output&lt;/strong&gt; tab. You should see a table of tender or contract records.&lt;/p&gt;

&lt;p&gt;Important fields include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contractId&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buyerName&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buyerCountry&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;buyerRegion&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;noticeType&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;stage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;procurementMethod&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contractValue&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;currency&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;publishedDate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deadlineDate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;classificationCodes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;contractUrl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Review One Result
&lt;/h2&gt;

&lt;p&gt;A useful tender digest should start with decision fields, not every possible field.&lt;/p&gt;

&lt;p&gt;Example digest item:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Title: Roof Chiller Replacement At UCG Paddington
Buyer: United Colleges Group
Region: England / London
Notice type: Tender
Stage: Tender
Procurement method: Open procedure
Published: 2026-06-27
Deadline: 2026-07-20
Status: Active
Source: UK Contracts Finder
Official URL: https://www.contractsfinder.service.gov.uk/Notice/78662a62-9ddd-45eb-bdfa-e27352391e6e-903748
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a bid team, the main question is not just “can we scrape it?”&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we quickly decide whether this opportunity is worth opening?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is why buyer, deadline, location, category, value, status, and official URL matter so much.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Export the Data
&lt;/h2&gt;

&lt;p&gt;From the Apify dataset, you can export results as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSV&lt;/li&gt;
&lt;li&gt;Excel&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;HTML table&lt;/li&gt;
&lt;li&gt;API response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a manual workflow, CSV or Excel is enough.&lt;/p&gt;

&lt;p&gt;For an automated workflow, you can use the Apify API or connect the actor output to another tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Turn It Into a Weekly Digest
&lt;/h2&gt;

&lt;p&gt;Once the records are structured, you can filter them into a weekly digest.&lt;/p&gt;

&lt;p&gt;Useful filters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keyword&lt;/li&gt;
&lt;li&gt;country or region&lt;/li&gt;
&lt;li&gt;deadline window&lt;/li&gt;
&lt;li&gt;notice type&lt;/li&gt;
&lt;li&gt;procurement stage&lt;/li&gt;
&lt;li&gt;estimated value&lt;/li&gt;
&lt;li&gt;CPV or category code&lt;/li&gt;
&lt;li&gt;buyer name&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple digest format could look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weekly Software Tender Digest

1. Tender title
Buyer: ...
Deadline: ...
Region: ...
Value: ...
Why review: matches software keyword and deadline is still open.
Official URL: ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can build this manually first:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the actor once per week.&lt;/li&gt;
&lt;li&gt;Export the dataset to CSV.&lt;/li&gt;
&lt;li&gt;Filter for relevant records.&lt;/li&gt;
&lt;li&gt;Send a short email or report to your team.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Later, you can automate it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Schedule the actor on Apify.&lt;/li&gt;
&lt;li&gt;Store previously seen &lt;code&gt;contractId&lt;/code&gt; values.&lt;/li&gt;
&lt;li&gt;Keep only new opportunities.&lt;/li&gt;
&lt;li&gt;Send the digest by email or webhook.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical Tips
&lt;/h2&gt;

&lt;p&gt;Start narrow. A search for &lt;code&gt;software&lt;/code&gt; is easier to validate than a broad “all tenders” feed.&lt;/p&gt;

&lt;p&gt;Keep &lt;code&gt;maxResults&lt;/code&gt; small until you like the output format.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;active&lt;/code&gt; status when your goal is live opportunities.&lt;/p&gt;

&lt;p&gt;Use the official source URL as the final source of truth.&lt;/p&gt;

&lt;p&gt;Do not depend on contract value alone. Many public notices do not publish a clean value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Responsible Use
&lt;/h2&gt;

&lt;p&gt;This workflow is designed for official public procurement records.&lt;/p&gt;

&lt;p&gt;Do not use it to collect private information, build personal contact lists, or bypass access controls.&lt;/p&gt;

&lt;p&gt;Always check the source terms, local rules, and your organization’s procurement compliance requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;The useful product here is not just “scraping tenders.”&lt;/p&gt;

&lt;p&gt;The useful product is a clean opportunity list that helps someone decide what to review next.&lt;/p&gt;

&lt;p&gt;If you work with procurement, GovCon, public-sector sales, or bid writing, I’d be interested in your view:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which fields matter most when deciding whether a tender is worth opening?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Actor link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apify.com/fascinating_lentil/global-government-contracts-aggregator" rel="noopener noreferrer"&gt;https://apify.com/fascinating_lentil/global-government-contracts-aggregator&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
