Você tem 200 unidades de um SKU que vende. Manda 100 pro Full, deixa 100 no seu galpão pra Flex. Resultado esperado: anúncio fica disponível em mais regiões, frete grátis em mais CEPs, ML mistura os dois pra entregar mais rápido.
Resultado real (na maioria dos casos): anúncio aparece com estoque dobrado, ML vende 200 unidades em uma semana, você só tinha 100 no Full e 100 no Flex separadas — agora tem 50 vendas em ruptura.
Esse texto explica por que isso acontece, qual atributo é o certo (não é o que parece) e como o EVA Pro resolve sem precisar de planilha.
O conceito de estoque distribuído
Em 2024 o ML lançou oficialmente o estoque distribuído: um único anúncio pode ter estoque em múltiplos endereços (depósitos), e o ML escolhe de onde despachar baseado em:
- CEP do comprador (mais próximo entrega mais rápido)
- Disponibilidade do depósito (Full vs seu galpão)
- Tarifa de envio mais baixa (calculado em tempo real)
Em teoria você deveria mandar 100 pra cada e o sistema gerenciar. Na prática, depende de qual atributo seu integrador está enviando.
O atributo certo: seller_warehouse (não selling_address)
Aqui mora o erro mais comum. A API do ML tem dois campos parecidos:
| Atributo | O que é | Quando usar |
|---|---|---|
selling_address | Endereço de venda do anúncio | Anúncio sem estoque distribuído (legado) |
seller_warehouse | Depósito específico de origem | Estoque distribuído (Full + Flex) |
Se seu sistema atualiza estoque via selling_address, ele sobrescreve o estoque do depósito anterior — em vez de manter 100 no Full e 100 no Flex, vira 100 em um lugar só.
A função de update certa
No EVA Pro, a função updateMeliDepotStock() em src/lib/mercadolivre/stock.ts resolve assim:
- Busca o item via API
- Lista os warehouses cadastrados (
/users/{user_id}/warehouses) - Identifica qual é Full e qual é Flex (via flag
type=fulfillment) - Aplica o estoque correto em cada com PUT individual
- Faz retry em 401 (token expirado) automaticamente
A diferença prática: você nunca tem ruptura por sobrescrita.
Estratégia: o que vai pra Full, o que fica no Flex
Não é "metade aqui, metade lá". É decisão por SKU:
Vai pra Full (peso da estratégia)
- Giro mensal alto (>15 unidades)
- Margem confortável (>30% pós-tarifa)
- Embalagem padrão (cabe na caixa do ML)
- Sem sazonalidade extrema
Fica no Flex próprio
- Giro baixo (<5 unidades/mês)
- Frágil ou customizado
- Alto valor unitário (>R$ 500)
- Sazonal puro (Natal, Black Friday)
Mistura (estoque distribuído de verdade)
- Giro médio (5-15 unidades)
- Cliente regional concentrado (vende muito em SP, mas tem tráfego em outros estados)
- Tem estoque > 100 unidades
A regra do anúncio amarelo
Quando você opera estoque distribuído errado, o ML pode marcar o anúncio amarelo por inconsistência. Os 3 motivos mais comuns:
- Estoque negativo no warehouse — vendeu 5 e o sistema só atualizou 3
- Variação sem estoque em pelo menos 1 warehouse — ML exige presença em todos os warehouses ativos
- Atualização lenta (>1h após venda) — webhook do ML não foi processado a tempo
Como saber se está funcionando
3 verificações simples:
-- 1. Ver qual atributo está sendo usado
SELECT meli_listing_id, last_stock_update_attribute
FROM ml_listings
WHERE company_id = 'sua_empresa_id'
LIMIT 50;
-- 2. Detectar inconsistência (Flex + Full somam diferente do total real)
SELECT meli_listing_id, total_stock, warehouse_breakdown
FROM ml_listings
WHERE total_stock != (SELECT SUM(qty) FROM jsonb_array_elements(warehouse_breakdown));
-- 3. Anúncios amarelos
SELECT meli_listing_id, health_status, health_actions
FROM ml_listings
WHERE health_status = 'with_issues';
No EVA Pro tem dashboard pronto: /mercado-livre/saude-anuncios mostra todos os anúncios amarelos com motivo e botão de "corrigir agora".
Webhooks que importam
3 eventos do ML que afetam estoque distribuído:
items— mudança de qualquer atributo do anúncio (incluindo estoque)shipments— quando ML pega um produto pro Full ou marca como entregueorders_v2— venda fechada (precisa decrementar estoque na hora)
Se algum não está sendo processado, estoque fica defasado. A regra é: nunca usar rate limiting longo em webhook do ML/Shopee. Eles esperam resposta em <5s, senão re-disparam, e você vira refém de fila.
Resumo
Estoque distribuído é coisa fina. Erra o atributo, perde semana inteira de venda.
Pra implementar bem:
- Use
seller_warehouse, nãoselling_address - Liste warehouses ativamente (não confia em cache)
- Webhook em <5s, sem rate limit longo
- Monitora anúncio amarelo — mostra quando algo deu errado
Próximos passos: sua integração já usa seller_warehouse? Conecta o EVA Pro grátis — em 2 min ele audita seus anúncios e mostra quais estão com risco de ruptura por update errado.




Comentários
Carregando…