Coloca o CEP primeiro.
O CEP brasileiro tem 8 dígitos. Desses 8 dígitos você extrai a cidade, o estado, o bairro e o logradouro. São 4 campos. Preenchidos automaticamente. Com um único input.
Mas você não faz isso, né? Não. Você me faz digitar a rua, o número, o bairro, depois escolher o estado num dropdown de 27 opções pra achar São Paulo espremido entre Santa Catarina e Sergipe, depois o CEP, e — o grand finale — confirmar que eu moro no Brasil. Como se eu tivesse digitado "Rua Augusta" por acidente, querendo dizer uma rua em Osaka.
Estamos em 2026. Isso é inaceitável.
São 8 dígitos.
Eu digito 01001000. Você agora sabe que eu estou na Praça da Sé, Sé, São Paulo — SP. Você não precisava me perguntar isso. Não precisava de dropdown. Não precisava que eu scrollasse até achar meu estado. Você tinha a resposta o tempo inteiro, em 8 números, e simplesmente… não usou.
E tem mais: a API retorna latitude e longitude. Dá pra mostrar o endereço no mapa. Retorna o DDD. Retorna o código IBGE da cidade. Tudo de graça.
A API é pública. É gratuita. São 4 linhas de código. Olha:
const res = await fetch(`https://cep.awesomeapi.com.br/json/${cep}`)
const data = await res.json()
cidade.value = data.city
estado.value = data.state
bairro.value = data.district
Pronto. É isso. Você poderia ter implementado isso no tempo que levou pra ler esse site.
Não acredita? Testa.
Viu como funciona? Você digitou 8 números e 4 campos se preencheram sozinhos. Agora você só precisa digitar o número da casa e o complemento. Não é mágica. É uma tabela de lookup. A gente tem isso desde os anos 70.
O muro da vergonha.
Tier 1: CEP por último. Rua, número, bairro, cidade, estado… e lá no final, o CEP. Você tinha os dados pra preencher 4 campos automaticamente e colocou o campo que resolve tudo por último. Parabéns. Mercado Livre faz isso. Magazine Luiza faz isso. Americanas faz isso. Basicamente todo e-commerce brasileiro faz isso. Horas coletivas de vida humana, desperdiçadas scrollando até "São Paulo" num dropdown.
Tier 2: Tem CEP, não faz nada. Você coleta o CEP. Você tem o CEP. Você não faz nada com ele. O CEP fica lá no banco de dados, inerte, como um extintor de incêndio atrás de um vidro escrito "não quebre". Pra que você tá guardando isso?
Tier 3: O dropdown de estado. 27 estados. Sem busca. Sem type-ahead. Scroll puro. Pontos bônus se Sergipe aparece antes de São Paulo. Pontos extras se não está em ordem alfabética. Seus psicopatas.
Tier 4: O formulário que reseta. Preenchi 10 campos. O gateway de pagamento falhou. Apertei voltar. Tudo sumiu. Minha rua. Meu bairro. Meu estado. Minha vontade de viver. Tudo voltou pro vazio. O desenvolvedor responsável por isso dorme 8 horas por noite. Essa é a parte que me assombra.
Outras coisas que você deveria fazer.
Já que a gente tá aqui:
Usa o teclado certo. Se você tá pedindo um CEP, usa inputmode="numeric". É um atributo HTML. No celular, o usuário vê um teclado numérico, não um QWERTY completo. Serve pra CEP, telefone, cartão de crédito. Qualquer coisa que é obviamente só dígito. Você já sabe o tipo do input. Avisa o celular.
Trabalha com o autofill, não contra ele. Navegadores têm autofill há mais de uma década. Usa os atributos certos — autocomplete="postal-code", address-line1, country. Se o seu formulário briga com o autofill do browser, o seu formulário tá errado. O browser tá tentando economizar 45 segundos do seu usuário. Deixa ele.
Escopo o autocomplete. Quando você já sabe o CEP, o autocomplete de endereço busca em alguns milhares de endereços. Sem o CEP, busca em 20 milhões. É mais rápido. Mais preciso. O usuário digita menos. Você recebe dados mais limpos. Todo mundo ganha.
Conserta seus formulários.
Coloca o CEP primeiro. Autopreenche a cidade. O estado. O bairro. O logradouro. Deixa o usuário digitar só o que você não consegue adivinhar: o número e o complemento.
É um problema resolvido. A API é gratuita. O código são 4 linhas. Não existe literalmente nenhum motivo pra não fazer isso além da inércia coletiva de um milhão de product managers copiando e colando o mesmo template de formulário de endereço de 2009 e nunca perguntando "espera, por que o CEP tá por último?"
Por que o CEP tá por último?
Coloca o CEP primeiro. Simples assim.