👤 Para usuários intermediários e avançados que configuram integrações com o conector Pipefy Piece.
🔐 Requer uma Service Account com acesso ao pipe ou à database de destino.
🎯 Para quem precisa criar ou atualizar cards e registros de databases a partir de um arquivo CSV ou JSON.
Atualizar registros um a um leva tempo quando as informações chegam em uma planilha ou em outro sistema. Com o conector Pipefy, você pode incorporar essas alterações à sua integração como uma operação em lote.
Ao terminar este artigo, você vai saber preparar o arquivo, configurar a ação Batch upsert, definir como os registros serão correspondidos, acompanhar o processamento e tratar as linhas que falharam.
📖 O que você vai entender aqui:
O que a ação Batch upsert faz
A ação Batch upsert cria ou atualiza vários cards em um pipe ou registros em uma database a partir de um único arquivo CSV ou JSON.
Nos bastidores, o conector Pipefy:
- Envia o arquivo para o armazenamento do Pipefy (você não precisa configurar isso manualmente).
- Submete o lote com o mapeamento de colunas e as opções que você definiu.
- Opcionalmente, aguarda até que o Pipefy termine de processar todas as linhas.
Antes de adicionar a etapa do Pipefy
- Conexão do conector Pipefy usando uma Service Account, com acesso ao pipe ou à database de destino
- Arquivo dentro dos limites de quantidade de linhas e tamanho (consulte a seção 12)
- Definição de quando as linhas devem sempre criar itens, atualizar por chave ou ser ignoradas quando não houver correspondência
- Definição de como a etapa Batch upsert aguardará a conclusão (visão geral)
Passo 1: conecte o Pipefy com uma Service Account
- No Pipefy, abra Members & permissions → Service accounts e crie uma Service Account (planos Business, Enterprise ou Unlimited).
- Copie o Client ID e o Client secret (exibido apenas uma vez, na criação).
- Conceda à conta acesso ao pipe ou à database que você usará na etapa de processamento em lote.
- Na integração, abra Connections para o conector Pipefy (ou conecte ao adicionar a etapa).
- Cole o Client ID e o Client secret e salve.
Dica: use uma Service Account dedicada para cada integração. Assim, você pode revogar o acesso sem afetar outras integrações.
Passo 2: prepare o arquivo CSV ou JSON
CSV
- UTF-8, com valores separados por vírgulas.
- O valor padrão de First data row é 2 (cabeçalho na linha 1).
- Cada cabeçalho mapeado deve aparecer exatamente uma vez.
- A correspondência dos cabeçalhos ignora maiúsculas, minúsculas e espaços no início e no fim (Email, email e EMAIL são equivalentes).
Exemplo:
Name,Email,Company,Deadline
Acme Corp,ops@acme.example,Acme Corp,2026-09-01
Beta Inc,hello@beta.example,Beta Inc,2026-09-15
JSON
- A raiz deve ser um array de objetos.
- As colunas mapeadas são chaves no nível superior de cada objeto.
- First data row não se aplica a JSON.
- Uma chave ausente é tratada como uma célula vazia, não como um erro.
Exemplo:
[
{ "Name": "Acme Corp", "Email": "ops@acme.example" },
{ "Name": "Beta Inc", "Email": "hello@beta.example" }
]
Regras de conteúdo para os dois formatos
| Situação | Comportamento |
|---|---|
| Linha com todas as células mapeadas vazias | Ignorada |
| Célula mapeada vazia | Limpa o campo de destino (exceto quando a coluna de ID do registro está vazia: nesse caso, a linha é tratada como criação) |
| Coluna fora do mapeamento | Nunca é lida nem gravada |
| Valor inválido para um tipo de campo | Essa linha falha; as demais continuam sendo processadas |
Erro comum: mapear uma coluna que você não pretendia atualizar. Uma célula vazia em uma coluna mapeada substitui os dados existentes por valores em branco.
As colunas dedicadas a etiquetas e responsáveis esperam IDs ou endereços de e-mail separados por vírgulas, e não nomes de exibição.
Passo 3: adicione a ação Batch upsert
- Na integração, adicione uma etapa → conector Pipefy → Batch upsert.
- Selecione a conexão do conector Pipefy e a organização.

Passo 4: configure destino, arquivo e mapeamento
Destino (Target)
| Campo | O que selecionar |
|---|---|
| Target | Pipe (cards) ou Database (records) |
| Pipe / Database | O repositório que receberá os dados |

Arquivo de origem (Source file)
| Campo | O que selecionar |
|---|---|
| File format | CSV ou JSON (deve corresponder ao arquivo; não há detecção automática) |
| Source file | Arquivo de uma etapa anterior, uma URL pública ou uma data URI em base64 |
Padrões comuns:
- Google Sheets / Excel: exporte para CSV em uma etapa anterior e, em seguida, passe o arquivo aqui.
- Download HTTP: use uma etapa que busque o arquivo e mapeie Source file para a saída dessa etapa.


Mapeamento de campos (Field mapping)
Em Field mapping, adicione linhas de Field to column:
| Coluna na interface | Finalidade |
|---|---|
| Pipefy field | Campo de destino no pipe ou na database |
| Column in the file | Nome do cabeçalho (CSV) ou chave (JSON) |
Você pode deixar Field mapping vazio se usar apenas colunas de atributos (título, data de vencimento, etiquetas, responsáveis e ID do registro), mas é obrigatório ter pelo menos um mapeamento ou uma coluna de atributo.
Limpeza de valores: uma coluna mapeada com uma célula vazia limpa esse campo no card ou registro correspondente. Deixe a coluna sem mapeamento para manter os valores existentes intactos.

Colunas de atributos (opcionais)
Use estas colunas quando o valor não for um campo personalizado:
| Campo | Finalidade |
|---|---|
| Record id column | Coluna com o ID do card ou registro (usado para correspondência; não é gravado na atualização) |
| Title column | Texto do título |
| Due date column | Texto de data de vencimento que o Pipefy consiga interpretar |
| Labels column | IDs de etiquetas separados por vírgulas |
| Assignees column | IDs ou endereços de e-mail de membros separados por vírgulas |
| First data row | Somente CSV; padrão 2 |
Passo 5: correspondência, criação e efeitos adicionais
Correspondência de cards ou registros existentes (Match existing cards or records by)
Selecione até três chaves, combinadas com AND:
- ID do registro ou card: requer Record id column
- Título: requer Title column
- Qualquer campo personalizado da lista suspensa
Deixe vazio para sempre criar novos cards ou registros.
Campos com múltiplos valores (etiquetas, responsáveis, checklists, conexões e anexos) não podem ser chaves de correspondência.
Criação quando não houver correspondência (Create when no match is found)
| Configuração | Comportamento |
|---|---|
| Ativado (padrão) | Linhas sem correspondência criam novos itens (somente as colunas mapeadas são preenchidas) |
| Desativado | Linhas sem correspondência são ignoradas; você deve definir pelo menos uma chave de correspondência |
Efeitos adicionais na gravação de cards
Estas caixas de seleção aparecem na etapa Batch upsert (os nomes correspondem às opções da API do Pipefy):
| Configuração | Efeito |
|---|---|
| Suppress automations | O Pipefy não executa ações disparadas dentro do pipe para os cards que este lote cria ou atualiza (registros de databases não recebem essas ações via lote, independentemente da opção) |
| Suppress webhooks | O Pipefy não envia webhooks para essas gravações de cards |
Com as duas opções ativadas, o limite de linhas aumenta de 5.000 para 10.000 (consulte os limites).
Chave de idempotência (Idempotency key, opcional)
Repetir a mesma chave no mesmo repositório retorna o lote existente em vez de criar um novo. Prefira uma chave exclusiva por execução (por exemplo, inclua o ID da execução do fluxo), para que novas tentativas não reutilizem um lote antigo sem aviso.
Passo 6: escolha como aguardar a conclusão
Consulte a visão geral: como aguardar um lote.
Observações específicas de Batch upsert:
| Wait for batch completion | Callback URL |
|---|---|
| Ativado: o conector Pipefy registra um ponto de espera (waitpoint) para a execução; você não pode definir Callback URL na mesma etapa | Oculto (o Pipefy usa a URL do ponto de espera) |
| Desativado: a etapa termina após a submissão | URL HTTPS opcional para o Pipefy enviar um POST ao concluir |
Passo 7: use os resultados nas próximas etapas
Imediatamente após a submissão (espera desativada)
Use batchId nas etapas seguintes, por exemplo, em Reprocess batch operation ou Get batch operations.
Após a conclusão (espera ativada)
A etapa retorna:
| Saída | Use para |
|---|---|
| totalCount | Verificar a quantidade de linhas |
| itemCounts.failed | Decidir se deve reprocessar |
| resultFile | Baixar o relatório de erros (URL temporária) |
| hasFailedItems | Criar uma ramificação na integração quando algumas linhas falharem |
| status | completed, completed_with_errors ou failed |
Se status for failed, o lote inteiro falhou, não apenas linhas individuais. Verifique o erro no log da execução.
Formato do relatório de erros:
- Origem CSV: arquivo CSV com row, error e, em seguida, as colunas mapeadas.
- Origem JSON: array JSON de { "row", "error", "data" }.
Corrija os dados e envie um arquivo corrigido em um novo lote, ou use Reprocess após corrigir as linhas que falharam por motivos transitórios.

Get batch operations: consulte o status
Use quando Wait for batch completion estiver desativado e você precisar do status em uma etapa posterior.
- Adicione Pipefy → Get batch operations.
- Defina Target e Pipe ou Database (o mesmo repositório do lote).
- Opcionalmente, filtre por Status.
- Defina Page size (de 1 a 50; padrão 10).
- Para a próxima página, passe pageInfo.endCursor em After cursor quando hasNextPage for true.
Cada lote na resposta inclui isFinished quando o status é terminal.
Significado dos status:
| Status | Significado |
|---|---|
| queued | Submetido; o arquivo ainda não foi lido |
| pending | Linhas carregadas; pronto para processar |
| processing | Em andamento |
| completed | Concluído; sem erros nas linhas |
| completed_with_errors | Concluído; algumas linhas falharam. Verifique resultFile |
| failed | O lote inteiro falhou |
Os lotes são ordenados do mais recente para o mais antigo.


Reprocess batch operation: tente novamente as linhas com falha
A ação Reprocess batch operation submete novamente apenas as linhas que falharam em um lote de upsert concluído. Não é necessário reenviar o arquivo.
- Adicione Pipefy → Reprocess batch operation.
- Defina Batch id com o batchId de Batch upsert (ou de Get batch operations).
- Execute a integração depois que o lote original atingir completed_with_errors (ou determinados casos de failed com falhas no nível das linhas).
Regras:
- Linhas bem-sucedidas e ignoradas nunca são executadas novamente.
- É seguro chamar a ação quando não houve falhas (o lote permanece inalterado).
- Não se aplica a Batch export (a exportação não tem reprocessamento).
- Erros determinísticos (por exemplo, duplicação em um campo único) falharão novamente até que você altere os dados ou o mapeamento.
Após a conclusão do reprocessamento, use Get batch operations ou aguarde um novo upsert com Wait for batch completion se tiver encadeado outra submissão.

Limites e casos não suportados
Limites
| Limite | Valor |
|---|---|
| Linhas (padrão) | 5.000 |
| Linhas (ambas as opções de supressão ativadas) | 10.000 |
| Tamanho do arquivo | 50 MB |
| Chaves de correspondência | De 1 a 3 |
| Idempotency key | Máximo de 100 caracteres |
Não suportado via Batch upsert
| Caso | Orientação |
|---|---|
| Campos de conexão | Não mapeie; os valores seriam armazenados como texto simples, não como vínculos |
| Campos de anexo | Não há envio de arquivo por linha no processamento em lote |
| Correspondência por etiqueta, responsável ou data de vencimento | Use apenas slugs de campos ou $record_id / $title |
| XLSX | Exporte primeiro para CSV ou JSON |
Problemas comuns
| Sintoma | O que verificar |
|---|---|
| Permissão negada | A Service Account é membro do pipe ou da database e tem acesso para criar e atualizar; o pipe correto está selecionado |
| A etapa é concluída com sucesso, mas nenhum dado mudou | A espera estava desativada e o lote ainda está sendo processado; consulte Get batch operations |
| Muitas linhas falharam | Baixe resultFile; as mensagens estão em inglês |
| Os dados foram apagados inesperadamente | Remova mapeamentos acidentais; células mapeadas vazias limpam os campos |
| O teste fica aguardando com a espera ativada | Comportamento esperado: use uma execução completa ou desative a espera para testar |
| Erros nas chaves de correspondência | Defina Record id column ou Title column ao usar correspondência por ID ou título |
| O lote falhou após ser aceito | Arquivo acima do limite de linhas ou cabeçalhos inválidos; consulte o erro do lote por meio de consultas de status |
Antes de avançar, confirme que você entende
☐ Sei preparar o arquivo e mapear apenas os campos que pretendo alterar.
☐ Sei como a correspondência e as células mapeadas vazias afetam os registros existentes.
☐ Sei acompanhar o lote e revisar as linhas que falharam.


