<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" hreflang="pt-BR" /><updated>2026-08-02T23:53:56+00:00</updated><id>/feed.xml</id><title type="html">Sávio Santos</title><subtitle>Blog e portfólio de Sávio Santos</subtitle><author><name>Sávio Santos</name></author><entry><title type="html">Mapeando a Tech Stack de 5.571 Prefeituras do Brasil: Um Estudo com Python e Async I/O</title><link href="/mapeando-tech-stack-prefeituras-brasil/" rel="alternate" type="text/html" title="Mapeando a Tech Stack de 5.571 Prefeituras do Brasil: Um Estudo com Python e Async I/O" /><published>2026-08-02T00:00:00+00:00</published><updated>2026-08-02T00:00:00+00:00</updated><id>/mapeando-tech-stack-prefeituras-brasil</id><content type="html" xml:base="/mapeando-tech-stack-prefeituras-brasil/">&lt;p&gt;Você já parou para pensar em qual tecnologia roda nos sites dos municípios do Brasil? Seja para emitir uma nota fiscal, consultar o Diário Oficial ou acessar o Portal da Transparência, milhões de cidadãos interagem diariamente com a infraestrutura tecnológica das prefeituras.&lt;/p&gt;

&lt;p&gt;Para responder a essa pergunta com dados reais, desenvolvi um &lt;strong&gt;inspector de tecnologia assíncrono em Python&lt;/strong&gt; capaz de coletar, resolver domínios e analisar a &lt;em&gt;tech stack&lt;/em&gt; de todas as &lt;strong&gt;5.571 prefeituras catalogadas pelo IBGE&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste artigo, compartilho os principais achados do estudo, os gráficos com as estatísticas nacionais e os detalhes técnicos do crawler que desenvolvi.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-principais-descobertas-e-análise-dos-dados&quot;&gt;📊 Principais Descobertas e Análise dos Dados&lt;/h2&gt;

&lt;p&gt;Dos &lt;strong&gt;5.571 municípios&lt;/strong&gt; catalogados pelo IBGE, o crawler localizou e analisou com sucesso &lt;strong&gt;5.107 prefeituras ativas (91,67% de taxa de resolução)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;1-php-é-o-rei-absoluto-do-backend-municipal&quot;&gt;1. PHP é o Rei Absoluto do Backend Municipal&lt;/h3&gt;
&lt;p&gt;Ao analisar as linguagens e linguagens server-side identificadas:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/tech-backend-chart.png&quot; alt=&quot;Linguagens e Frameworks Backend&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;PHP&lt;/strong&gt;: Está presente em &lt;strong&gt;77,8% (3.973 prefeituras)&lt;/strong&gt; dos sites analisados.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;ASP.NET (Microsoft)&lt;/strong&gt;: Representa &lt;strong&gt;26,2% (1.338 sites)&lt;/strong&gt;, refletindo portais legados e sistemas corporativos.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Java&lt;/strong&gt;: Presente em &lt;strong&gt;16,4% (838 sites)&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Laravel (PHP)&lt;/strong&gt;: Aparece em &lt;strong&gt;8,0% (408 sites)&lt;/strong&gt; como a escolha moderna para novos portais sob medida.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Python e Node.js&lt;/strong&gt;: Representam juntos cerca de 5,5% do total.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;2-cms-wordpress-domina-a-comunicação-institucional&quot;&gt;2. CMS: WordPress Domina a Comunicação Institucional&lt;/h3&gt;
&lt;p&gt;Em termos de Gerenciadores de Conteúdo (CMS):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;WordPress&lt;/strong&gt;: É a plataforma isolada mais utilizada, identificada em &lt;strong&gt;mais de 1.480 prefeituras (~30% do total)&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Joomla&lt;/strong&gt;: Mantém presença histórica em &lt;strong&gt;170 prefeituras&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Drupal &amp;amp; GovBR/Plone&lt;/strong&gt;: Utilizados principalmente por capitais e grandes metrópoles devido aos requisitos de acessibilidade e governança.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Wix&lt;/strong&gt;: Identificado em 72 pequenos municípios.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;3-servidores-web-e-a-crescente-adoção-de-cloudflare&quot;&gt;3. Servidores Web e a Crescente Adoção de Cloudflare&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/images/tech-servers-chart.png&quot; alt=&quot;Servidores Web e CDN&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Apache (32,5%)&lt;/strong&gt; e &lt;strong&gt;Nginx (26,1%)&lt;/strong&gt; dividem a liderança do processamento web.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;: Detectado em &lt;strong&gt;994 sites (19,4%)&lt;/strong&gt;, revelando uma forte preocupação das prefeituras com proteção contra ataques de negação de serviço (DDoS), aceleração via CDN e certificados SSL gratuitos.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;4-frontend-bootstrap-universal-e-elementor-em-alta&quot;&gt;4. Frontend: Bootstrap Universal e Elementor em Alta&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/images/tech-frontend-chart.png&quot; alt=&quot;Frameworks Frontend&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Bootstrap&lt;/strong&gt;: Presente em impressionantes &lt;strong&gt;86,3% (4.406 sites)&lt;/strong&gt; dos portais. Tornou-se o padrão &lt;em&gt;de facto&lt;/em&gt; para garantir responsividade no setor público.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;jQuery&lt;/strong&gt;: Ainda acompanha &lt;strong&gt;55,5% (2.836 sites)&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Elementor&lt;/strong&gt;: O page builder visual do WordPress foi detectado em &lt;strong&gt;551 prefeituras (10,8%)&lt;/strong&gt;, facilitando a edição por equipes municipais sem conhecimento técnico de código.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;React &amp;amp; Vue.js&lt;/strong&gt;: Apresentam adoção em crescimento (5,2% e 2,0% respectivamente), impulsionados por novos portais de transparência construídos como Single Page Applications (SPAs).&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;️-a-engenharia-por-trás-do-crawler-3-minutos-para-5570-sites&quot;&gt;🛠️ A Engenharia por Trás do Crawler (3 Minutos para 5.570 Sites)&lt;/h2&gt;

&lt;p&gt;Varrer mais de 5.500 domínios com checagem de respostas HTTP, parsing de cabeçalhos e análise de HTML pode levar horas se feito de forma síncrona.&lt;/p&gt;

&lt;p&gt;Para resolver o problema da escala e da performance, a arquitetura do projeto foi estruturada em módulos desacoplados:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Coleta de Dados e Resolução de Domínios&lt;/strong&gt;:
    &lt;ul&gt;
      &lt;li&gt;Integração com a API do IBGE + cruzamento com dados abertos da comunidade.&lt;/li&gt;
      &lt;li&gt;Algoritmo de normalização e permutação de URLs (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gov.br&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pm...gov.br&lt;/code&gt;, sem conectores &lt;em&gt;de/da/do&lt;/em&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;I/O Assíncrono com &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;aiohttp&lt;/code&gt; e &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;asyncio&lt;/code&gt;&lt;/strong&gt;:
    &lt;ul&gt;
      &lt;li&gt;Utilização de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;asyncio.Semaphore&lt;/code&gt; para controlar a concorrência sem sobrecarregar a rede ou a resolução DNS local.&lt;/li&gt;
      &lt;li&gt;Ajuste de &lt;em&gt;connect timeout&lt;/em&gt; para 2.5s, descartando rapidamente domínios inativos sem travar o worker.&lt;/li&gt;
      &lt;li&gt;Com concorrência em &lt;strong&gt;100 requisições simultâneas&lt;/strong&gt;, o pipeline completo executou em &lt;strong&gt;apenas 2 minutos e 40 segundos&lt;/strong&gt; (uma taxa de ~30 sites/segundo).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Tech Inspector (Fingerprinting)&lt;/strong&gt;:
    &lt;ul&gt;
      &lt;li&gt;Inspeção de cabeçalhos HTTP (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X-Powered-By&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Server&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Set-Cookie&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;X-Generator&lt;/code&gt;).&lt;/li&gt;
      &lt;li&gt;Parsing do HTML com &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;BeautifulSoup&lt;/code&gt; em busca de meta tags, caminhos de scripts estáticos (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wp-content&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sites/all/themes&lt;/code&gt;) e objetos em memória de frameworks SPA/SSR (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;__NEXT_DATA__&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;__NUXT__&lt;/code&gt;).&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;️-limitações-da-pesquisa-os-833-não-raspados&quot;&gt;⚠️ Limitações da Pesquisa: Os 8,33% Não Raspados&lt;/h2&gt;

&lt;p&gt;Cerca de &lt;strong&gt;464 prefeituras (8,33%)&lt;/strong&gt; não puderam ter sua &lt;em&gt;tech stack&lt;/em&gt; raspada ou identificada durante esta edição da pesquisa. As razões observadas foram:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Domínios Inativos ou Inexistentes&lt;/strong&gt;: Pequenos municípios que não possuem portal próprio oficial ativo no momento da varredura.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Bloqueios de Segurança (WAF / Rate Limit)&lt;/strong&gt;: Firewalls que rejeitam requisições automatizadas em lote sem navegação completa de browser.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Erros de SSL/TLS &amp;amp; Servidores Fora do Ar&lt;/strong&gt;: Certificados com erro de cadeia ou servidores temporariamente inalcançáveis.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-créditos-e-fontes-de-dados-abertos&quot;&gt;🤝 Créditos e Fontes de Dados Abertos&lt;/h2&gt;

&lt;p&gt;Construir um estudo dessa magnitude exige reconhecer o trabalho fundamental da comunidade de dados abertos no Brasil:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;API de Localidades do IBGE&lt;/strong&gt;: Fonte dos dados cadastrais dos 5.571 municípios.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Dataset &lt;a href=&quot;https://github.com/franklinbaldo/sites_prefeituras&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sites_prefeituras&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;: Crédito e agradecimento especial ao projeto mantido por &lt;strong&gt;&lt;a href=&quot;https://github.com/franklinbaldo&quot;&gt;Franklin Baldo&lt;/a&gt;&lt;/strong&gt;. A base pré-catalogada de URLs municipais acelerou significativamente a resolução de domínios.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;-conclusão&quot;&gt;🎯 Conclusão&lt;/h2&gt;

&lt;p&gt;O estudo revela uma infraestrutura municipal brasileira fortemente ancorada no ecossistema &lt;strong&gt;PHP + WordPress + Bootstrap + Apache/Nginx&lt;/strong&gt;, combinada com uma transição contínua para camadas de segurança em nuvem (Cloudflare).&lt;/p&gt;

&lt;h3 id=&quot;código-fonte-e-dataset-aberto&quot;&gt;Código-Fonte e Dataset Aberto&lt;/h3&gt;

&lt;p&gt;O projeto completo, com código-fonte em Python estruturado em módulos e o dataset final em CSV e JSON com as 5.571 prefeituras, está disponível publicamente no GitHub:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href=&quot;https://github.com/savi8sant8s/stacks-usadas-sites-prefeituras-brasil&quot;&gt;GitHub: stacks-usadas-sites-prefeituras-brasil&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sinta-se à vontade para explorar o repositório, clonar o projeto ou utilizar a base de dados em suas próprias análises!&lt;/p&gt;</content><author><name>Sávio Santos</name></author><summary type="html">Analisamos mais de 5.500 sites de prefeituras brasileiras para descobrir quais linguagens, CMS, servidores web e frameworks dominam a gestão pública municipal.</summary></entry></feed>