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:

- 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
- Um n8n funcionando no seu computador. Se ainda não tem, siga antes o tutorial n8n do zero com Docker: instale e receba a cotação do dólar no e-mail.
- Acesso à internet a partir do n8n, para consultar a BrasilAPI.
- Nenhuma conta, senha ou chave de API.
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.

| Campo | Valor | Por 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:

| Campo | Valor | Por que assim |
|---|---|---|
| Method | GET | Vamos apenas consultar dados, sem enviar nada. |
| URL | a URL do bloco acima | Endereço de feriados da BrasilAPI. A parte entre chaves duplas é trocada pelo ano atual. |
| Authentication | None | A BrasilAPI é pública e não pede chave. |
| Send Query Parameters | desligado | O ano já vai dentro da própria URL. |
| Send Headers | desligado | Não são necessários cabeçalhos especiais. |
| Send Body | desligado | Uma 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ó.

| Campo | Valor | Por que assim |
|---|---|---|
| Conditions → valor da esquerda | {{ $json.date }} | A data de cada feriado, vinda do nó anterior. |
| Conditions → operador | Date & Time → is after or equal to | Compara 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 required | desligado | Nã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.

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:

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.

“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.

$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.

$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.