<?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: Mehdi Kabbaj</title>
    <description>The latest articles on DEV Community by Mehdi Kabbaj (@tresor4k).</description>
    <link>https://dev.to/tresor4k</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%2F3702098%2F5ae6324e-224f-46be-b3aa-4143635d573a.jpg</url>
      <title>DEV Community: Mehdi Kabbaj</title>
      <link>https://dev.to/tresor4k</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tresor4k"/>
    <language>en</language>
    <item>
      <title>We open-sourced property tax rates for 13,241 US jurisdictions — state averages are lying to you</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Mon, 20 Jul 2026 11:36:53 +0000</pubDate>
      <link>https://dev.to/tresor4k/we-open-sourced-property-tax-rates-for-13241-us-jurisdictions-state-averages-are-lying-to-you-2bkj</link>
      <guid>https://dev.to/tresor4k/we-open-sourced-property-tax-rates-for-13241-us-jurisdictions-state-averages-are-lying-to-you-2bkj</guid>
      <description>&lt;p&gt;We just released what we believe is the most granular open dataset of US residential property taxes: &lt;strong&gt;51 states/DC, 3,132 counties and 10,058 cities&lt;/strong&gt;, each with its effective tax rate, median annual bill, median home value and median household income. It's CC BY 4.0, on &lt;a href="https://github.com/tresor4k/calcuris-opendata" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and &lt;a href="https://doi.org/10.5281/zenodo.21454886" rel="noopener noreferrer"&gt;Zenodo (DOI 10.5281/zenodo.21454886)&lt;/a&gt;. Here's what building it taught us.&lt;/p&gt;

&lt;h2&gt;
  
  
  State averages hide most of the story
&lt;/h2&gt;

&lt;p&gt;Everyone quotes state rankings: New Jersey and Illinois at the top (1.88% effective rate), Hawaii at the bottom (0.29%). True, but nearly useless for an actual homeowner, because &lt;strong&gt;within one state, county rates routinely vary by 3-5×&lt;/strong&gt; — and city rates vary even more.&lt;/p&gt;

&lt;p&gt;A few examples from the data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Texas&lt;/strong&gt; averages 1.40%, but its 200+ counties range from under 0.5% to well over 2%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Jersey's median annual bill ($9,590) is 12× Alabama's ($788)&lt;/strong&gt; — yet parts of Alabama out-tax parts of New Jersey relative to income.&lt;/li&gt;
&lt;li&gt;The "cheap" states are only cheap on paper: Hawaii's 0.29% applies to a median home value of $841k, so the median bill ($2,239) is still nearly 3× Alabama's.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's why we resolve the lookup down to the individual city on the &lt;a href="https://calcuris.com/us/property-tax-calculator/" rel="noopener noreferrer"&gt;US property tax calculator&lt;/a&gt; — state pages like &lt;a href="https://calcuris.com/us/property-tax-calculator/new-jersey/" rel="noopener noreferrer"&gt;New Jersey&lt;/a&gt; list every county and city with its own rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the dataset is built
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Method&lt;/strong&gt;: effective rate = median annual real-estate taxes ÷ median owner-occupied home value (the ratio-of-medians method the Tax Foundation and SmartAsset use).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;County/city figures&lt;/strong&gt;: US Census Bureau ACS 2023 5-year estimates, tables B25103 (taxes paid), B25077 (home value), B19013 (income), B01003 (population).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State rates&lt;/strong&gt;: Tax Foundation 2024, as republished June 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-noise filters&lt;/strong&gt;: no imputed values — jurisdictions without real median tax AND home-value estimates are dropped; places under 2,500 population excluded.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  For Rust folks
&lt;/h2&gt;

&lt;p&gt;The state and county tables also ship as a zero-dependency crate, &lt;a href="https://crates.io/crates/us-property-tax-data" rel="noopener noreferrer"&gt;&lt;code&gt;us-property-tax-data&lt;/code&gt;&lt;/a&gt; — CSVs embedded via &lt;code&gt;include_str!&lt;/code&gt;, parsed by a ~40-line internal parser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;us_property_tax_data&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;counties&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;nj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;state&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"NJ"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;   &lt;span class="c1"&gt;// effective_rate_pct = 1.88&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;counties&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"TX"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// every Texas county, ranked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Reuse it
&lt;/h2&gt;

&lt;p&gt;Everything is CC BY 4.0 — journalists, researchers and builders can take any figure or the whole CSV with attribution. Citation formats and per-figure credit lines are on the &lt;a href="https://calcuris.com/cite-this-data/" rel="noopener noreferrer"&gt;cite-this-data page&lt;/a&gt;. If you need a custom cut (one metro, one ranking), ask — it's free.&lt;/p&gt;

</description>
      <category>opendata</category>
      <category>data</category>
      <category>rust</category>
      <category>finance</category>
    </item>
    <item>
      <title>We shipped an open dataset as an MCP server and a Rust crate — here's the playbook</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Mon, 20 Jul 2026 11:33:55 +0000</pubDate>
      <link>https://dev.to/tresor4k/we-shipped-an-open-dataset-as-an-mcp-server-and-a-rust-crate-heres-the-playbook-4o38</link>
      <guid>https://dev.to/tresor4k/we-shipped-an-open-dataset-as-an-mcp-server-and-a-rust-crate-heres-the-playbook-4o38</guid>
      <description>&lt;p&gt;We recently published an open dataset — &lt;a href="https://dev.to/tresor4k/we-mapped-us-search-demand-for-1008-spreadsheet-templates-heres-what-people-actually-want-2hl"&gt;US search demand for 1,008 spreadsheet&lt;br&gt;
templates&lt;/a&gt;&lt;br&gt;
(CC BY 4.0, Zenodo DOI &lt;a href="https://doi.org/10.5281/zenodo.21416251" rel="noopener noreferrer"&gt;10.5281/zenodo.21416251&lt;/a&gt;).&lt;br&gt;
A dataset sitting in a repository is only half useful, so this week we shipped it in two&lt;br&gt;
forms developers can actually consume: an MCP server and a Rust crate. Here's what that&lt;br&gt;
looked like, and the small decisions that mattered.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. The MCP server: &lt;code&gt;tabletemplates-mcp&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP (Model Context Protocol)&lt;/a&gt; is the emerging standard&lt;br&gt;
for giving AI assistants tools. Ours exposes four read-only tools over the catalog:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;search_templates&lt;/code&gt; — substring search over the 1,008 keywords, sorted by US volume&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_template_categories&lt;/code&gt; — the 16 categories with aggregated demand&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;top_template_demand&lt;/code&gt; — highest-demand keywords, optionally per category&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;find_free_template&lt;/code&gt; — the 146 keywords that have a &lt;a href="https://tabletemplates.com/free/" rel="noopener noreferrer"&gt;free, no-signup
implementation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&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;"mcpServers"&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;"tabletemplates"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"args"&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;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tabletemplates-mcp"&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="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;Two design choices worth stealing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every tool response embeds &lt;code&gt;source&lt;/code&gt;, &lt;code&gt;reference_url&lt;/code&gt; and &lt;code&gt;dataset_doi&lt;/code&gt;.&lt;/strong&gt; When an&lt;br&gt;
assistant answers from your data, you want the citation to travel with the payload —&lt;br&gt;
otherwise the provenance dies at the first hop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No network calls.&lt;/strong&gt; The catalog is 1,008 rows; we embed it as JSON in the package.&lt;br&gt;
The server works offline, cold-starts instantly, and there is no API to keep alive.&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://github.com/tresor4k/tabletemplates-mcp" rel="noopener noreferrer"&gt;github.com/tresor4k/tabletemplates-mcp&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. The Rust crate: &lt;code&gt;us-excel-template-data&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Same philosophy, different ecosystem:&lt;br&gt;
&lt;a href="https://crates.io/crates/us-excel-template-data" rel="noopener noreferrer"&gt;&lt;code&gt;us-excel-template-data&lt;/code&gt;&lt;/a&gt; embeds the&lt;br&gt;
CSV via &lt;code&gt;include_str!&lt;/code&gt; and parses it with a ~40-line internal parser. Zero dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;us_excel_template_data&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;top&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;hits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"invoice"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;cats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;catalog&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 16, sorted by combined volume&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why a data crate at all? Because &lt;em&gt;data crates are underrated&lt;/em&gt;. Every analyst who wants&lt;br&gt;
this data in a pipeline gets a typed API and a version number instead of a URL and a&lt;br&gt;
prayer. The docs on &lt;a href="https://docs.rs/us-excel-template-data" rel="noopener noreferrer"&gt;docs.rs&lt;/a&gt; render the full&lt;br&gt;
provenance chain (method, DOIs, category definitions) next to the API.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What the data says (short version)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project management&lt;/strong&gt; is the largest category (130 keywords, ~32k monthly searches) —
see the &lt;a href="https://tabletemplates.com/project-management/" rel="noopener noreferrer"&gt;project management templates index&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bookkeeping &amp;amp; accounting&lt;/strong&gt; has the highest demand &lt;em&gt;density&lt;/em&gt;: 45 keywords but ~24k
searches — led by &lt;em&gt;excel accounting software&lt;/em&gt; at 8,250/month
(&lt;a href="https://tabletemplates.com/bookkeeping-accounting/" rel="noopener noreferrer"&gt;bookkeeping &amp;amp; accounting templates&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;People overwhelmingly search for &lt;strong&gt;artifacts, not features&lt;/strong&gt;: "template", "tracker",
"spreadsheet" — they want the file, filled in, ready to open.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;If you publish open data, ship it where developers already are: a package registry and&lt;br&gt;
a tools protocol. The marginal cost after cleaning the dataset was one afternoon; the&lt;br&gt;
result is that both humans and AI assistants can now query the catalog natively.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dataset: CC BY 4.0 — &lt;a href="https://tabletemplates.com/" rel="noopener noreferrer"&gt;TableTemplates&lt;/a&gt; Data &amp;amp; Research Team.&lt;br&gt;
Also archived on &lt;a href="https://doi.org/10.7910/DVN/A2QIVN" rel="noopener noreferrer"&gt;Harvard Dataverse&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>rust</category>
      <category>opendata</category>
      <category>ai</category>
    </item>
    <item>
      <title>We mapped US search demand for 1,008 spreadsheet templates — here's what people actually want</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Fri, 17 Jul 2026 15:20:45 +0000</pubDate>
      <link>https://dev.to/tresor4k/we-mapped-us-search-demand-for-1008-spreadsheet-templates-heres-what-people-actually-want-2hl</link>
      <guid>https://dev.to/tresor4k/we-mapped-us-search-demand-for-1008-spreadsheet-templates-heres-what-people-actually-want-2hl</guid>
      <description>&lt;p&gt;People search for spreadsheet templates roughly 100,000 times a month in the US alone. While building an open catalog of Excel and Google Sheets templates, we compiled the search demand behind 1,008 template keywords — and the shape of that demand surprised us.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dataset
&lt;/h2&gt;

&lt;p&gt;We published the full dataset on Zenodo (CC BY 4.0): &lt;a href="https://doi.org/10.5281/zenodo.21416251" rel="noopener noreferrer"&gt;US Search Demand for Excel &amp;amp; Google Sheets Templates — 1,008 Keywords (2026)&lt;/a&gt;. Each row: keyword, estimated monthly US volume, category, and — where one exists — a link to a free implementation of the template.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things the data shows
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Demand is a long tail, not a head.&lt;/strong&gt; The single biggest keyword we tracked ("excel schedule") pulls ~1,900 searches/month, but the &lt;em&gt;median&lt;/em&gt; keyword pulls under 100. Half of all demand lives in keywords almost nobody optimizes for — which is exactly why generic "template gallery" sites dominate the head and ignore the tail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Money tasks dominate.&lt;/strong&gt; Bookkeeping, budgeting, invoicing and payroll categories together account for more search volume than all other categories combined. People don't search for pretty spreadsheets; they search for spreadsheets that move money correctly. That has a direct engineering consequence: formula correctness matters more than design. (Our own build pipeline runs every generated workbook through a formula-evaluation harness that asserts cell-level parity to the cent between the Excel and Google Sheets builds — because a broken SUM in a payroll sheet is not a cosmetic bug.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. "Free" queries convert to real intent.&lt;/strong&gt; Keywords containing "free download" almost always have a top-5 dominated by email-gated PDFs or SaaS signup walls. There's a persistent gap between what searchers ask for (a file) and what ranks (a funnel). We've been filling that gap with a &lt;a href="https://tabletemplates.com/free/" rel="noopener noreferrer"&gt;library of free, no-signup templates&lt;/a&gt; — each one a real .xlsx + Google Sheets pair, e.g. the &lt;a href="https://tabletemplates.com/bookkeeping-accounting/" rel="noopener noreferrer"&gt;bookkeeping &amp;amp; accounting set&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reproducing the analysis
&lt;/h2&gt;

&lt;p&gt;The Zenodo CSV loads straight into pandas:&lt;br&gt;
&lt;/p&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;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;excel-template-search-demand-us-20260717.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&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;monthly_search_volume_us&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you extend the dataset (other locales, other formats like Notion or Airtable), the CC BY license just asks for attribution back to the source.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>excel</category>
      <category>opendata</category>
      <category>seo</category>
    </item>
    <item>
      <title>We scanned 474 French SMB websites for AI-readiness. The average score was 48/100.</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Thu, 16 Jul 2026 08:22:40 +0000</pubDate>
      <link>https://dev.to/tresor4k/we-scanned-474-french-smb-websites-for-ai-readiness-the-average-score-was-48100-4obp</link>
      <guid>https://dev.to/tresor4k/we-scanned-474-french-smb-websites-for-ai-readiness-the-average-score-was-48100-4obp</guid>
      <description>&lt;p&gt;Here's a paradox we didn't expect to find so clearly in the data: French small businesses almost never block AI crawlers, but their sites give those crawlers almost nothing worth reading.&lt;/p&gt;

&lt;p&gt;We run an AEO (AI Engine Optimization) scanner at &lt;a href="https://lescreavores.fr" rel="noopener noreferrer"&gt;Les Créavores&lt;/a&gt;, a French web agency, and we wanted real numbers instead of vibes before writing anything about "AI search readiness." So we pointed our audit engine — the same one behind our free scanner — at a sample of French SMB websites and measured what's actually there, structurally, for an AI agent or crawler to parse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology, briefly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;474 sites analyzed&lt;/strong&gt; (509 collected, 35 were not analyzable — dead links, JS-only shells that timed out, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 sectors × 15 cities&lt;/strong&gt; across France&lt;/li&gt;
&lt;li&gt;Sample = &lt;strong&gt;top 10 organic Google local results&lt;/strong&gt; per sector/city combo, collected via Brightdata&lt;/li&gt;
&lt;li&gt;Collection date: &lt;strong&gt;2026-07-13&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homepage-only&lt;/strong&gt; audit — we did not crawl full sites. This measures structural readiness, not actual AI visibility or citation frequency. Those are different questions, and we're not claiming this dataset answers the second one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full dataset is public under &lt;strong&gt;CC-BY 4.0&lt;/strong&gt; with a DOI, links at the bottom if you want to dig into the raw numbers yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline number
&lt;/h2&gt;

&lt;p&gt;Average readiness score: &lt;strong&gt;48/100&lt;/strong&gt; (median 49). &lt;strong&gt;80.8%&lt;/strong&gt; of sites scored below 60. Only &lt;strong&gt;1.3%&lt;/strong&gt; scored above 80 ("excellent" in our scoring band).&lt;/p&gt;

&lt;p&gt;Sub-scores tell you where the points are actually leaking:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sub-score&lt;/th&gt;
&lt;th&gt;Average&lt;/th&gt;
&lt;th&gt;Max&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Crawlability&lt;/td&gt;
&lt;td&gt;14.9&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structure&lt;/td&gt;
&lt;td&gt;17.4&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trust&lt;/td&gt;
&lt;td&gt;15.6&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;None of the three dimensions is close to saturated. This isn't one weak spot dragging down an otherwise solid score — it's a broad, even shortfall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agentic navigation is close to absent
&lt;/h2&gt;

&lt;p&gt;We check three basic signals of "can an AI agent actually work with this site": a structured accessibility tree (semantic landmarks like &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; plus alt text coverage), a usable &lt;code&gt;llms.txt&lt;/code&gt;, and genuinely open access for agents (no blocked AI bots, no &lt;code&gt;noindex&lt;/code&gt;, canonical and viewport present). Average: &lt;strong&gt;1.2 out of 3&lt;/strong&gt; checks passed. Only &lt;strong&gt;5.3%&lt;/strong&gt; of sites pass all three.&lt;/p&gt;

&lt;p&gt;That's the number that worries me most, honestly. Chatbots reading a homepage for a summary is one use case. Agents trying to complete a task (book something, get a quote, find a phone number) on a site is a different, harder bar, and almost nobody clears it.&lt;/p&gt;

&lt;h2&gt;
  
  
  llms.txt: present but mostly wrong
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;19.6%&lt;/strong&gt; of sites have an &lt;code&gt;llms.txt&lt;/code&gt; file. Sounds decent for an emerging convention — until you check conformance: only &lt;strong&gt;13.3%&lt;/strong&gt; are actually conformant to spec. So roughly a third of the sites that bothered to add the file got the format wrong enough that it likely isn't doing its job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nobody is blocking AI bots
&lt;/h2&gt;

&lt;p&gt;This is the other half of the paradox. Only &lt;strong&gt;1.3%&lt;/strong&gt; of sites block AI crawlers in &lt;code&gt;robots.txt&lt;/code&gt;. &lt;strong&gt;85.9%&lt;/strong&gt; are fully open access — no restrictions on any of the major AI user-agents at all.&lt;/p&gt;

&lt;p&gt;So the door is wide open. GPTBot, ClaudeBot, PerplexityBot, whatever — they can all walk in. The problem isn't access. It's that once they're in, there's often nothing structured to cite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structured data and authorship
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;JSON-LD present: &lt;strong&gt;74.7%&lt;/strong&gt; (the one bright spot — most sites at least attempt some schema)&lt;/li&gt;
&lt;li&gt;Identifiable author/byline: &lt;strong&gt;17.9%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Basic accessibility markers: &lt;strong&gt;19.2%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three out of four sites ship some JSON-LD, but fewer than one in five have a clear "who wrote/verified this" signal, which matters for both traditional E-E-A-T and how confidently an LLM can attribute or trust a claim from the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sector and geography spread
&lt;/h2&gt;

&lt;p&gt;Best-performing sector: &lt;strong&gt;consulting&lt;/strong&gt; (54.8 avg). Worst: &lt;strong&gt;restaurants&lt;/strong&gt; (43.6). Best city: &lt;strong&gt;Paris&lt;/strong&gt; (55.8). Worst: &lt;strong&gt;Rennes&lt;/strong&gt; (43.8). The spread exists but it's not huge — nobody is close to acing this, sector or city doesn't change the fundamental picture much.&lt;/p&gt;

&lt;h2&gt;
  
  
  The traffic shift is already happening
&lt;/h2&gt;

&lt;p&gt;Here's a smaller, more anecdotal data point, but it's real and it's ours: on our own site's GA4, over the last 7 days, AI assistants sent more sessions than Google organic search. Copilot (10) + Perplexity (3) + ChatGPT (2) = &lt;strong&gt;15 sessions&lt;/strong&gt;, versus &lt;strong&gt;6&lt;/strong&gt; from Google organic. That's &lt;strong&gt;2.5x&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's one site, one week — not a trend line you should extrapolate a market shift from. But it's a live signal that this isn't a purely theoretical concern for small sites. Someone is already sending traffic through these channels, on top of a landscape where the sites in our sample are almost entirely unprepared for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can actually do about it
&lt;/h2&gt;

&lt;p&gt;If you build or maintain SMB sites, the fixes here are unglamorous but concrete:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ship a conformant &lt;code&gt;llms.txt&lt;/code&gt;&lt;/strong&gt;, not just a file that exists. Check it against spec — don't assume "I added one" means "it works."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-render your JSON-LD.&lt;/strong&gt; Don't inject structured data via &lt;code&gt;useEffect&lt;/code&gt; or client-only hydration; a lot of AI crawlers don't execute JS the way Googlebot increasingly does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add real author/reviewer bylines&lt;/strong&gt; where you're making factual claims (pricing, expertise, credentials). It's cheap to add and it's one of the weakest scores in the whole dataset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for agentic navigation&lt;/strong&gt;, not just human eyeballs: clear headings tied to actual content sections, discoverable contact/booking actions, consistent semantic markup — the stuff that lets an agent figure out what a page is actually offering without guessing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this requires blocking anything. The access problem basically doesn't exist in this sample. The readability problem is the whole story.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Full study: &lt;a href="https://lescreavores.fr/barometre-referencement-ia-tpe-pme/" rel="noopener noreferrer"&gt;https://lescreavores.fr/barometre-referencement-ia-tpe-pme/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dataset (Zenodo DOI): &lt;a href="https://doi.org/10.5281/zenodo.21381109" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.21381109&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dataset mirror (Figshare): &lt;a href="https://doi.org/10.6084/m9.figshare.32996552" rel="noopener noreferrer"&gt;https://doi.org/10.6084/m9.figshare.32996552&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Free AEO scanner (same engine used for this study): &lt;a href="https://lescreavores.fr/outils/audit-aeo-gratuit/" rel="noopener noreferrer"&gt;https://lescreavores.fr/outils/audit-aeo-gratuit/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about the methodology in the comments — and if you run a similar scan on a different market/sample, I'd genuinely like to compare notes.&lt;/p&gt;

&lt;p&gt;— written by the team at Les Créavores&lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>webdev</category>
      <category>data</category>
    </item>
    <item>
      <title>Barème kilométrique 2022-2026 : la série complète des coefficients (et un gel de 4 ans)</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Fri, 10 Jul 2026 14:23:18 +0000</pubDate>
      <link>https://dev.to/tresor4k/bareme-kilometrique-2022-2026-la-serie-complete-des-coefficients-et-un-gel-de-4-ans-3eji</link>
      <guid>https://dev.to/tresor4k/bareme-kilometrique-2022-2026-la-serie-complete-des-coefficients-et-un-gel-de-4-ans-3eji</guid>
      <description>&lt;p&gt;Chaque printemps, des millions de salariés français arbitrent entre l'abattement forfaitaire de 10 % et les &lt;strong&gt;frais réels&lt;/strong&gt; — et pour la plupart d'entre eux, le poste dominant est la voiture, évaluée via le barème kilométrique publié par l'administration fiscale. En reconstituant la série complète des coefficients sur cinq déclarations (2022-2026), un fait saute aux yeux : &lt;strong&gt;le barème n'a plus bougé depuis 2023&lt;/strong&gt;. Dataset complet en CSV (CC BY 4.0) en fin d'article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quatre déclarations, zéro revalorisation
&lt;/h2&gt;

&lt;p&gt;La chronologie récente tient en trois actes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2022&lt;/strong&gt; : +10 % (arrêté du 1er février 2022), réponse directe à la flambée des carburants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2023&lt;/strong&gt; : +5,4 % (arrêté du 27 mars 2023).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2024, 2025, 2026&lt;/strong&gt; : reconduction pure et simple. Aucun arrêté de revalorisation — la brochure pratique de la DGFiP et service-public.gouv.fr le confirment : « les barèmes kilométriques ne sont pas revalorisés, leur niveau a été augmenté pour la dernière fois en 2023 ».&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Concrètement, un salarié qui parcourt 10 000 km/an en 5 CV déduit &lt;strong&gt;4 965 €&lt;/strong&gt; — le même montant depuis quatre déclarations, pendant que l'entretien, l'assurance et les pièces ont continué d'augmenter. À l'inverse, le mécanisme a joué à plein en 2022-2023 : le même trajet ne valait « que » 4 710 € à la déclaration 2022.&lt;/p&gt;

&lt;h2&gt;
  
  
  La structure du barème (souvent mal comprise)
&lt;/h2&gt;

&lt;p&gt;Le barème n'est pas un simple tarif au kilomètre : c'est une &lt;strong&gt;fonction affine par morceaux&lt;/strong&gt;. Pour une automobile, trois tranches (jusqu'à 5 000 km, 5 001-20 000 km, au-delà), et c'est la tranche intermédiaire qui piège les calculs de tête : &lt;code&gt;frais = distance × coefficient + constante&lt;/code&gt;. En 5 CV, 2026 : &lt;code&gt;d × 0,357 + 1 395&lt;/code&gt;. Les motos et cyclomoteurs ont leurs propres tables (tranches à 3 000/6 000 km), et les &lt;strong&gt;véhicules électriques bénéficient d'une majoration uniforme de +20 %&lt;/strong&gt; sur le montant final (II de l'article 6 B, annexe IV du CGI).&lt;/p&gt;

&lt;h2&gt;
  
  
  Pourquoi un dataset ?
&lt;/h2&gt;

&lt;p&gt;Les coefficients sont éparpillés dans des arrêtés successifs (Légifrance JORFTEXT000045160753, JORFTEXT000047416556) et des pages ministérielles qui ne conservent que l'année courante. La série consolidée — 135 lignes : 5 déclarations × 9 catégories de véhicules × 3 tranches, avec bornes kilométriques, constantes et sources — n'existait nulle part en format réutilisable. Elle est désormais publiée en &lt;strong&gt;CSV sous licence CC BY 4.0&lt;/strong&gt;, chaque ligne portant son arrêté source et son identifiant Légifrance.&lt;/p&gt;

&lt;p&gt;Pour l'utiliser sans coder : le &lt;a href="https://macalculatriceenligne.com/finance/impots/calcul-frais-reels/" rel="noopener noreferrer"&gt;calculateur de frais réels&lt;/a&gt; applique ce barème (avec la majoration électrique et le plafond 7 CV), et le &lt;a href="https://macalculatriceenligne.com/auto/calcul-prix-essence-km/" rel="noopener noreferrer"&gt;calculateur de prix de l'essence au kilomètre&lt;/a&gt; permet de comparer le coût réel du carburant à la déduction obtenue. Compilation : équipe Données &amp;amp; Recherche de &lt;a href="https://macalculatriceenligne.com/" rel="noopener noreferrer"&gt;Ma Calculatrice en Ligne&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>france</category>
      <category>data</category>
      <category>opendata</category>
      <category>tax</category>
    </item>
    <item>
      <title>I computed take-home pay for a $100k salary in all 50 US states — the gap is $8,276 a year</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Tue, 07 Jul 2026 14:39:27 +0000</pubDate>
      <link>https://dev.to/tresor4k/i-computed-take-home-pay-for-a-100k-salary-in-all-50-us-states-the-gap-is-8276-a-year-281p</link>
      <guid>https://dev.to/tresor4k/i-computed-take-home-pay-for-a-100k-salary-in-all-50-us-states-the-gap-is-8276-a-year-281p</guid>
      <description>&lt;p&gt;I run a small data project called &lt;a href="https://statetakehome.com" rel="noopener noreferrer"&gt;StateTakeHome&lt;/a&gt;, where every tax rate is pulled from official publications (IRS Rev. Proc. 2025-32, SSA, each state's Department of Revenue) and labeled with its tax-year vintage. This week I ran the full 2026 engine across all 50 states + DC — 11 income levels, 2 filing statuses, 1,122 computed observations — and published the whole thing as an open dataset (CC BY 4.0).&lt;/p&gt;

&lt;p&gt;Here's what a single filer earning &lt;strong&gt;$100,000&lt;/strong&gt; actually keeps in 2026, after federal tax, state tax and FICA.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline numbers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Take-home (annual)&lt;/th&gt;
&lt;th&gt;Effective total tax&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 (9-way tie)&lt;/td&gt;
&lt;td&gt;Alaska, Florida, Nevada, New Hampshire, South Dakota, Tennessee, Texas, Washington, Wyoming&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$79,180&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;North Dakota&lt;/td&gt;
&lt;td&gt;$78,489&lt;/td&gt;
&lt;td&gt;21.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;District of Columbia&lt;/td&gt;
&lt;td&gt;$73,649&lt;/td&gt;
&lt;td&gt;26.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;Maine&lt;/td&gt;
&lt;td&gt;$73,147&lt;/td&gt;
&lt;td&gt;26.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;td&gt;Hawaii&lt;/td&gt;
&lt;td&gt;$73,023&lt;/td&gt;
&lt;td&gt;27.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;California&lt;/td&gt;
&lt;td&gt;$72,657&lt;/td&gt;
&lt;td&gt;27.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;Oregon&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$70,904&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;29.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The spread between the nine no-income-tax states and Oregon is &lt;strong&gt;$8,276 every year&lt;/strong&gt; — about $690 a month, on the exact same salary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things that surprised me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Oregon is a bigger outlier than California.&lt;/strong&gt; Everyone talks about California taxes, but at $100k the marginal California rate is still climbing, while Oregon's 8.75% bracket starts at just $10,200 of taxable income. Oregon also has no sales tax — which this dataset doesn't measure — but on pure paycheck math, Oregon takes the most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. California's real differentiator isn't the brackets — it's SDI.&lt;/strong&gt; Since 2024 (SB 951), California's 1.3% State Disability Insurance applies to &lt;strong&gt;every dollar&lt;/strong&gt; of wages, uncapped. At $100k that's $1,300 on top of income tax; at $500k it's $6,500. Most calculators I audited still apply the old cap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The "no-tax" tie hides local differences.&lt;/strong&gt; Nine states tie at $79,180 because they levy no state income tax on wages. What separates them in real life is property tax (New Hampshire ~1.8% effective vs Nevada ~0.5%) and sales tax — which is why we publish those as separate datasets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology, in one paragraph
&lt;/h2&gt;

&lt;p&gt;One deterministic engine, jurisdiction data as inputs: 2026 federal brackets and standard deduction (Rev. Proc. 2025-32, Pub 15-T method), Social Security to the 2026 SSA wage base, Medicare + the 0.9% Additional Medicare Tax, state brackets/deductions verified DOR by DOR (including 2026 legislative changes like Georgia H.B. 111 and South Carolina H.4216), plus state payroll extras like California SDI. Every figure carries an explicit 2026 vintage. Full write-up: &lt;a href="https://statetakehome.com/methodology" rel="noopener noreferrer"&gt;statetakehome.com/methodology&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the data
&lt;/h2&gt;

&lt;p&gt;The full dataset (1,122 rows: 51 jurisdictions × 11 incomes × 2 filing statuses) and the 51-state ranking are free to download and reuse, including commercially, with attribution:&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;&lt;a href="https://statetakehome.com/data" rel="noopener noreferrer"&gt;statetakehome.com/data&lt;/a&gt;&lt;/strong&gt; (CC BY 4.0)&lt;/p&gt;

&lt;p&gt;And if you just want your own number: every state has an interactive calculator, e.g. &lt;a href="https://statetakehome.com/texas-take-home-pay-calculator" rel="noopener noreferrer"&gt;Texas&lt;/a&gt; or &lt;a href="https://statetakehome.com/california-take-home-pay-calculator" rel="noopener noreferrer"&gt;California&lt;/a&gt; — the inputs never leave your browser.&lt;/p&gt;

&lt;p&gt;If you spot a rate that doesn't match its official source, tell me — verified corrections ship within 48 hours. That's the whole point of the project.&lt;/p&gt;

</description>
      <category>data</category>
      <category>taxes</category>
      <category>opendata</category>
      <category>personalfinance</category>
    </item>
    <item>
      <title>I scraped 103 public prices to build an open dataset of website creation costs in France (CC-BY, DOI)</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Mon, 06 Jul 2026 11:10:11 +0000</pubDate>
      <link>https://dev.to/tresor4k/i-scraped-103-public-prices-to-build-an-open-dataset-of-website-creation-costs-in-france-cc-by-1d13</link>
      <guid>https://dev.to/tresor4k/i-scraped-103-public-prices-to-build-an-open-dataset-of-website-creation-costs-in-france-cc-by-1d13</guid>
      <description>&lt;h1&gt;
  
  
  How Much Does a Website Cost?
&lt;/h1&gt;

&lt;h2&gt;
  
  
  I Published 103 Verified Price Points as an Open Dataset
&lt;/h2&gt;

&lt;p&gt;“How much does a website cost?” is one of the most-searched business questions in every language.&lt;/p&gt;

&lt;p&gt;And yet, almost every answer online has the same problem: broad marketing ranges, no sample, no dates, no sources, and no way to verify the numbers.&lt;/p&gt;

&lt;p&gt;So I did what any data-minded person would do.&lt;/p&gt;

&lt;p&gt;I collected &lt;strong&gt;103 public, verifiable website pricing data points&lt;/strong&gt; and published the whole thing as an open dataset — CSV, CC-BY 4.0, with a DOI.&lt;/p&gt;

&lt;p&gt;This post explains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how the dataset was built;&lt;/li&gt;
&lt;li&gt;what the pricing data shows;&lt;/li&gt;
&lt;li&gt;what I learned from publishing a small open dataset properly in 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Problem With Website Pricing Content
&lt;/h2&gt;

&lt;p&gt;Search for “website cost” in almost any market and you’ll find dozens of near-identical articles.&lt;/p&gt;

&lt;p&gt;The pattern is always the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;huge price ranges;&lt;/li&gt;
&lt;li&gt;no methodology;&lt;/li&gt;
&lt;li&gt;no sample size;&lt;/li&gt;
&lt;li&gt;no collection date;&lt;/li&gt;
&lt;li&gt;no downloadable data;&lt;/li&gt;
&lt;li&gt;no way to check the sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the French market — my playground, since I run a small web agency in Metz — the typical answer is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“A website costs between €500 and €10,000.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is technically true.&lt;/p&gt;

&lt;p&gt;It is also almost useless.&lt;/p&gt;

&lt;p&gt;The missing piece was simple: &lt;strong&gt;nobody was publishing the actual data behind the claims.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That was the gap I wanted to fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology: 103 Public and Verifiable Price Points
&lt;/h2&gt;

&lt;p&gt;I only collected prices that anyone can verify publicly.&lt;/p&gt;

&lt;p&gt;No private quotes.&lt;br&gt;
No client invoices.&lt;br&gt;
No proprietary agency data.&lt;br&gt;
No “trust me bro” numbers.&lt;/p&gt;

&lt;p&gt;The dataset includes pricing data from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Official pricing pages&lt;/strong&gt; of website builders such as Wix, Squarespace, Shopify, SiteW, e-monsite, Hostinger and Webflow;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;French freelance day-rate barometers&lt;/strong&gt; from Malt and Codeur.com;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;France Num’s pricing grid&lt;/strong&gt;, an official reference from the French Ministry for the Economy’s SME digitalization program;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market guides published in 2025–2026&lt;/strong&gt; with explicit pricing ranges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each row in the CSV includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;service category;&lt;/li&gt;
&lt;li&gt;provider type;&lt;/li&gt;
&lt;li&gt;pricing model;&lt;/li&gt;
&lt;li&gt;minimum price;&lt;/li&gt;
&lt;li&gt;maximum price;&lt;/li&gt;
&lt;li&gt;typical price;&lt;/li&gt;
&lt;li&gt;currency;&lt;/li&gt;
&lt;li&gt;region;&lt;/li&gt;
&lt;li&gt;source URL;&lt;/li&gt;
&lt;li&gt;collection date.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Collection date:&lt;/strong&gt; June 11, 2026&lt;br&gt;
&lt;strong&gt;Total rows:&lt;/strong&gt; 103&lt;br&gt;
&lt;strong&gt;License:&lt;/strong&gt; CC-BY 4.0&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Data Shows
&lt;/h2&gt;

&lt;p&gt;Here are the aggregate results, using the median of typical prices per segment.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project type&lt;/th&gt;
&lt;th&gt;DIY builder&lt;/th&gt;
&lt;th&gt;Freelancer&lt;/th&gt;
&lt;th&gt;Agency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Brochure site / vitrine&lt;/td&gt;
&lt;td&gt;~€16/month&lt;/td&gt;
&lt;td&gt;€1,450&lt;/td&gt;
&lt;td&gt;€3,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Brochure site range&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;€500–€8,000&lt;/td&gt;
&lt;td&gt;€500–€15,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E-commerce&lt;/td&gt;
&lt;td&gt;~€41/month&lt;/td&gt;
&lt;td&gt;€3,000&lt;/td&gt;
&lt;td&gt;€11,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E-commerce range&lt;/td&gt;
&lt;td&gt;€5–€2,100/month&lt;/td&gt;
&lt;td&gt;€1,500–€5,000&lt;/td&gt;
&lt;td&gt;€3,000–€30,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom web app&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;€10,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom web app range&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;€4,000–€50,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Two Findings That Stood Out
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The Regional Price Gap Exists — But It Is Smaller Than People Think
&lt;/h3&gt;

&lt;p&gt;One common belief in France is that Paris is dramatically more expensive than the rest of the country.&lt;/p&gt;

&lt;p&gt;The data does show a gap, but not the cartoon version.&lt;/p&gt;

&lt;p&gt;For example, experienced back-end developers charge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;€592/day in Paris&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;€513/day in Marseille&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is roughly a &lt;strong&gt;13% difference&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So yes, Paris is more expensive.&lt;/p&gt;

&lt;p&gt;But the data does not support the idea that “Paris costs double” as a general rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Total Cost of Ownership Changes the DIY vs Agency Debate
&lt;/h3&gt;

&lt;p&gt;Sticker prices are misleading.&lt;/p&gt;

&lt;p&gt;A DIY website builder looks cheap because the monthly fee is low.&lt;/p&gt;

&lt;p&gt;Over 36 months, the estimated cost is approximately:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;36-month cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DIY builder&lt;/td&gt;
&lt;td&gt;~€576&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freelancer build&lt;/td&gt;
&lt;td&gt;~€4,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agency build&lt;/td&gt;
&lt;td&gt;~€6,100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On cash out, DIY wins.&lt;/p&gt;

&lt;p&gt;But that ignores the hidden cost: &lt;strong&gt;your own time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A DIY website can easily take 15 to 30 days of work once you include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;setup;&lt;/li&gt;
&lt;li&gt;design decisions;&lt;/li&gt;
&lt;li&gt;content writing;&lt;/li&gt;
&lt;li&gt;SEO basics;&lt;/li&gt;
&lt;li&gt;mobile adjustments;&lt;/li&gt;
&lt;li&gt;integrations;&lt;/li&gt;
&lt;li&gt;revisions;&lt;/li&gt;
&lt;li&gt;learning curve;&lt;/li&gt;
&lt;li&gt;maintenance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you value that time, the ranking often changes.&lt;/p&gt;

&lt;p&gt;That total-cost-of-ownership calculation was the part readers found most useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Publishing the Dataset Properly
&lt;/h2&gt;

&lt;p&gt;Releasing a CSV on your own website is easy.&lt;/p&gt;

&lt;p&gt;Making it citable, reusable and discoverable takes more thought.&lt;/p&gt;

&lt;p&gt;Here is the publishing stack I used.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Open License: CC-BY 4.0
&lt;/h3&gt;

&lt;p&gt;I chose &lt;strong&gt;CC-BY 4.0&lt;/strong&gt; because it allows reuse while requiring attribution.&lt;/p&gt;

&lt;p&gt;That is the right trade-off when you want other people to cite, reuse or build on your dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. DOI via Zenodo
&lt;/h3&gt;

&lt;p&gt;I uploaded the dataset to Zenodo and generated a DOI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://doi.org/10.5281/zenodo.20690911" rel="noopener noreferrer"&gt;10.5281/zenodo.20690911&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This turns the CSV into a permanent, citable object.&lt;/p&gt;

&lt;p&gt;If you publish a dataset without a DOI, you are leaving citations on the table.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Mirrors Where Data People Actually Look
&lt;/h3&gt;

&lt;p&gt;I also mirrored the dataset on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.data.gouv.fr/fr/datasets/barometre-des-prix-de-creation-de-site-web-en-france-2026/" rel="noopener noreferrer"&gt;data.gouv.fr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/datasets/tresor2k/barometre-prix-creation-site-web-france-2026" rel="noopener noreferrer"&gt;Hugging Face Datasets&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was not just to publish the data.&lt;/p&gt;

&lt;p&gt;The goal was to put it where researchers, builders, journalists and AI systems are more likely to discover it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Schema.org Dataset Markup
&lt;/h3&gt;

&lt;p&gt;On the landing page, I added server-side rendered &lt;code&gt;Dataset&lt;/code&gt; JSON-LD with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;identifier&lt;/code&gt; for the DOI;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;license&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;distribution&lt;/code&gt; with the direct CSV link;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sameAs&lt;/code&gt; links to every mirror.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That made the dataset eligible for Google Dataset rich results.&lt;/p&gt;

&lt;p&gt;And it worked: the page received the Dataset rich result within days.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Interactive Calculator Built on Top of the Dataset
&lt;/h3&gt;

&lt;p&gt;A static pricing table is useful.&lt;/p&gt;

&lt;p&gt;But an interactive calculator is stronger.&lt;/p&gt;

&lt;p&gt;If a page only gives numbers, an AI summary can replace it.&lt;/p&gt;

&lt;p&gt;If the page calculates a personalized estimate, users still have a reason to visit.&lt;/p&gt;

&lt;p&gt;That is why the dataset is paired with a calculator rather than just a downloadable CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways for Anyone Publishing a Small Dataset
&lt;/h2&gt;

&lt;p&gt;You do not need a massive dataset to create something useful.&lt;/p&gt;

&lt;p&gt;You need clean, verifiable, well-documented data.&lt;/p&gt;

&lt;p&gt;The recipe is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public pricing pages + freelance barometers + one institutional reference can create a legitimate market dataset.&lt;/li&gt;
&lt;li&gt;Small is fine. &lt;strong&gt;103 sourced rows beat 10,000 unverifiable rows.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A DOI, open license and mirrors can turn a blog CSV into a citable reference.&lt;/li&gt;
&lt;li&gt;Every price needs a collection date. Without a date, pricing data becomes noise.&lt;/li&gt;
&lt;li&gt;An interactive tool gives the page more long-term value than a static article.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Full Dataset and Calculator
&lt;/h2&gt;

&lt;p&gt;The full barometer includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;charts;&lt;/li&gt;
&lt;li&gt;methodology;&lt;/li&gt;
&lt;li&gt;interactive calculator;&lt;/li&gt;
&lt;li&gt;downloadable CSV;&lt;/li&gt;
&lt;li&gt;source documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find it here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://lescreavores.fr/prix-creation-site-internet/" rel="noopener noreferrer"&gt;Baromètre des prix de création de site web — France 2026&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The article is in French, and the dataset column names are documented in English on Zenodo.&lt;/p&gt;

&lt;p&gt;Questions about the methodology, dataset structure or doing something similar in another market?&lt;/p&gt;

&lt;p&gt;Happy to compare notes in the comments.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>SMIC 2001-2026 : ce que révèlent 25 ans de revalorisations (+84,6 %)</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Fri, 03 Jul 2026 09:52:33 +0000</pubDate>
      <link>https://dev.to/tresor4k/smic-2001-2026-ce-que-revelent-25-ans-de-revalorisations-846--18i8</link>
      <guid>https://dev.to/tresor4k/smic-2001-2026-ce-que-revelent-25-ans-de-revalorisations-846--18i8</guid>
      <description>&lt;p&gt;Le SMIC français vient de passer à &lt;strong&gt;12,31 € brut de l'heure au 1er juin 2026&lt;/strong&gt; (1 867,02 €/mois). En remontant la série officielle INSEE jusqu'à juillet 2001 — premier montant fixé en euros, 6,67 €/h — on obtient 34 revalorisations et une hausse cumulée de &lt;strong&gt;+84,6 % en 25 ans&lt;/strong&gt;. Voici ce que racontent ces données (dataset complet en CSV publié en CC BY, lien en fin d'article).&lt;/p&gt;

&lt;h2&gt;
  
  
  Le mécanisme qui rythme la série : l'indexation automatique
&lt;/h2&gt;

&lt;p&gt;Contrairement à une idée reçue, le SMIC n'augmente pas seulement chaque 1er janvier. La loi prévoit une revalorisation &lt;strong&gt;automatique en cours d'année&lt;/strong&gt; dès que l'inflation dépasse 2 % depuis la dernière revalorisation. C'est ce mécanisme qui explique les années à revalorisations multiples visibles dans la série : 2008 (mai + juillet), 2011, 2012, 2021, &lt;strong&gt;2022 et ses trois hausses&lt;/strong&gt; (janvier, mai, août — pic d'inflation), 2023, 2024… et 2026, avec la hausse du 1er juin (+2,41 %) déclenchée le 13 mai.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trois périodes bien distinctes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2001-2012 : rattrapages réguliers.&lt;/strong&gt; De 6,67 € à 9,40 €, portés notamment par l'harmonisation des « SMIC multiples » hérités des 35 heures (2003-2005).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2013-2020 : la décennie calme.&lt;/strong&gt; Une seule petite hausse par an, de 9,43 € à 10,15 € — l'inflation est faible, aucun « coup de pouce » gouvernemental.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2021-2026 : l'inflation reprend la main.&lt;/strong&gt; Huit revalorisations en cinq ans et demi, de 10,25 € à 12,31 €. Fait notable : &lt;strong&gt;aucune revalorisation en 2025&lt;/strong&gt; (le montant de novembre 2024 a tenu 19 mois), puis le mécanisme automatique s'est re-déclenché en 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Brut affiché, net perçu
&lt;/h2&gt;

&lt;p&gt;Le chiffre « officiel » est toujours le brut, mais ce qui compte pour le salarié est le net : au 1er juin 2026, le SMIC net mensuel s'établit à &lt;strong&gt;1 477,93 €&lt;/strong&gt; (contre 1 443,11 € depuis janvier), d'après le communiqué du ministère du Travail. L'écart brut/net (~21 %) correspond aux cotisations salariales — pour le calculer sur votre propre salaire, un &lt;a href="https://macalculatriceenligne.com/finance/salaire/calcul-smic-net/" rel="noopener noreferrer"&gt;calculateur de SMIC net&lt;/a&gt; ou un &lt;a href="https://macalculatriceenligne.com/finance/salaire/calcul-salaire-brut-net/" rel="noopener noreferrer"&gt;convertisseur brut-net&lt;/a&gt; à jour des taux 2026 fait le travail en quelques secondes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le dataset
&lt;/h2&gt;

&lt;p&gt;Les 34 revalorisations (date d'entrée en vigueur, horaire brut, mensuel brut 151,67 h, date JO, source) sont publiées en &lt;strong&gt;CSV sous licence CC BY 4.0&lt;/strong&gt;, extraites programmatiquement du fichier INSEE officiel (réf. 1375188) et complétées par l'arrêté du 22 mai 2026 (Légifrance). Compilation : équipe Données &amp;amp; Recherche de &lt;a href="https://macalculatriceenligne.com/" rel="noopener noreferrer"&gt;Ma Calculatrice en Ligne&lt;/a&gt;, qui maintient plusieurs centaines de calculatrices gratuites (salaire, impôts, immobilier…) pour la France et la francophonie.&lt;/p&gt;

</description>
      <category>france</category>
      <category>data</category>
      <category>opendata</category>
      <category>finance</category>
    </item>
    <item>
      <title>Brut en net 2026 : pourquoi le meme salaire ne donne pas le meme net en France, Belgique, Suisse et au Quebec</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Sat, 27 Jun 2026 10:41:18 +0000</pubDate>
      <link>https://dev.to/tresor4k/brut-en-net-2026-pourquoi-le-meme-salaire-ne-donne-pas-le-meme-net-en-france-belgique-suisse-et-4dh6</link>
      <guid>https://dev.to/tresor4k/brut-en-net-2026-pourquoi-le-meme-salaire-ne-donne-pas-le-meme-net-en-france-belgique-suisse-et-4dh6</guid>
      <description>&lt;p&gt;Un salarie francais, un belge, un suisse romand et un quebecois touchent tous « 3 000 » de salaire brut. Pourtant, ce qui atterrit reellement sur leur compte en fin de mois n'a rien de comparable. La raison ? Quatre logiques de prelevement radicalement differentes. Tour d'horizon — et les outils pour calculer &lt;strong&gt;votre&lt;/strong&gt; net exact dans chaque pays.&lt;/p&gt;

&lt;h2&gt;
  
  
  France : cotisations salariales + prelevement a la source
&lt;/h2&gt;

&lt;p&gt;En France, le passage du brut au net se fait en deux temps. D'abord les &lt;strong&gt;cotisations sociales salariales&lt;/strong&gt; (assurance maladie, retraite, chomage, CSG/CRDS) qui amputent le brut d'environ un cinquieme a un quart selon le statut (cadre ou non-cadre). Ensuite, depuis 2019, le &lt;strong&gt;prelevement a la source&lt;/strong&gt; de l'impot sur le revenu vient directement diminuer le « net a payer ». Resultat : il existe desormais deux « net » distincts — le &lt;strong&gt;net social&lt;/strong&gt; et le &lt;strong&gt;net apres impot&lt;/strong&gt;, ce qui seme souvent la confusion.&lt;/p&gt;

&lt;p&gt;Point de repere 2026 : le SMIC brut mensuel est de &lt;strong&gt;1 867,02 €&lt;/strong&gt; (35 h). Pour convertir n'importe quel brut en net selon votre statut, le plus simple est d'utiliser une &lt;a href="https://macalculatriceenligne.com/finance/salaire/calcul-salaire-brut-net/" rel="noopener noreferrer"&gt;calculatrice de salaire brut en net&lt;/a&gt; qui applique les taux a jour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Belgique : le precompte professionnel, plus mordant
&lt;/h2&gt;

&lt;p&gt;La Belgique applique des &lt;strong&gt;cotisations de securite sociale&lt;/strong&gt; (environ 13,07 % pour un employe) puis un &lt;strong&gt;precompte professionnel&lt;/strong&gt; — une retenue d'impot a la source nettement plus progressive et plus lourde qu'en France sur les tranches moyennes. A brut egal, un salarie belge conserve donc generalement &lt;strong&gt;un net plus faible&lt;/strong&gt; qu'un francais, mais beneficie en contrepartie d'une protection sociale etendue. Les baremes dependent aussi de la situation familiale (personnes a charge). Pour un calcul localise Belgique, macalc propose des &lt;a href="https://macalculatriceenligne.com/belgique/calcul-salaire-minimum-belgique/" rel="noopener noreferrer"&gt;outils adaptes a la Belgique&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Suisse : peu de charges, mais l'impot arrive apres
&lt;/h2&gt;

&lt;p&gt;Inversion totale en Suisse : les &lt;strong&gt;cotisations sociales sont faibles&lt;/strong&gt; (AVS/AI/APG, AC, LPP/2e pilier, soit grosso modo 12-15 % selon l'age et la caisse). Le « net » suisse parait donc tres eleve… sauf que &lt;strong&gt;l'impot n'est pas preleve a la source&lt;/strong&gt; pour la plupart des residents : il est facture separement l'annee suivante, et il varie enormement d'un &lt;strong&gt;canton&lt;/strong&gt; a l'autre. Le pouvoir d'achat reel depend donc autant du canton que du salaire. macalc couvre ces specificites via sa &lt;a href="https://macalculatriceenligne.com/suisse/calcul-salaire-net-suisse/" rel="noopener noreferrer"&gt;calculatrice de salaire net en Suisse&lt;/a&gt; (et le &lt;a href="https://macalculatriceenligne.com/suisse/calcul-3eme-pilier-suisse/" rel="noopener noreferrer"&gt;3e pilier&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Quebec : double palier federal + provincial
&lt;/h2&gt;

&lt;p&gt;Au Quebec, la paie subit un &lt;strong&gt;double etage d'impot&lt;/strong&gt; — federal (Canada) &lt;strong&gt;et&lt;/strong&gt; provincial (Quebec) — auxquels s'ajoutent les cotisations au RRQ (regime de rentes), a l'assurance-emploi et au RQAP. Le Quebec se distingue par un taux d'imposition provincial parmi les plus eleves d'Amerique du Nord, compense par des services publics etendus. Le « net » depend fortement des credits d'impot applicables. Cote outils, macalc dispose de &lt;a href="https://macalculatriceenligne.com/quebec/calcul-credit-solidarite/" rel="noopener noreferrer"&gt;calculatrices pour le Quebec&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le vrai enseignement
&lt;/h2&gt;

&lt;p&gt;Comparer des « nets » entre pays sans calculatrice est un piege : la France et la Belgique prelevent l'impot &lt;strong&gt;dans&lt;/strong&gt; la fiche de paie, la Suisse le reclame &lt;strong&gt;apres&lt;/strong&gt;, et le Quebec &lt;strong&gt;empile&lt;/strong&gt; deux paliers. Un meme brut peut donner des ecarts de net de plusieurs centaines d'euros/francs/dollars une fois tout pris en compte — sans meme parler du cout de la vie.&lt;/p&gt;

&lt;p&gt;La seule facon fiable d'obtenir &lt;strong&gt;votre&lt;/strong&gt; chiffre : utiliser un outil qui applique les baremes officiels a jour de votre pays. C'est exactement ce que regroupe &lt;strong&gt;&lt;a href="https://macalculatriceenligne.com/" rel="noopener noreferrer"&gt;Ma Calculatrice en Ligne&lt;/a&gt;&lt;/strong&gt; — des centaines de calculatrices gratuites (salaire, impots, immobilier, conversions…), sans inscription, pour la France et toute la francophonie.&lt;/p&gt;

</description>
      <category>finance</category>
      <category>french</category>
      <category>tax</category>
      <category>money</category>
    </item>
    <item>
      <title>Two new open datasets: US dental costs by procedure and by city (CC-BY, DOI)</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Thu, 25 Jun 2026 10:44:03 +0000</pubDate>
      <link>https://dev.to/tresor4k/two-new-open-datasets-us-dental-costs-by-procedure-and-by-city-cc-by-doi-2ncb</link>
      <guid>https://dev.to/tresor4k/two-new-open-datasets-us-dental-costs-by-procedure-and-by-city-cc-by-doi-2ncb</guid>
      <description>&lt;p&gt;We just released &lt;strong&gt;two new open datasets&lt;/strong&gt; on U.S. dental costs, both &lt;strong&gt;CC BY 4.0&lt;/strong&gt; with a permanent &lt;strong&gt;DOI&lt;/strong&gt;, derived from our open US Dental Cost Index (no figures invented).&lt;/p&gt;

&lt;h2&gt;
  
  
  1. US Dental Procedure Cost by Procedure Type (2026)
&lt;/h2&gt;

&lt;p&gt;National low / average / high cash cost of 12 common dental procedures, with the cheapest and priciest U.S. state for each procedure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DOI: &lt;a href="https://doi.org/10.5281/zenodo.20819437" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.20819437&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Interactive page: &lt;a href="https://realdentalcosts.com/en/dental-procedure-cost-list/" rel="noopener noreferrer"&gt;https://realdentalcosts.com/en/dental-procedure-cost-list/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Mirrors: Kaggle, Hugging Face, data.world, Figshare, GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. US Dental Cost by City / Metro (2026)
&lt;/h2&gt;

&lt;p&gt;Average implant / veneer / braces prices across &lt;strong&gt;206 U.S. cities&lt;/strong&gt;, ranked from the cheapest metro (Flint, MI) to the priciest (New York City, NY).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DOI: &lt;a href="https://doi.org/10.5281/zenodo.20819439" rel="noopener noreferrer"&gt;https://doi.org/10.5281/zenodo.20819439&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Page: &lt;a href="https://realdentalcosts.com/en/us-dental-cost-index/" rel="noopener noreferrer"&gt;https://realdentalcosts.com/en/us-dental-cost-index/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free to reuse with attribution to the &lt;strong&gt;Real Dental Costs Data &amp;amp; Research Team&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>dataset</category>
      <category>opendata</category>
      <category>data</category>
      <category>healthcare</category>
    </item>
    <item>
      <title>Combien d'heures travaille-t-on légalement dans la francophonie ? Le match France / Belgique / Suisse / Québec / Luxembourg (202</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Fri, 19 Jun 2026 14:23:41 +0000</pubDate>
      <link>https://dev.to/tresor4k/combien-dheures-travaille-t-on-legalement-dans-la-francophonie-le-match-france-belgique--44pd</link>
      <guid>https://dev.to/tresor4k/combien-dheures-travaille-t-on-legalement-dans-la-francophonie-le-match-france-belgique--44pd</guid>
      <description>&lt;p&gt;On parle souvent des « 35 heures » comme d'une évidence française. Mais dès qu'on franchit une frontière francophone, le compteur change — et surtout, la façon dont vos heures supplémentaires sont payées change radicalement. J'ai compilé les chiffres officiels 2026 de cinq territoires dans un jeu de données ouvert. Voici ce qu'ils racontent.&lt;/p&gt;

&lt;h2&gt;
  
  
  La durée légale : de 35 h à 50 h, presque du simple au double
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Territoire&lt;/th&gt;
&lt;th&gt;Durée légale hebdomadaire&lt;/th&gt;
&lt;th&gt;Base mensuelle&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🇫🇷 France&lt;/td&gt;
&lt;td&gt;35 h&lt;/td&gt;
&lt;td&gt;151,67 h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇧🇪 Belgique&lt;/td&gt;
&lt;td&gt;38 h&lt;/td&gt;
&lt;td&gt;~164,67 h (dérivé)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇨🇦 Québec&lt;/td&gt;
&lt;td&gt;40 h&lt;/td&gt;
&lt;td&gt;173,33 h (dérivé)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇱🇺 Luxembourg&lt;/td&gt;
&lt;td&gt;40 h&lt;/td&gt;
&lt;td&gt;173 h (forfait légal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇨🇭 Suisse&lt;/td&gt;
&lt;td&gt;45 h (industrie/bureau/vente) à 50 h (autres)&lt;/td&gt;
&lt;td&gt;quota annuel&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La France reste le pays à la durée légale la plus courte. À l'autre bout du spectre, la Suisse autorise jusqu'à &lt;strong&gt;45 heures&lt;/strong&gt; dans l'industrie, les bureaux et le commerce de détail, et &lt;strong&gt;50 heures&lt;/strong&gt; dans tous les autres secteurs avant que la moindre majoration ne se déclenche. Entre une semaine légale française et une semaine suisse « autres secteurs », l'écart atteint 15 heures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le vrai sujet : qui paie le mieux la 41e heure ?
&lt;/h2&gt;

&lt;p&gt;C'est là que les systèmes divergent le plus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🇧🇪 La Belgique est la plus protectrice.&lt;/strong&gt; Toute heure au-delà de 9 h/jour ou 40 h/semaine donne droit à un sursalaire de &lt;strong&gt;+50 % en semaine&lt;/strong&gt; (samedi compris) et de &lt;strong&gt;+100 % le dimanche et les jours fériés&lt;/strong&gt;. Par défaut, ces heures se récupèrent ; le salarié peut renoncer à la récupération pour toucher la majoration en cash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🇨🇦 Le Québec joue simple et clair.&lt;/strong&gt; Au-delà de 40 h/semaine, c'est &lt;strong&gt;taux et demi (+50 %)&lt;/strong&gt;, point. Avec une option de remplacement par un congé payé équivalent (1 h 30 par heure supplémentaire).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🇫🇷 La France module.&lt;/strong&gt; +25 % pour les 8 premières heures supplémentaires (de la 36e à la 43e), puis &lt;strong&gt;+50 %&lt;/strong&gt; à partir de la 44e. Le tout dans un contingent annuel de 220 heures par défaut.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🇱🇺 Le Luxembourg est intermédiaire.&lt;/strong&gt; Compensation par défaut en repos (1 h 30 par heure), ou paiement à &lt;strong&gt;140 % du salaire horaire&lt;/strong&gt;, soit &lt;strong&gt;+40 %&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🇨🇭 La Suisse est la plus avare — et la plus piégeuse.&lt;/strong&gt; Le « travail supplémentaire » au-delà du maximum légal n'est majoré que de &lt;strong&gt;+25 %&lt;/strong&gt;… et seulement après un quota annuel non payé (170 h dans le régime 45 h, 140 h dans le régime 50 h). Attention au faux ami : en droit suisse, ces &lt;em&gt;heures supplémentaires de la loi sur le travail&lt;/em&gt; (Überzeit) sont distinctes des &lt;em&gt;heures supplémentaires contractuelles&lt;/em&gt; (art. 321c CO), qui relèvent du contrat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trois pièges concrets quand on calcule au-delà des frontières
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. La « base mensuelle » n'existe pas partout.&lt;/strong&gt; La France raisonne en 151,67 h/mois, le Luxembourg en 173 h (forfait officiel). Mais la Belgique raisonne par &lt;strong&gt;trimestre&lt;/strong&gt; (520 h = 13 × 40), pas par mois, et la Suisse fixe un &lt;strong&gt;plafond annuel&lt;/strong&gt; de travail supplémentaire. Convertir mécaniquement « semaine × 52 ÷ 12 » donne un ordre de grandeur, pas une valeur légale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Le seuil de déclenchement n'est pas toujours la durée légale.&lt;/strong&gt; En Belgique, le sursalaire se déclenche au-delà de 9 h/jour &lt;em&gt;ou&lt;/em&gt; 40 h/semaine — pas à 38 h. En Suisse, rien n'est majoré tant qu'on reste sous le maximum légal (45 ou 50 h).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Repos compensateur vs paiement.&lt;/strong&gt; Dans presque tous ces pays, l'employeur peut remplacer la majoration par du repos. Le calcul de paie change donc selon l'option retenue — d'où l'intérêt d'un outil qui gère les deux.&lt;/p&gt;

&lt;h2&gt;
  
  
  La formule, identique partout
&lt;/h2&gt;

&lt;p&gt;Quel que soit le pays, une fois le seuil et le taux connus, le calcul d'une heure supplémentaire est le même :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Heure sup. payée = taux horaire × (1 + majoration / 100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemple à 20 €/h : une heure supplémentaire vaut 25 € en France (1ʳᵉ tranche, +25 %), 28 € au Luxembourg (+40 %), 30 € au Québec et en Belgique (+50 %), et jusqu'à 40 € le dimanche en Belgique (+100 %).&lt;/p&gt;

&lt;h2&gt;
  
  
  Le jeu de données
&lt;/h2&gt;

&lt;p&gt;J'ai publié l'ensemble (durées légales, seuils, majorations, repos compensateur, base légale et sources officielles) en &lt;strong&gt;CSV ouvert sous licence CC BY 4.0&lt;/strong&gt;, vérifié ligne par ligne sur les sites gouvernementaux (Service-Public.gouv.fr, SPF Emploi, SECO, CNESST, Guichet.lu).&lt;/p&gt;

&lt;p&gt;Pour calculer directement un total hebdomadaire avec heures supplémentaires automatiques (mode « Semaine 35h »), j'utilise &lt;a href="https://macalculatriceenligne.com/temps-heures/calcul-heure/" rel="noopener noreferrer"&gt;ce calculateur d'heures et de temps de travail&lt;/a&gt;, qui gère la base 60, le passage minuit et la décomposition jour/nuit. Pour la partie paie, la conversion en &lt;a href="https://macalculatriceenligne.com/finance/salaire/calcul-salaire-brut-net/" rel="noopener noreferrer"&gt;salaire brut / net&lt;/a&gt; prend le relais.&lt;/p&gt;

&lt;p&gt;Sources : Service-Public.gouv.fr (DILA), SPF Emploi (Belgique), Secrétariat d'État à l'économie SECO (Suisse), CNESST (Québec) et Guichet.lu / ITM (Luxembourg).&lt;/p&gt;

</description>
      <category>data</category>
      <category>opendata</category>
      <category>france</category>
      <category>career</category>
    </item>
    <item>
      <title>Dental Costs Vary up to 2x Across Canada — and the CDCP Doesn't Cover the Gap</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Thu, 18 Jun 2026 16:06:16 +0000</pubDate>
      <link>https://dev.to/tresor4k/dental-costs-vary-up-to-2x-across-canada-and-the-cdcp-doesnt-cover-the-gap-65c</link>
      <guid>https://dev.to/tresor4k/dental-costs-vary-up-to-2x-across-canada-and-the-cdcp-doesnt-cover-the-gap-65c</guid>
      <description>&lt;p&gt;The Canadian Dental Care Plan (CDCP) now helps millions of residents, but two things surprise people: dental fees vary widely &lt;strong&gt;by province&lt;/strong&gt;, and the plan &lt;strong&gt;doesn't cover everything&lt;/strong&gt;. We compiled an open, per-province cost index for nine core procedures (in CAD) and cross-referenced each to CDCP coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a single implant costs across Canada
&lt;/h2&gt;

&lt;p&gt;A complete single implant (fixture + abutment + crown) ranges from about &lt;strong&gt;$3,000 in Manitoba&lt;/strong&gt; to &lt;strong&gt;$6,100 in Newfoundland and Labrador&lt;/strong&gt;. Ontario publishes the only official breakdown: fixture $1,375 + abutment $575 + crown $1,099 + lab ≈ &lt;strong&gt;$4,165&lt;/strong&gt;. And implants are an &lt;strong&gt;absolute CDCP exclusion&lt;/strong&gt; — you pay 100% out of pocket regardless of income.&lt;/p&gt;

&lt;h2&gt;
  
  
  The coverage gap most guides miss
&lt;/h2&gt;

&lt;p&gt;The CDCP reimburses on its &lt;strong&gt;own established fees&lt;/strong&gt;, which are often lower than a dentist's actual charge. So even at the under-$70,000 income tier (100% coinsurance), a balance can remain. Income tiers: under $70,000 = 100%, $70,000–$79,999 = 60%, $80,000–$89,999 = 40%, $90,000+ = not eligible.&lt;/p&gt;

&lt;p&gt;Covered (no pre-auth): exams, scaling, fillings, extractions, standard root canals, complete dentures. Partial (pre-auth): crowns, cast partial dentures. &lt;strong&gt;Not covered&lt;/strong&gt;: implants, implant crowns, bridges, veneers, whitening, night guards, bone grafts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explore the full data
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://realdentalcosts.com/ca/" rel="noopener noreferrer"&gt;Dental costs in Canada by province (2026)&lt;/a&gt; — interactive CDCP out-of-pocket calculator&lt;/li&gt;
&lt;li&gt;&lt;a href="https://realdentalcosts.com/ca/cdcp-coverage/" rel="noopener noreferrer"&gt;What the CDCP covers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://realdentalcosts.com/ca/dental-cost-by-province/" rel="noopener noreferrer"&gt;Per-province cost index&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://realdentalcosts.com/ca/dental-implants-cost/" rel="noopener noreferrer"&gt;Dental implant cost by province&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open dataset (CSV, CC BY 4.0) with DOI &lt;strong&gt;10.5281/zenodo.20744781&lt;/strong&gt;. Figures are taken from the 2025–2026 provincial suggested-fee guides; cells modelled where a guide is members-only are flagged as estimates. This is pricing/market research, &lt;strong&gt;not medical or dental advice&lt;/strong&gt;, and is not affiliated with the Government of Canada.&lt;/p&gt;

</description>
      <category>canada</category>
      <category>healthcare</category>
      <category>data</category>
      <category>dentistry</category>
    </item>
  </channel>
</rss>
