Lista dos próximos feriados nacionais com n8n

Quando é o próximo feriado? Essa pergunta aparece na hora de marcar uma viagem, planejar entregas ou organizar a escala de trabalho. Neste tutorial você vai criar no n8n um workflow que responde isso sozinho: ele busca a lista de feriados nacionais do ano atual numa API pública e mostra apenas os que ainda não passaram.

São só três nós, e o exemplo ensina duas ideias muito úteis: colocar a data de hoje dentro de uma URL com uma expressão e usar o nó Filter para ficar só com os itens que interessam. A API usada é a BrasilAPI, gratuita e sem cadastro.

O que você vai construir

Este é o workflow final no editor do n8n:

Editor do n8n com o workflow Próximos feriados nacionais: nós When clicking Execute workflow, HTTP Request e Filter ligados em sequência
O workflow final “Próximos feriados nacionais” no editor do n8n (versão 2.40.7).
  • Manual Trigger (no canvas, “When clicking ‘Execute workflow’”): inicia o workflow quando você clica no botão.
  • HTTP Request: busca na BrasilAPI os feriados nacionais do ano atual.
  • Filter: deixa passar só os feriados com data igual ou posterior a hoje.

Versão usada: n8n 2.40.7. Os nomes de botões e campos aparecem em inglês, exatamente como na interface. Os prints foram feitos em 26/09/2026, por isso o ano consultado é 2026 e a lista final começa em outubro.

Pré-requisitos


Montando o workflow, nó por nó

Crie um workflow novo e dê a ele o nome Próximos feriados nacionais. Depois, adicione os três nós abaixo, nesta ordem, sempre pelo botão + que aparece à direita do nó anterior.

Nó 1: Manual Trigger (o botão de início)

Todo workflow começa com um gatilho. Clique em Add first step, digite “manual” na busca e escolha Manual Trigger. No canvas, o nó aparece com o nome When clicking ‘Execute workflow’, que descreve exatamente o que ele faz: dispara o workflow quando você clica em Execute workflow.

Tela do nó When clicking Execute workflow com o aviso This node is where the workflow execution starts e a mensagem This node does not have any parameters; à direita, a saída com 1 item vazio
O Manual Trigger não tem configuração. Depois de executado, ele entrega 1 item vazio.
CampoValorPor que assim
(nenhum)(nenhum)O próprio n8n avisa: “This node does not have any parameters”. O nó só serve para dar a partida.

Depois de executar, a saída do nó mostra 1 item com a observação “This is an item, but it’s empty”. Esse item vazio é só o “empurrão” que faz o próximo nó rodar uma vez. Mais tarde, quando quiser receber a lista toda semana, basta trocar este gatilho por um Schedule Trigger.

Nó 2: HTTP Request (buscar os feriados do ano)

A BrasilAPI tem um endereço que devolve os feriados nacionais de um ano: basta colocar o ano no fim da URL. Para o workflow funcionar em qualquer ano sem você precisar editar nada, o ano entra por uma expressão. Esta é a URL completa que vamos usar:

https://brasilapi.com.br/api/feriados/v1/{{ $now.year }}

Clique no + à direita do Manual Trigger, adicione um nó HTTP Request e preencha como na tabela:

Tela do nó HTTP Request com Method GET e a URL com a expressão $now.year, resolvida como https://brasilapi.com.br/api/feriados/v1/2026; à direita, a resposta em JSON com 14 itens, começando por Confraternização mundial
HTTP Request com o ano atual na URL. À direita (OUTPUT), a lista de feriados de 2026 devolvida pela BrasilAPI.
CampoValorPor que assim
MethodGETVamos apenas consultar dados, sem enviar nada.
URLa URL do bloco acimaEndereço de feriados da BrasilAPI. A parte entre chaves duplas é trocada pelo ano atual.
AuthenticationNoneA BrasilAPI é pública e não pede chave.
Send Query ParametersdesligadoO ano já vai dentro da própria URL.
Send HeadersdesligadoNão são necessários cabeçalhos especiais.
Send BodydesligadoUma consulta GET não envia corpo.
Options(nenhuma)As opções padrão bastam.

Para escrever a expressão, digite a URL até /v1/ e, em seguida, {{ $now.year }}. Ao digitar as chaves duplas, o campo passa para o modo expressão (aparece o ícone fx). Logo abaixo do campo, o n8n mostra a URL já resolvida; no dia do nosso teste, ela ficou https://brasilapi.com.br/api/feriados/v1/2026. Confira sempre essa prévia antes de executar.

A variável $now guarda a data e a hora do momento em que o workflow roda, e .year pega só o ano dela. Assim, em janeiro do ano que vem, a mesma URL passa a pedir os feriados do novo ano, sem nenhuma edição.

Clique em Execute step. A BrasilAPI respondeu com 14 items, um para cada feriado de 2026. Cada item tem quatro campos: date (a data no formato ano-mês-dia, como 2026-01-01), name (o nome, como “Confraternização mundial”), type (aqui sempre national) e weekday (o dia da semana, como “quinta-feira”). Repare que a lista inclui datas como o Carnaval e a Sexta-feira Santa; em muitos lugares o Carnaval é ponto facultativo, então vale conferir as regras da sua cidade e da sua empresa.

Nó 3: Filter (só os feriados a partir de hoje)

A lista tem o ano inteiro, mas só queremos os feriados que ainda vão acontecer. É para isso que existe o nó Filter: ele testa uma condição em cada item e deixa passar apenas os que a cumprem. Clique no + à direita do HTTP Request, procure por “Filter” e adicione o nó.

Tela do nó Filter com a condição $json.date is after or equal to $today e Convert types where required desligado; à direita, a aba Kept com 5 itens, de Nossa Senhora Aparecida (2026-10-12) a Natal (2026-12-25), e a aba Discarded com 9 itens
O Filter comparando a data de cada feriado com a data de hoje. À direita, os 5 feriados que passaram (Kept).
CampoValorPor que assim
Conditions → valor da esquerda{{ $json.date }}A data de cada feriado, vinda do nó anterior.
Conditions → operadorDate & Time → is after or equal toCompara datas, e não textos. “After or equal” inclui o próprio dia de hoje.
Conditions → valor da direita{{ $today }}A data de hoje, à meia-noite.
Convert types where requireddesligadoNão foi preciso: o n8n reconheceu as datas no formato ano-mês-dia.
Options(nenhuma)As opções padrão bastam.

Para montar a condição, arraste o campo date do painel INPUT, à esquerda, para o primeiro campo da condição; o n8n escreve {{ $json.date }} sozinho. Depois, abra a lista do operador, entre no grupo Date & Time e escolha is after or equal to. No segundo campo, digite {{ $today }}.

Por que $today e não $now? As duas variáveis têm a data de hoje, mas $now também traz a hora atual, enquanto $today marca o dia à meia-noite. Com $today, um feriado que cai hoje continua na lista; com $now, ele seria descartado assim que passasse da meia-noite. Na seção de erros comuns há um teste que mostra essa diferença.

Clique em Execute step. O painel OUTPUT do Filter tem duas abas: Kept, com os itens que passaram, e Discarded, com os que ficaram de fora. No nosso teste, em 26/09/2026, ficaram 5 itens em Kept (Nossa Senhora Aparecida, Finados, Proclamação da República, Dia da consciência negra e Natal) e 9 itens em Discarded, que são os feriados de janeiro a setembro.


O workflow completo e o teste

Feche o nó e clique em Execute workflow, na parte de baixo do canvas. Os três nós ficam com contorno verde, e as ligações mostram quantos itens passaram por cada etapa: 1 item saindo do gatilho, 14 items saindo do HTTP Request e 5 items na saída “Kept” do Filter.

Workflow executado com os três nós em verde: 1 item entre o gatilho e o HTTP Request, 14 items entre o HTTP Request e o Filter e 5 items na saída Kept do Filter
O workflow completo depois do teste: 14 feriados chegaram ao Filter e 5 passaram.

Para ver o resultado sem abrir os nós, clique em Logs, na barra inferior, e selecione o Filter. A tabela mostra os feriados que ainda vão acontecer, com a data, o nome, o tipo e o dia da semana:

Painel Logs com o nó Filter selecionado e a aba Kept (5 items): 2026-10-12 Nossa Senhora Aparecida segunda-feira, 2026-11-02 Finados segunda-feira, 2026-11-15 Proclamação da República domingo, 2026-11-20 Dia da consciência negra sexta-feira e 2026-12-25 Natal sexta-feira
Resultado do teste no painel Logs: os 5 próximos feriados nacionais a partir de 26/09/2026.

Um detalhe para o fim do ano: como a consulta é sempre do ano atual, a lista vai ficando menor. Em dezembro, depois do Natal, o Filter não deixa passar nenhum item. Se quiser ver também os feriados do ano seguinte nessa época, uma ideia é duplicar o HTTP Request trocando o ano por {{ $now.year + 1 }}.

Erros comuns

“The resource you are requesting could not be found”, com a mensagem “Ano fora do intervalo suportado entre 1900 e 2199.” A BrasilAPI respondeu com o código 404 porque o ano da URL não é aceito. No teste abaixo, escrevemos o ano com dois dígitos (26), um engano comum quando se digita o ano à mão. Usando {{ $now.year }}, o ano sempre vai com quatro dígitos.

Nó HTTP Request com a URL terminada em /v1/26 e o erro The resource you are requesting could not be found, com a mensagem Ano fora do intervalo suportado entre 1900 e 2199
Erro real com o ano digitado com dois dígitos: a API só aceita anos entre 1900 e 2199.

“The service was not able to process your request”, com a mensagem “Erro ao calcular feriados.” Aconteceu quando usamos {{ $now }} na URL, esquecendo o .year. Veja na prévia abaixo do campo: em vez do ano, entra a data e a hora completas (2026-09-26T…), e a API não sabe o que fazer com isso.

Nó HTTP Request com a expressão $now na URL, resolvida como uma data completa, e o erro The service was not able to process your request com a mensagem Erro ao calcular feriados
Erro real com $now sem o .year na URL.

O feriado de hoje some da lista. Não aparece mensagem de erro, mas o resultado fica errado. Para mostrar o problema sem esperar um feriado, simulamos o dia 12/10 trocando o valor da direita do Filter por {{ $now.set({month:10, day:12}) }}, que é “agora, só que em 12 de outubro”. O feriado de 12/10 foi para Discarded e ficaram só 4 itens em Kept. Com {{ $today.set({month:10, day:12}) }}, que marca a meia-noite, o 12/10 continuou na lista. Por isso usamos $today.

Nó Filter com o valor da direita $now.set month 10 day 12 e a aba Kept com apenas 4 itens, começando em Finados; o feriado de 12 de outubro foi descartado
Com $now no Filter, o feriado do próprio dia é descartado (Kept com 4 itens em vez de 5).
  • “The connection cannot be established, this usually occurs due to an incorrect host (domain) value”. O n8n não conseguiu chegar ao servidor. Normalmente é um erro de digitação no domínio da URL ou falta de internet no computador onde o n8n está rodando.

JSON do workflow para importar

Se preferir, importe o workflow pronto. Baixe o arquivo abaixo ou copie o JSON. No n8n, crie um workflow novo e escolha uma das opções: abra o menu … (três pontinhos) no topo do editor, vá em Import e depois em From file; ou cole o JSON direto no canvas com Ctrl+V.

O download é um arquivo .zip com o proximos-feriados-nacionais.json dentro. Descompacte antes de importar (ou copie o JSON do bloco abaixo).

{
  "name": "Próximos feriados nacionais",
  "nodes": [
    {
      "parameters": {},
      "id": "5f1a0c21-1111-4c3e-8a01-0d0000000001",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "url": "=https://brasilapi.com.br/api/feriados/v1/{{ $now.year }}",
        "options": {}
      },
      "id": "5f1a0c21-2222-4c3e-8a01-0d0000000002",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.5,
      "position": [
        260,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "5f1a0c21-cond-4c3e-8a01-0d00000000c1",
              "leftValue": "={{ $json.date }}",
              "rightValue": "={{ $today }}",
              "operator": {
                "type": "dateTime",
                "operation": "afterOrEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "5f1a0c21-3333-4c3e-8a01-0d0000000003",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.3,
      "position": [
        520,
        0
      ]
    }
  ],
  "connections": {
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  }
}

O workflow não usa credenciais, então funciona logo depois de importado: é só clicar em Execute workflow.

Recapitulando

  • O Manual Trigger inicia o workflow com um clique e entrega 1 item vazio.
  • Com a expressão {{ $now.year }}, a URL do HTTP Request sempre pede os feriados do ano atual.
  • O Filter com Date & Time → is after or equal to e {{ $today }} deixa passar só as datas de hoje em diante.
  • As abas Kept e Discarded mostram o que passou e o que ficou de fora do filtro.

Com o Filter, você pode reaproveitar a mesma ideia em vários outros workflows: ficar só com pedidos de hoje, só com tarefas atrasadas ou só com itens acima de um valor. Nos próximos tutoriais, vamos continuar usando APIs públicas brasileiras para montar automações simples do dia a dia.