<?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: AIskaron</title>
    <description>The latest articles on DEV Community by AIskaron (@saidcveltran).</description>
    <link>https://dev.to/saidcveltran</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%2F4195214%2F4fc80518-1f72-4c75-b948-4fdb76f53fc9.png</url>
      <title>DEV Community: AIskaron</title>
      <link>https://dev.to/saidcveltran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saidcveltran"/>
    <language>en</language>
    <item>
      <title>Spain's official gazettes (BOE, BOJA, DOG, DOGC) as JSON: a free Apify Actor for daily alerts</title>
      <dc:creator>AIskaron</dc:creator>
      <pubDate>Tue, 20 Oct 2026 03:18:32 +0000</pubDate>
      <link>https://dev.to/saidcveltran/spains-official-gazette-boe-as-json-a-free-apify-actor-for-daily-alerts-45cn</link>
      <guid>https://dev.to/saidcveltran/spains-official-gazette-boe-as-json-a-free-apify-actor-for-daily-alerts-45cn</guid>
      <description>&lt;p&gt;If you build compliance dashboards, legal alerts or news tooling for Spain, sooner or later you need the new laws, decrees and orders as data. The Official State Gazette (BOE, &lt;em&gt;Boletín Oficial del Estado&lt;/em&gt;) publishes open data, but turning a daily summary into a clean, filtered, deduplicated feed is plumbing you would rather not write twice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NormaWatch&lt;/strong&gt; is a free, MIT-licensed Apify Actor that does this plumbing. It reads the BOE daily summary and returns the new &lt;strong&gt;general provisions&lt;/strong&gt; (Section I) as JSON, with official links. Think of it as a small "BOE API" you can schedule. Optionally it can also read three regional gazettes: BOJA (Andalusia), DOG (Galicia) and, since version 1.8, DOGC (Catalonia).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update: this post first described version 1.5. See "What's new in 1.6 to 1.8" below for what has changed since.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;p&gt;Each item is metadata plus links, never the full text:&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;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BOE-A-2026-21530"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-10-16"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"bulletin"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BOE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"section"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"department"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MINISTERIO DE HACIENDA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"epigraph"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Procedimientos administrativos"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Orden HAC/1000/2026, de 15 de octubre, por la que se aprueba un modelo de ejemplo."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"urlHtml"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.boe.es/diario_boe/txt.php?id=BOE-A-2026-21530"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"urlPdf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.boe.es/boe/dias/2026/10/16/pdfs/BOE-A-2026-21530.pdf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"urlXml"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.boe.es/diario_boe/xml.php?id=BOE-A-2026-21530"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"retrievedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-10-16T09:30:00.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"normType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Orden"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fuente de los datos: Agencia Estatal Boletín Oficial del Estado"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sourceUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.boe.es"&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;(This sample is invented, to show the shape; the fields are the real ones. DOGC items add &lt;code&gt;sourceUpdated&lt;/code&gt;, and some fields appear only with certain options.) In the Apify console the same data appears as a table, and you can export JSON or CSV or read it through the Apify API.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new in 1.6 to 1.8
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.6: laws that change other laws.&lt;/strong&gt; An optional &lt;code&gt;relations&lt;/code&gt; setting (off by default) reads the official legal analysis of each BOE provision. Each item then carries &lt;code&gt;changes&lt;/code&gt;: which norms it repeals, modifies, replaces, adds to, develops, transposes or corrects, with a link to the affected norm and a short note on what is affected. Weak links such as "cites" or "in accordance with" are left out. It applies to the BOE only (not the regional gazettes) and costs one extra request per provision (capped at 1000 documents per run), and a failure on one document does not fail the run.&lt;/p&gt;

&lt;p&gt;There is also &lt;code&gt;followIds&lt;/code&gt;: give it up to 100 BOE identifiers (&lt;code&gt;BOE-A-YYYY-N&lt;/code&gt;) for laws you care about, and any new provision that changes one of them is flagged in &lt;code&gt;followed&lt;/code&gt;. Those provisions are delivered even if your department, keyword or norm-type filters would have dropped them. In the e-mail, Telegram and Slack notices they appear first, under "Cambia una ley que sigues" (the notice text is in Spanish).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.7: public-sector job calls.&lt;/strong&gt; The optional Section II-B of the BOE ("Oposiciones y concursos") can be switched on with &lt;code&gt;"sections": ["2B"]&lt;/code&gt;. By default you get only the calls (&lt;em&gt;convocatorias&lt;/em&gt;); &lt;code&gt;includeProcessUpdates&lt;/code&gt; also adds follow-up notices such as lists of admitted and excluded candidates, tribunals and corrections. Each item gets a &lt;code&gt;stage&lt;/code&gt; field (&lt;code&gt;convocatoria&lt;/code&gt;, &lt;code&gt;actualizacion&lt;/code&gt; or &lt;code&gt;otro&lt;/code&gt;), derived from the title, so treat it as a hint, not an official field. Only metadata and links are kept, Section II-A (appointments) is never read, and a stricter filter drops titles that name people. The changelog counts roughly 35 provisions a day in total, mostly from local administrations and universities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.8: Catalonia.&lt;/strong&gt; &lt;code&gt;"DOGC"&lt;/code&gt; joins the &lt;code&gt;bulletins&lt;/code&gt; option next to &lt;code&gt;"BOE"&lt;/code&gt;, &lt;code&gt;"BOJA"&lt;/code&gt; and &lt;code&gt;"DOG"&lt;/code&gt;. It covers laws, decree-laws, decrees, legislative decrees and orders of the &lt;em&gt;Diari Oficial de la Generalitat de Catalunya&lt;/em&gt;, read from the Generalitat's open dataset. Items appear the day they are published, and unlike the DOG you can ask for past dates. Two limits to know about: it does not include resolutions or announcements, and the dataset does not publish the issuing department, so the &lt;code&gt;departments&lt;/code&gt; filter finds nothing in the DOGC (&lt;code&gt;keywords&lt;/code&gt; and &lt;code&gt;normTypes&lt;/code&gt; work). The data is under the Generalitat's open information licence (&lt;em&gt;Llicència oberta d'ús d'informació - Catalunya&lt;/em&gt;); every item carries the attribution, and DOGC items add a &lt;code&gt;sourceUpdated&lt;/code&gt; date. The Generalitat de Catalunya is not involved in NormaWatch and does not endorse it.&lt;/p&gt;

&lt;p&gt;If you do not turn these options on, your runs behave as before: with the same input, the output, the requests and the &lt;code&gt;onlyNew&lt;/code&gt; memory match the earlier version (1.7 also made the shared filter for personal titles slightly stricter).&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Date range:&lt;/strong&gt; up to 367 dates in one run, so you can backfill a year. Leave it empty for today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filters:&lt;/strong&gt; department, title keywords, and norm type. The norm type is derived by the Actor from the title (in the DOGC, from the rank of the norm), so treat it as a hint, not an official field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;onlyNew&lt;/code&gt;:&lt;/strong&gt; remembers what it already delivered, per filter combination, so a daily scheduled run returns only new items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notices:&lt;/strong&gt; an optional summary by e-mail, Telegram or Slack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regional gazettes (optional):&lt;/strong&gt; BOJA (Andalusia, CC BY 4.0), DOG (Galicia, CC BY-SA 4.0) and, since 1.8, DOGC (Catalonia, Generalitat open information licence). The DOG feed only holds the latest issue, so it works for daily runs, not for history; the BOJA and DOGC are queried one date at a time, so you can pass past dates. The Junta de Andalucía, the Xunta de Galicia and the Generalitat de Catalunya are not involved and do not endorse it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relations and followed laws (optional, since 1.6):&lt;/strong&gt; &lt;code&gt;relations&lt;/code&gt; and &lt;code&gt;followIds&lt;/code&gt;, described above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job calls (optional, since 1.7):&lt;/strong&gt; Section II-B with &lt;code&gt;sections: ["2B"]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section III (optional, off by default):&lt;/strong&gt; a restricted, filtered subset. Because that section contains titles that name people, a text filter reduces the risk but cannot remove it. Review the output before sharing it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A typical setup
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the Actor on the Apify Store.&lt;/li&gt;
&lt;li&gt;Run it once with a date range for your initial backfill.&lt;/li&gt;
&lt;li&gt;Create a daily schedule with &lt;code&gt;onlyNew: true&lt;/code&gt; and your filters, for example:
&lt;/li&gt;
&lt;/ol&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;"departments"&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;"hacienda"&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;"modelo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"orden"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNew"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItems"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&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;ol&gt;
&lt;li&gt;Point a webhook, a spreadsheet or your own dashboard at the dataset, or turn on the built-in notice.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To add the regional gazettes, set &lt;code&gt;"bulletins": ["BOE", "BOJA", "DOG", "DOGC"]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Polite by design
&lt;/h2&gt;

&lt;p&gt;It requests one day at a time with a pause between requests, retries with backoff, stops after repeated failures and identifies itself with a User-Agent. A year-long run (367 requests) took 7 minutes 19 seconds in a local test, with no failures; on Apify it may vary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It is &lt;strong&gt;not an official BOE or AEBOE service&lt;/strong&gt;, and the output is not an official text. For legal effect, use the text published by the Agency.&lt;/li&gt;
&lt;li&gt;Metadata and links only. No full text.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;stage&lt;/code&gt; field and the norm type are derived from titles, so they are hints.&lt;/li&gt;
&lt;li&gt;The DOG only serves its latest issue; the DOGC has no resolutions and no department.&lt;/li&gt;
&lt;li&gt;The BOE has its own free alert service, "Mi BOE". NormaWatch adds exact filters, memory of what was already delivered, and structured data.&lt;/li&gt;
&lt;li&gt;It is free to use; you only pay for your own Apify platform usage (see Apify's pricing page).&lt;/li&gt;
&lt;li&gt;The documentation is in Spanish, with a short English summary at the top of the README.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Apify Store: &lt;a href="https://apify.com/saidcveltran/normawatch-boe" rel="noopener noreferrer"&gt;https://apify.com/saidcveltran/normawatch-boe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source (MIT): &lt;a href="https://github.com/saidcveltran/normawatch-boe" rel="noopener noreferrer"&gt;https://github.com/saidcveltran/normawatch-boe&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Issues and ideas are welcome on GitHub. &lt;em&gt;By AIskaron.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opendata</category>
      <category>api</category>
      <category>apify</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
