API para iFood: como extrair restaurantes, cardápios e preços com Python
Quer testar? Acesse o dashboard e ganhe 100 créditos grátis para começar.
Ir para o DashboardO iFood concentra dados valiosos sobre o mercado de food service no Brasil — restaurantes, cardápios, preços, taxas de entrega, avaliações e horários de funcionamento. Mas o iFood não disponibiliza uma API pública para consumo externo. Se você precisa desses dados para monitoramento de preços, pesquisa de mercado ou automação, a saída é usar uma API para iFood que já entrega tudo em JSON estruturado.
Neste artigo, vamos montar um workflow completo em Python que:
- Busca restaurantes por palavra-chave e CEP (endpoint PLP)
- Extrai dados completos de cada restaurante — merchant info + cardápio (endpoint PDP)
- Salva os resultados em JSONL para análise posterior
Por que usar uma API para iFood
Construir e manter um scraper próprio para o iFood é caro: o site muda com frequência, usa proteções anti-bot e exige engenharia reversa constante. Com uma API pronta para iFood, você:
- Recebe JSON padronizado sem lidar com HTML ou JavaScript
- Tem endpoints estáveis que abstraem mudanças do site
- Escala com pay-as-you-go — sem plano fixo
- Usa a mesma integração para outras fontes (Mercado Livre, Amazon, Booking, etc.)
A GeckoAPI resolve essa parte. Você foca no que importa: análise e produto.
Passo 1: buscar restaurantes por região (PLP)
O endpoint PLP do iFood permite buscar restaurantes por keyword e CEP. A GeckoAPI geocodifica o CEP automaticamente e retorna a listagem paginada.
import requests
API_URL = "https://api.geckoapi.com.br/v1/extract"
API_KEY = "SUA_CHAVE_AQUI"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
def buscar_restaurantes(keyword: str, cep: str, page: int = 1) -> dict:
payload = {
"target": "ifood.com.br",
"type": "plp",
"keyword": keyword,
"zipCode": cep,
"page": page,
}
resp = requests.post(API_URL, json=payload, headers=headers)
resp.raise_for_status()
return resp.json()
resultado = buscar_restaurantes("pizza", "01310-100")
items = resultado["data"]["items"]
for r in items[:5]:
print(f"{r['name']} — nota {r['userRating']} — {r['distanceKm']} km")
print(f" Entrega: R$ {r['deliveryInfo']['fee']} ({r['deliveryInfo']['timeMinMinutes']}-{r['deliveryInfo']['timeMaxMinutes']} min)")
A resposta inclui para cada restaurante:
- nome, categoria, nota e distância
- taxa de entrega e tempo estimado
- URL do merchant (usada no próximo passo)
- status — se está aberto, aceita agendamento, se é iFood Delivery
- paginação —
nextPageenextCursorpara percorrer todas as páginas
Passo 2: extrair merchant + cardápio completo (PDP)
Com a URL do restaurante obtida na busca, você chama o endpoint PDP para pegar os dados completos: informações do merchant e o cardápio inteiro com preços.
def extrair_merchant(url_restaurante: str) -> dict:
payload = {
"target": "ifood.com.br",
"type": "pdp",
"url": url_restaurante,
}
resp = requests.post(API_URL, json=payload, headers=headers)
resp.raise_for_status()
return resp.json()
merchant_url = items[0]["url"]
merchant = extrair_merchant(merchant_url)
dados = merchant["data"]["data"]
print(f"Restaurante: {dados['name']}")
print(f"Nota: {dados['userRating']} ({dados['userRatingCount']} avaliações)")
print(f"Categoria: {dados['mainCategory']['name']}")
print(f"Pedido mínimo: R$ {dados['minimumOrderValue']}")
print(f"Tempo de entrega: {dados['deliveryTimeMinutes']} min")
print(f"\nCardápio ({dados['menuItemCount']} itens):")
for secao in dados["menu"]:
print(f"\n [{secao['name']}]")
for item in secao["items"]:
preco = f"R$ {item['price']:.2f}"
promo = f" (de R$ {item['originalPrice']:.2f})" if item.get("originalPrice") and item["originalPrice"] > item["price"] else ""
print(f" {item['name']} — {preco}{promo}")
O PDP retorna dados ricos sobre o merchant:
| Dado | Exemplo |
|---|---|
| Nome e descrição | ”Estacao Rodo Lanches e Pizzas” |
| Avaliação e contagem | 4.8 (1006 avaliações) |
| Categoria principal | Marmita, Pizza, Lanche |
| Endereço e coordenadas | Curitiba/PR, lat/lng |
| Taxa de entrega | R$ 10.99 (fixa) |
| Tempo de entrega | 63-73 min |
| Métodos de pagamento | PIX, Visa, etc. |
| Horários de funcionamento | shifts por dia da semana |
| Cardápio completo | seções → itens com preço, descrição, imagem |
Passo 3: workflow completo — busca + detalhes + salvar
Agora vamos juntar tudo em um pipeline que busca restaurantes, extrai detalhes de cada um e salva em JSONL.
import json
import time
def pipeline_ifood(keyword: str, cep: str, max_restaurantes: int = 10):
resultados = []
busca = buscar_restaurantes(keyword, cep)
restaurantes = busca["data"]["items"][:max_restaurantes]
for i, r in enumerate(restaurantes):
print(f"[{i+1}/{len(restaurantes)}] Extraindo: {r['name']}...")
try:
detalhes = extrair_merchant(r["url"])
resultados.append({
"busca": {
"keyword": keyword,
"cep": cep,
"posicao": r["position"],
"nota_busca": r["userRating"],
"distancia_km": r["distanceKm"],
},
"merchant": detalhes["data"]["data"],
})
except Exception as e:
print(f" Erro: {e}")
time.sleep(1)
arquivo = f"ifood_{keyword}_{cep}.jsonl"
with open(arquivo, "w", encoding="utf-8") as f:
for r in resultados:
f.write(json.dumps(r, ensure_ascii=False) + "\n")
print(f"\n{len(resultados)} restaurantes salvos em {arquivo}")
return resultados
dados = pipeline_ifood("hamburguer", "04101-300", max_restaurantes=20)
Esse script gera um arquivo JSONL com uma linha por restaurante, contendo tanto os dados de busca (posição, nota, distância) quanto os dados completos do merchant (cardápio, preços, horários, avaliações).
Casos de uso: o que dá para fazer com dados do iFood
Monitoramento de preços
Rode o pipeline periodicamente (diário ou semanal) e compare os preços dos itens do cardápio ao longo do tempo. Com isso você pode:
- Detectar aumentos e promoções em tempo real
- Comparar preços do mesmo prato entre restaurantes concorrentes
- Mapear sazonalidade — como os preços mudam em feriados, fins de semana e horários de pico
- Gerar alertas quando um concorrente mudar preço em itens-chave
Isso é especialmente útil para redes de franquias que precisam garantir paridade de preços, ou para dark kitchens que ajustam cardápio com base na concorrência.
Pesquisa acadêmica e análise de mercado
Dados estruturados do iFood são ouro para pesquisas sobre comportamento do mercado de food service:
- Análise de oferta regional — quantos restaurantes de pizza existem num raio de 5 km? Qual a taxa média de entrega?
- Estudos de precificação — como restaurantes precificam itens similares em bairros diferentes?
- Tendências gastronômicas — quais categorias estão crescendo? O que aparece nos “mais pedidos”?
- Impacto de avaliações — há correlação entre nota do restaurante e posição na busca?
- Acessibilidade alimentar — em quais regiões o delivery é mais caro ou tem menos opções?
Para pesquisadores, a vantagem de usar uma API estruturada em vez de scraping manual é a reprodutibilidade: o mesmo script gera o mesmo formato de dados, facilitando comparações longitudinais.
Inteligência competitiva para restaurantes
Se você opera um restaurante ou dark kitchen, monitorar concorrentes no iFood ajuda a:
- Entender como seus preços se comparam com a vizinhança
- Identificar itens novos no cardápio de concorrentes
- Acompanhar avaliações e notas dos competidores ao longo do tempo
- Ajustar sua estratégia de delivery (taxa, tempo estimado, pedido mínimo)
Agregadores e plataformas de BI
Empresas que constroem dashboards, relatórios ou plataformas analíticas para o setor alimentício podem usar a API para:
- Consolidar dados de múltiplos CEPs e categorias
- Alimentar pipelines de ETL que atualizam bases analíticas
- Criar visualizações de mapa de calor por região, preço médio, oferta
- Integrar com ferramentas de BI como Metabase, Looker ou Power BI
Integração com agentes de IA (MCP)
A GeckoAPI também funciona como ferramenta MCP, permitindo que agentes de IA consultem dados do iFood em tempo real. Seu chatbot pode responder:
- “Quais pizzarias estão abertas perto do CEP 01310-100?”
- “Qual a nota e taxa de entrega desse restaurante?”
- “Me mostre os 5 itens mais baratos do cardápio”
- “Qual o tempo médio de entrega nessa região?”
O fluxo: Usuário → Agente MCP → GeckoAPI → Resposta com dados verificáveis.
Boas práticas
- Cache resultados do seu lado para reduzir custo e latência em consultas repetidas
- Use
time.sleep()entre requisições para respeitar limites - Armazene histórico em formato JSONL ou banco de dados para análise temporal
- Foque em dados não pessoais — preços, cardápios, avaliações, taxas (conforme nossa Política de Uso Responsável)
- Documente seu pipeline para reprodutibilidade, especialmente em contexto acadêmico
Documentação dos endpoints
Para referência técnica detalhada dos campos disponíveis, consulte a documentação:
- iFood PLP (busca de restaurantes) — keyword + CEP, paginação
- iFood PDP (merchant + cardápio) — dados completos do restaurante
Quer testar? Acesse dashboard.geckoapi.com.br e comece a extrair dados do iFood agora.
Quer testar?
Acesse o dashboard e ganhe 100 créditos grátis para começar. Sem cartão de crédito.
Criar conta grátis