Quanto vale aquele carro usado que você está de olho? E o seu, quanto daria numa troca? Antes de negociar, quase todo mundo consulta a Tabela FIPE, o preço médio de referência dos veículos no Brasil. Neste tutorial você vai montar no n8n uma página de formulário onde digita o código FIPE e o ano do modelo, e recebe na hora o modelo, o combustível, o preço médio em reais e o mês de referência.
Os dados vêm da FIPE API do parallelum, gratuita e sem cadastro nem chave. O workflow tem cinco nós e traz duas novidades na série: dois HTTP Requests em sequência, em que o segundo usa a resposta do primeiro, e uma resposta em forma de lista que vira vários itens no n8n, peneirada com o nó Filter.
Para que serve no dia a dia: negociar a compra ou a venda de um usado, conferir se o valor do seguro está coerente, simular a entrada de um financiamento ou ver quanto custa o mesmo modelo zero quilômetro.
O que você vai construir

| Nó | O que faz | Comparando com o dia a dia |
|---|---|---|
| 1. On form submission | Mostra o formulário e recebe o código FIPE e o ano. | Você anotando o código do anúncio. |
| 2. Buscar anos (HTTP Request) | Pergunta à API quais anos existem para aquele modelo. | O vendedor abrindo a pasta do modelo. |
| 3. Ano escolhido (Filter) | Deixa passar só o ano que você digitou. | Separar a ficha do ano certo. |
| 4. Buscar preço (HTTP Request) | Pergunta o preço do modelo naquele ano. | Olhar o preço na ficha. |
| 5. Mostrar preço (Form Ending) | Mostra a página final com o resultado. | O papel com o valor anotado. |

Pré-requisitos
- Um n8n funcionando. Se ainda não tem, siga antes o tutorial n8n do zero com Docker.
- Acesso à internet a partir do n8n.
- Nenhuma conta ou chave: a API é aberta (até 500 consultas por dia).
Versão usada: n8n 2.40. Os nomes de botões e campos aparecem em inglês, como na interface. Este tutorial continua a consulta de CEP com formulário, o Filter dos feriados e o conversor de moedas; se algum conceito parecer novo demais, vale dar uma olhada neles.
A Tabela FIPE e a API em 2 minutos
A Tabela FIPE é publicada pela Fundação Instituto de Pesquisas Econômicas e mostra o preço médio de venda de carros, motos e caminhões no Brasil, com base em anúncios e negócios do mês. Ela é atualizada todo mês, e cada atualização tem um mês de referência. Seguradoras, bancos e lojas usam a tabela como ponto de partida.
O site oficial é feito para consulta manual. Para automatizar, vamos usar a FIPE API do parallelum, um projeto aberto que entrega os mesmos dados em JSON. Sem token, ela permite 500 consultas por dia (o limite aparece no cabeçalho x-ratelimit-limit da resposta).
O código FIPE
Todo modelo tem um código FIPE, com seis números, um traço e um dígito, como 004519-5 (Onix Hatch 1.0 12V Flex). Ele aparece no próprio site da FIPE, em muitos anúncios de carros e na apólice do seguro.
Dois endereços, um depois do outro
O primeiro endereço recebe o código e devolve a lista de anos disponíveis para o modelo:
https://fipe.parallelum.com.br/api/v2/cars/004519-5/years
[{"code":"32000-5","name":"32000 Flex"},{"code":"2027-5","name":"2027 Flex"}, … ,{"code":"2021-5","name":"2021 Flex"},{"code":"2020-5","name":"2020 Flex"}]
Repare no code: é o ano, um traço e um número que indica o combustível (nos modelos atuais, 5 = Flex; carros antigos usam 1 para gasolina e 2 para álcool, por exemplo). E o ano 32000 é como a FIPE chama o zero quilômetro. Como o número do combustível muda de modelo para modelo, não dá para “adivinhar” o code: primeiro pegamos a lista, depois o ano certo.
O segundo endereço recebe o código FIPE e o code do ano, e devolve o preço:
https://fipe.parallelum.com.br/api/v2/cars/004519-5/years/2021-5
{"vehicleType":1,"price":"R$ 58.869,00","brand":"GM - Chevrolet","model":"ONIX HATCH 1.0 12V Flex 5p Mec.","modelYear":2021,"fuel":"Flex","codeFipe":"004519-5","referenceMonth":"outubro de 2026","fuelAcronym":"F"}
| Campo | Significado |
|---|---|
price | O preço médio, já em reais e no formato brasileiro. |
brand / model | A marca e o nome completo do modelo. |
modelYear | O ano do modelo (32000 = zero km). |
fuel | O combustível. |
referenceMonth | O mês da tabela usada. |
codeFipe | O código FIPE consultado. |
Por que não a BrasilAPI? A BrasilAPI também tem rotas da FIPE, mas no dia dos testes (07/10/2026) elas responderam com erro 500, “Fonte de dados FIPE temporariamente indisponível”. A API do parallelum respondeu normalmente em todas as chamadas. Consultas de meses anteriores (parâmetro reference) exigem token pago, então aqui usamos só a tabela do mês atual.
Montando o workflow, nó por nó
No n8n, clique em Create workflow e dê o nome Preço da Tabela FIPE.
Nó 1: o formulário (On form submission)
Clique no + do canvas, procure por Form e escolha o gatilho On form submission. Preencha:
| Campo | Valor | Para que serve |
|---|---|---|
| Form Title | Preço da Tabela FIPE | O título no topo da página. |
| Form Description | Digite o código FIPE do carro e o ano do modelo. | A instrução para quem preenche. |
Em Form Elements, crie dois campos com Add Form Element:
| Field Name | Element Type | Configuração |
|---|---|---|
| FIPE | Text | Placeholder 004519-5 · Required Field ligado. É texto, e não número, porque o código tem traço e zeros à esquerda. |
| Ano | Text | Placeholder 2021 · Required Field ligado. Para zero km, a pessoa digita 32000. |

Clique em Execute step, preencha 004519-5 e 2021 no formulário de teste e envie. O OUTPUT mostra um item com FIPE e Ano.
Nó 2: a lista de anos (HTTP Request)
Clique no + depois do formulário, escolha HTTP Request e renomeie para Buscar anos. Deixe o Method em GET. Na URL, mude para Expression, cole o começo do endereço, arraste o campo FIPE do INPUT para o meio e termine com /years:
https://fipe.parallelum.com.br/api/v2/cars/{{ $json.FIPE }}/years
Clique em Execute step. Aqui está a primeira novidade: o OUTPUT não mostra um item, mas 9 items, um para cada ano. Sempre que uma API responde com uma lista (um array, entre colchetes), o n8n transforma cada elemento num item separado. E os nós seguintes rodam uma vez para cada item, a menos que você filtre antes.

Nó 3: escolhendo o ano (Filter)
Dos nove anos, só interessa o que foi digitado. Adicione o nó Filter (a “peneira” que apareceu no tutorial dos feriados) e renomeie para Ano escolhido. Monte a condição assim:
| Parte | Valor |
|---|---|
| Valor 1 | arraste o code do INPUT → {{ $json.code }} |
| Operação | String › starts with (começa com) |
| Valor 2 | no INPUT, desça até o bloco On form submission, arraste o Ano e digite um traço no fim → {{ $('On form submission').item.json.Ano }}- |
Por que o traço? Porque assim 2021- só combina com 2021-5, e um ano como 202 digitado pela metade não pega vários anos de uma vez. E por que $('On form submission')? Porque o $json aqui é cada ano da lista; o ano digitado está no formulário, dois nós atrás.
Clique em Execute step: a aba Kept mostra 1 item (o 2021-5) e a Discarded, os outros 8.

Nó 4: a segunda busca, o preço (HTTP Request)
Adicione outro HTTP Request e renomeie para Buscar preço. Method GET. Na URL (Expression), o começo é o mesmo; o código FIPE vem do bloco do formulário, e o code do ano vem do Filter:
https://fipe.parallelum.com.br/api/v2/cars/{{ $('On form submission').item.json.FIPE }}/years/{{ $json.code }}
A prévia logo abaixo do campo mostra o endereço montado, https://fipe.parallelum.com.br/api/v2/cars/004519-5/years/2021-5. É isso que chamamos de buscas encadeadas: a segunda consulta usa um dado (o code) que só a primeira resposta tinha. Execute o nó: chegam price, brand, model, modelYear, fuel, codeFipe e referenceMonth.

Nó 5: a página do resultado (Form Ending)
Adicione o nó Form e escolha a operação Form Ending. Renomeie para Mostrar preço. Deixe Show Completion Screen; em Completion Title, escreva Preço médio na Tabela FIPE; em Completion Message, mude para Expression e cole:
{{ $json.model }}
{{ $json.brand }} · {{ $json.modelYear }} · {{ $json.fuel }}
Preço médio: {{ $json.price }}
Referência: {{ $json.referenceMonth }} · código FIPE {{ $json.codeFipe }}
Cada {{ … }} é trocado pelo valor que veio da API, e as quebras de linha separam as informações. Diferente do conversor de moedas, aqui não precisamos formatar o número: o price já vem como texto pronto, com “R$”, ponto e vírgula.

Testando: usado, seminovo e zero km
Feche o nó e clique em Execute workflow. No formulário de teste, experimente (valores da referência de outubro de 2026; os seus vão mudar com o mês):
| Situação | Preenchimento | Resultado no teste |
|---|---|---|
| Avaliar um usado | 004519-5 · 2021 | R$ 58.869,00 |
| Comparar com um seminovo | 004519-5 · 2024 | R$ 66.401,00 |
| Preço do zero km | 004519-5 · 32000 | R$ 97.244,00 |

No canvas, os rótulos das setas contam a história: 1 item sai do formulário, 9 items saem do Buscar anos, 1 item passa pelo filtro e segue até o fim.
Erros comuns (testados)
Todos os erros abaixo foram reproduzidos no n8n de teste. Quando um nó falha, o formulário mostra só Problem submitting response; o motivo fica no nó vermelho do editor ou na aba Executions.
| O que aparece | Causa | Como resolver |
|---|---|---|
| Formulário: “Problem submitting response”. Buscar anos vermelho: “The resource you are requesting could not be found” | O código FIPE não existe (testado com 999999-9) ou tem um número trocado. A API responde 404, “recurso não encontrado”. | Confira o código no site da FIPE ou no anúncio. |
| Formulário: só “Form Submitted · Your response has been recorded”, sem preço | O ano não existe para aquele modelo (testado com 1990). O Filter não deixa nada passar (Kept vazio) e o workflow para ali, sem erro. | Abra o Buscar anos e veja os anos disponíveis. Para carro novo, use 32000. |
Buscar preço vermelho, com a URL …/cars//years/2021-5 (duas barras) e “Cannot GET” | No Buscar preço, o FIPE foi arrastado como $json.FIPE. O $json ali é o item do Filter, que não tem esse campo. | Arraste o FIPE do bloco On form submission: $('On form submission').item.json.FIPE. |



Quer avisar a pessoa quando o código não existe? Isso é tratamento de erro, o assunto do próximo tutorial da trilha: o HTTP Request ganha uma saída só para erros, que leva a uma mensagem amigável.
Publicando: o endereço definitivo do formulário
Durante os testes, o formulário usa a Test URL, que só funciona com o editor aberto e depois de clicar em Execute workflow. Para deixar a consulta sempre disponível, clique em Publish, no canto superior direito, e confirme.

Depois, abra o nó do formulário e clique na aba Production URL: esse é o endereço definitivo. Salve nos favoritos e use sem abrir o editor.


No computador ou num servidor?
| No seu computador (Docker) | Num servidor | |
|---|---|---|
| Para que serve | Teste e aprendizado | Produção |
| Quando funciona | Só com o computador e o Docker ligados | Sempre: é uma máquina na internet ligada 24 horas |
| Quem abre o formulário | Só você, no próprio computador (endereço com localhost) | Qualquer pessoa com o link, até pelo celular |
Atenção: publicar no n8n do seu computador não é o mesmo que colocar em produção. O endereço com localhost não abre no celular nem em outro computador. Levar o n8n para um servidor é um passo que a série vai dar mais adiante, com calma.
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 abra o menu … (três pontinhos) › Import › From file, ou cole o JSON direto no canvas com Ctrl+V. O workflow não usa credenciais.
O download é um .zip com o tabela-fipe-n8n.json dentro. Depois de importar, clique em Publish para ganhar a sua Production URL.
{
"name": "Preço da Tabela FIPE",
"nodes": [
{
"parameters": {
"formTitle": "Preço da Tabela FIPE",
"formDescription": "Digite o código FIPE do carro e o ano do modelo.",
"formFields": {
"values": [
{
"fieldLabel": "FIPE",
"placeholder": "004519-5",
"requiredField": true
},
{
"fieldLabel": "Ano",
"placeholder": "2021",
"requiredField": true
}
]
},
"options": {}
},
"id": "7f1be000-1111-4c07-9a07-000000000001",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"typeVersion": 2.6,
"position": [
0,
0
],
"webhookId": "7f1be000-aaaa-4c07-9a07-0000000000f1"
},
{
"parameters": {
"url": "=https://fipe.parallelum.com.br/api/v2/cars/{{ $json.FIPE }}/years",
"options": {}
},
"id": "7f1be000-2222-4c07-9a07-000000000002",
"name": "Buscar anos",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.5,
"position": [
260,
0
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "7f1be000-c001-4c07-9a07-00000000c001",
"leftValue": "={{ $json.code }}",
"rightValue": "={{ $('On form submission').item.json.Ano }}-",
"operator": {
"type": "string",
"operation": "startsWith"
}
}
],
"combinator": "and"
},
"options": {}
},
"id": "7f1be000-3333-4c07-9a07-000000000003",
"name": "Ano escolhido",
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
520,
0
]
},
{
"parameters": {
"url": "=https://fipe.parallelum.com.br/api/v2/cars/{{ $('On form submission').item.json.FIPE }}/years/{{ $json.code }}",
"options": {}
},
"id": "7f1be000-4444-4c07-9a07-000000000004",
"name": "Buscar preço",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.5,
"position": [
780,
0
]
},
{
"parameters": {
"operation": "completion",
"completionTitle": "Preço médio na Tabela FIPE",
"completionMessage": "={{ $json.model }}\n{{ $json.brand }} · {{ $json.modelYear }} · {{ $json.fuel }}\nPreço médio: {{ $json.price }}\nReferência: {{ $json.referenceMonth }} · código FIPE {{ $json.codeFipe }}",
"options": {}
},
"id": "7f1be000-5555-4c07-9a07-000000000005",
"name": "Mostrar preço",
"type": "n8n-nodes-base.form",
"typeVersion": 2.5,
"position": [
1040,
0
],
"webhookId": "7f1be000-bbbb-4c07-9a07-0000000000f2"
}
],
"connections": {
"On form submission": {
"main": [
[
{
"node": "Buscar anos",
"type": "main",
"index": 0
}
]
]
},
"Buscar anos": {
"main": [
[
{
"node": "Ano escolhido",
"type": "main",
"index": 0
}
]
]
},
"Ano escolhido": {
"main": [
[
{
"node": "Buscar preço",
"type": "main",
"index": 0
}
]
]
},
"Buscar preço": {
"main": [
[
{
"node": "Mostrar preço",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"settings": {
"executionOrder": "v1",
"timezone": "America/Sao_Paulo"
},
"meta": {
"templateCredsSetupCompleted": false
}
}
Para ir além
- Motos e caminhões: troque
carspormotorcyclesoutrucksnas duas URLs. - Sem saber o código: a API também lista marcas (
https://fipe.parallelum.com.br/api/v2/cars/brands) e modelos de cada marca. Dá para montar um formulário com listas de opções, como no conversor de moedas, mas são mais buscas encadeadas: um bom exercício para depois. - Comparar vários anos: tire o Filter e use todos os itens; cada ano vira uma busca de preço. Cuidado com o limite de 500 consultas por dia.
- Avisar quando o código não existe: o próximo tutorial da trilha mostra como tratar erros do HTTP Request.
Recapitulando
- Quando uma API responde com uma lista, o n8n cria um item por elemento, e os próximos nós rodam por item.
- O Filter com starts with escolhe o item certo usando um dado do formulário.
- Dois HTTP Requests encadeados: a URL do segundo usa o
codeque veio do primeiro. $('On form submission')busca dados do formulário em qualquer ponto do workflow, inclusive dentro de uma URL.- Na Tabela FIPE, o ano 32000 é o zero quilômetro.
- Depois do Publish, a Production URL é o endereço definitivo do formulário.
Começamos pelo mais simples e estamos evoluindo juntos, um passo de cada vez. Nos próximos tutoriais, a trilha vai tratar erros e usar APIs mais sofisticadas. E vêm aí as novas trilhas do site: Projetos reais, montados a partir de vagas de emprego, e Monitoramento, para deixar automações no ar 24 horas.
Importante: a Tabela FIPE é um preço médio de referência. O valor de um carro específico depende de estado de conservação, quilometragem, opcionais e região. Use a consulta como ponto de partida da negociação, não como recomendação financeira.
Próxima etapa da trilha: no Banco pelo código no n8n: tratamento de erro com On Error (BrasilAPI), a Etapa 8 da Trilha Iniciante, você descobre de quem é o código do banco do comprovante e aprende a tratar erros: o HTTP Request ganha uma saída só para erros, que leva a uma mensagem amigável.
Fontes
- FIPE API (parallelum), documentação da v2 (endpoints /cars/{código}/years e /years/{ano}, limites e tokens): https://deividfortuna.github.io/fipe/v2/
- FIPE API, código-fonte e informações do projeto: https://github.com/deividfortuna/fipe
- Fundação Instituto de Pesquisas Econômicas, consulta oficial da Tabela FIPE: https://veiculos.fipe.org.br/
- n8n Docs: n8n Form Trigger node: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/
- n8n Docs: n8n Form node (Form Ending): https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.form/
- n8n Docs: HTTP Request node: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/
- n8n Docs: Filter node: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/
- n8n Docs: estrutura de dados e itens: https://docs.n8n.io/data/data-structure/
- Testes próprios no n8n 2.40 local, em 07/10/2026 (Tabela FIPE de outubro de 2026). A BrasilAPI (rotas /fipe) respondeu HTTP 500 no mesmo dia.
Banco pelo código no n8n: tratamento de erro com On Error (BrasilAPI)
Descubra de quem é o código do banco do comprovante com um formulário no n8n e a BrasilAPI, e aprenda a tratar erros com On Error › Continue (using error…