Etapa 7 de 8Trilha Criar do zero

Preço da Tabela FIPE no n8n com formulário (API gratuita, sem cadastro)

Monte no n8n uma consulta à Tabela FIPE: digite o código FIPE e o ano e veja o preço médio do carro na hora, com dois HTTP Requests encadeados e uma API gratuita, sem cadastro.

14 min de leitura Iniciante

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.

Vídeo 7 do canal Orbitacode: Preço da Tabela FIPE no n8n com formulário (dois HTTP Requests) | Trilha Iniciante, Etapa 7

O que você vai construir

Editor do n8n com o workflow Preço da Tabela FIPE: On form submission, Buscar anos, Ano escolhido, Buscar preço e Mostrar preço; entre Buscar anos e Ano escolhido aparecem 9 items
O workflow final no editor do n8n (versão 2.40), já executado: 1 item vira 9 depois da primeira busca, e só 1 passa pelo filtro.
NóO que fazComparando com o dia a dia
1. On form submissionMostra 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.
Página do formulário do n8n com o resultado: ONIX HATCH 1.0 12V Flex 5p Mec., GM - Chevrolet, 2021, Flex, preço médio R$ 58.869,00, referência outubro de 2026
O resultado no formulário de teste (código 004519-5, ano 2021, referência outubro de 2026).

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"}
CampoSignificado
priceO preço médio, já em reais e no formato brasileiro.
brand / modelA marca e o nome completo do modelo.
modelYearO ano do modelo (32000 = zero km).
fuelO combustível.
referenceMonthO mês da tabela usada.
codeFipeO 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:

CampoValorPara que serve
Form TitlePreço da Tabela FIPEO título no topo da página.
Form DescriptionDigite 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 NameElement TypeConfiguração
FIPETextPlaceholder 004519-5 · Required Field ligado. É texto, e não número, porque o código tem traço e zeros à esquerda.
AnoTextPlaceholder 2021 · Required Field ligado. Para zero km, a pessoa digita 32000.
Nó On form submission com Form Title Preço da Tabela FIPE, a descrição e os campos FIPE e Ano
O formulário: título, descrição e os dois campos de texto.

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ó HTTP Request Buscar anos com a URL da API e o OUTPUT em tabela com 9 items, colunas code e name
Buscar anos: a resposta é uma lista, e cada ano vira um item (9 items).

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:

ParteValor
Valor 1arraste o code do INPUT → {{ $json.code }}
OperaçãoString › starts with (começa com)
Valor 2no 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ó Filter Ano escolhido com a condição code starts with o Ano do formulário seguido de traço, e o OUTPUT Kept com 1 item
Ano escolhido: só o code que começa com o ano digitado passa.

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ó HTTP Request Buscar preço com a URL que usa o FIPE do formulário e o code do Filter, e o OUTPUT com price, brand, model e referenceMonth
Buscar preço: a URL junta um dado do formulário e um dado do nó anterior.

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.

Nó Form Ending Mostrar preço com o título Preço médio na Tabela FIPE e a mensagem em modo Expression
Mostrar preço: a página final, com a mensagem em Expression.

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çãoPreenchimentoResultado no teste
Avaliar um usado004519-5 · 2021R$ 58.869,00
Comparar com um seminovo004519-5 · 2024R$ 66.401,00
Preço do zero km004519-5 · 32000R$ 97.244,00
Página de resultado com o mesmo modelo no ano 32000 (zero km) e preço médio R$ 97.244,00
Zero km: na Tabela FIPE, o ano 32000 significa carro novo.

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 apareceCausaComo 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çoO 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.
Nó Buscar anos com erro The resource you are requesting could not be found para o código 999999-9
Código FIPE inexistente: a API responde 404 e o nó fica vermelho.
Formulário do n8n mostrando apenas Form Submitted e Your response has been recorded
Ano inexistente: nada de erro vermelho, mas também nada de preço.
Nó Buscar preço com a prévia da URL com duas barras seguidas e o erro Cannot GET
O FIPE veio do lugar errado: a prévia da URL mostra duas barras seguidas.

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.

Janela Publish workflow do n8n com o campo Version name
A janela de publicação.

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.

Nó On form submission mostrando a aba Production URL com o endereço do formulário em localhost
A Production URL aparece no primeiro nó depois do Publish.
Formulário aberto pela Production URL mostrando o preço do modelo 2024
Pela Production URL, sem o editor aberto: o mesmo modelo, ano 2024.

No computador ou num servidor?

No seu computador (Docker)Num servidor
Para que serveTeste e aprendizadoProdução
Quando funcionaSó com o computador e o Docker ligadosSempre: é uma máquina na internet ligada 24 horas
Quem abre o formulárioSó 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 cars por motorcycles ou trucks nas 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 code que 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

Nó de saída · próxima etapa da trilha

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…