<?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: TNDrApi</title>
    <description>The latest articles on DEV Community by TNDrApi (@tndrapi).</description>
    <link>https://dev.to/tndrapi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3824588%2Fe8b6a32f-1d94-4d7c-be6f-14bec62504fc.png</url>
      <title>DEV Community: TNDrApi</title>
      <link>https://dev.to/tndrapi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tndrapi"/>
    <language>en</language>
    <item>
      <title>How to access EU &amp; French public tenders via API (free, no auth required)</title>
      <dc:creator>TNDrApi</dc:creator>
      <pubDate>Sat, 14 Mar 2026 22:10:01 +0000</pubDate>
      <link>https://dev.to/tndrapi/how-to-access-eu-french-public-tenders-via-api-free-no-auth-required-1b57</link>
      <guid>https://dev.to/tndrapi/how-to-access-eu-french-public-tenders-via-api-free-no-auth-required-1b57</guid>
      <description>&lt;p&gt;Every year, 50,000+ public procurement notices are published in France and across the EU. Most developers trying to build tender monitoring tools waste days scraping fragile government websites that break without warning.&lt;/p&gt;

&lt;p&gt;There's a better way. And it's completely free.&lt;/p&gt;

&lt;h2&gt;
  
  
  The official sources nobody talks about
&lt;/h2&gt;

&lt;p&gt;Both &lt;strong&gt;BOAMP&lt;/strong&gt; (France's official public procurement bulletin) and &lt;strong&gt;TED&lt;/strong&gt; (Tenders Electronic Daily - the EU's official source) have free, documented APIs that require zero authentication. No API key, no registration, no rate limit headaches.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BOAMP: powered by Opendatasoft, returns clean JSON&lt;/li&gt;
&lt;li&gt;TED API v3: official EU endpoint covering all 27 member states&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together they represent ~50,000 new notices per year for France alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with using them directly
&lt;/h2&gt;

&lt;p&gt;The raw APIs return inconsistent formats, buried budget fields, opaque deadline structures, and no sector labeling. You end up writing 200 lines of parsing code before you can do anything useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;Tender Intelligence API&lt;/strong&gt;. A unified wrapper around both sources that gives you structured, clean data per tender:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;"IT infrastructure maintenance"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Buyer&lt;/td&gt;
&lt;td&gt;City of Lyon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Budget&lt;/td&gt;
&lt;td&gt;120,000 €&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deadline&lt;/td&gt;
&lt;td&gt;Oct 15 (44 days left)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sector&lt;/td&gt;
&lt;td&gt;IT / Software&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source&lt;/td&gt;
&lt;td&gt;BOAMP / TED&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quick example in Python
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://tender-intelligence.p.rapidapi.com/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-RapidAPI-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;informatique&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tenders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tenders&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;budget&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; — &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;days_left&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; days left&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Available endpoints
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /search?q=...&lt;/code&gt; — keyword search across BOAMP + TED in parallel&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /sectors&lt;/code&gt; — list of 15 labeled sectors&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /sectors/{id}&lt;/code&gt; — all tenders in a sector (IT, Health, Construction...)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /notices/{source}/{id}&lt;/code&gt; — full detail of a single notice&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /health&lt;/code&gt; — upstream source status&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Free tier available
&lt;/h2&gt;

&lt;p&gt;A free plan with 100 requests/month is available. No credit card required. Paid plans start at $29/month for unlimited access.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://rapidapi.com/TNDrApi/api/tender-intelligence" rel="noopener noreferrer"&gt;Try Tender Intelligence API on RapidAPI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The GitHub repo is also public if you want to contribute or self-host.&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
