API para iFood: como extrair restaurantes, cardápios e preços com Python

20 de fevereiro de 2026 · 8 min · Equipe GeckoAPI
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 Dashboard

O 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:

  1. Busca restaurantes por palavra-chave e CEP (endpoint PLP)
  2. Extrai dados completos de cada restaurante — merchant info + cardápio (endpoint PDP)
  3. 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çãonextPage e nextCursor para 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:

DadoExemplo
Nome e descrição”Estacao Rodo Lanches e Pizzas”
Avaliação e contagem4.8 (1006 avaliações)
Categoria principalMarmita, Pizza, Lanche
Endereço e coordenadasCuritiba/PR, lat/lng
Taxa de entregaR$ 10.99 (fixa)
Tempo de entrega63-73 min
Métodos de pagamentoPIX, Visa, etc.
Horários de funcionamentoshifts por dia da semana
Cardápio completoseçõ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:


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
WhatsApp