# Como Aplicar Hash em Telefones e E-mails no Google Planilhas

> O Planilhas não tem função SHA-256 embutida. Como aplicar hash em uma lista de clientes corretamente – e por que o mesmo telefone precisa de dois hashes diferentes.

- Source: https://www.8apps.co/pt/blog/hash-telefones-emails-google-planilhas
- Markdown: https://www.8apps.co/pt/blog/hash-telefones-emails-google-planilhas.md
- Published: 2026-09-01
- Author: Equipe 8apps
- Language: pt

---
Todo mundo entende isso ao contrário. Produzir um digest SHA-256 leva quatro linhas de Apps Script. Conseguir uma **correspondência** de uma plataforma de anúncios exige normalização, e é na normalização que as listas morrem.

O Google diz isso com todas as letras na própria documentação da API: *"If the contact information is not correctly formatted before hashing, the API still accepts the hashed information, but it can't be matched with a customer."*

O upload dá certo. O que falha é a taxa de correspondência. E nada te avisa.

Este guia cobre as duas metades – como de fato produzir um hash no Google Planilhas e as regras de normalização por plataforma que decidem se ele vai corresponder a alguma coisa. Há quatro caminhos para a primeira metade. **O mais curto é um complemento que normaliza e aplica hash em uma única função** – o Caminho 1 abaixo – e o resto desta página é o detalhe por trás do motivo de a normalização ser a parte que vale a pena acertar.

---

## Primeiro: o Planilhas não tem função de hash

A lista de funções publicada pelo Google tem dezessete categorias – Data, Engenharia, Financeiras, Texto, Matemática e por aí vai. **Não há SHA256, não há MD5, não há HASH, não há DIGEST.** A categoria Engenharia guarda conversões de base e números complexos, e nada criptográfico.

Ou seja, todo caminho é uma solução de contorno. São quatro, e não são igualmente bons:

| Caminho | Use quando | Veredito |
|---|---|---|
| **Um complemento** que coloca funções de hash na planilha | Você tem uma lista de clientes real para preparar e quer a normalização resolvida | **Recomendado** |
| **Seu próprio Apps Script** como função personalizada | Você quer ser dono do código, ou precisa de um algoritmo ou regra que nenhum complemento implementa | Tudo bem, com cuidado |
| **Um site de hash** | Você está conferindo uma única string de teste | Não para uma lista |
| **Não aplicar hash** | Sua plataforma aceita texto puro e sua política permite | Legítimo |

O restante desta seção percorre cada um. As regras de normalização mais abaixo valem qualquer que seja a sua escolha – **são elas que decidem a sua taxa de correspondência**, e nenhum caminho te dispensa delas.

---

## Caminho 1: um complemento que coloca as funções na planilha

**É este o caminho a buscar**, e o motivo é o argumento que esta página inteira faz. Produzir um digest é trivial. Normalizar a entrada corretamente é o que decide se o upload vai corresponder a alguém – e essa é justamente a etapa que um complemento pode fazer por você, por tipo de entrada, do mesmo jeito em todas as linhas.

O [Hash Data](/pt/google-workspace/hash-data) divide o trabalho assim:

| Função | O que faz |
|---|---|
| `=HASHEMAIL(email, [algoritmo])` | Remove espaços, passa para minúsculas e então aplica o hash |
| `=HASHPHONE(telefone, [algoritmo])` | Formata o número em E.164 e então aplica o hash – uma etapa em vez de encadear `REGEXREPLACE` dentro de um digest |
| `=HASH(valor, [algoritmo])` | Aplica hash no valor exatamente como foi dado – sem normalização, diferencia maiúsculas |

Quatro coisas que isso te dá em relação a um script feito à mão:

- **A normalização está na função**, não em uma coluna auxiliar que você precisa reconstruir a cada nova planilha.
- **Sem o teto de 30 segundos** das funções personalizadas para contornar – veja o Caminho 2 e por que isso pesa numa lista real.
- **Sua lista fica na planilha.** Nada é colado em um site de terceiros.
- **SHA3-256 está disponível**, o que o próprio `computeDigest()` do Apps Script não oferece.

**Uma ressalva, dita com clareza, porque ela decide qual função usar.** O `=HASHPHONE()` normaliza para E.164 – dígitos com um `+` na frente. Isso bate com o que o Google Ads documenta. O exemplo documentado da Meta vai no sentido oposto: só dígitos, sem `+`. Então, para um upload na Meta, normalize o número você mesmo com `=REGEXREPLACE(A2, "[^0-9]", "")` e aplique hash nessa string com `=HASH()`. Uma função não atende as duas plataformas porque as plataformas não concordam entre si – o mesmo ponto que a tabela comparativa mais abaixo faz.

O nível gratuito cobre 100 chamadas de hash por dia; o pago remove o limite.

→ [Instalar o Hash Data pelo Google Workspace Marketplace](https://workspace.google.com/marketplace/app/hash_data_by_8apps/476613022290)

---

## Caminho 2: escrever a função personalizada você mesmo

Se você prefere ser dono do código, é isto aqui, inteiro. Abra **Extensões → Apps Script**, cole o código, salve e use `=SHA256(A2)` na planilha.

```javascript
/**
 * Retorna o digest SHA-256 da entrada em hexadecimal minusculo.
 * Aceita uma unica celula ou um intervalo.
 * @customfunction
 */
function SHA256(input) {
  if (Array.isArray(input)) {
    return input.map(function (row) {
      return row.map(function (cell) { return SHA256(cell); });
    });
  }

  if (input === '' || input === null || input === undefined) return '';

  var bytes = Utilities.computeDigest(
    Utilities.DigestAlgorithm.SHA_256,
    String(input),
    Utilities.Charset.UTF_8
  );

  return bytes
    .map(function (b) { return ((b < 0 ? b + 256 : b)).toString(16).padStart(2, '0'); })
    .join('');
}
```

Duas coisas derrubam as pessoas aqui, e vale entender ambas mesmo que você nunca escreva o script.

**O `computeDigest()` devolve um array de bytes com sinal, não uma string hexadecimal.** O Apps Script entrega bytes com sinal ao estilo Java, então qualquer valor acima de `0x7F` chega negativo. É isso que o `b < 0 ? b + 256 : b` conserta. Sem ele, você obtém um digest cheio de caracteres `-` que nenhuma plataforma aceita. Sem o `padStart(2, '0')`, você perde silenciosamente zeros à esquerda de bytes individuais, produzindo um digest com menos de 64 caracteres, errado de um jeito muito difícil de enxergar.

**Uma função personalizada precisa retornar em até 30 segundos**, ou a célula mostra `#ERROR!`. Uma versão por célula – uma fórmula em cada linha – quebra numa lista de clientes real. É por isso que a função acima testa primeiro se recebeu um array: escrita assim, você pode colocar `=SHA256(A2:A5000)` em uma única célula e deixá-la devolver a coluna inteira como um array.

---

## Caminho 3: um site de hash

Este é o caminho para pensar com mais cuidado, porque é o mais fácil de buscar e o único com um problema de divulgação.

Colar uma lista de clientes em um site é uma transferência de dados pessoais para quem opera aquele site. Em geral você não consegue saber pela página se o hash acontece no seu navegador ou no servidor deles, e a resposta importa enormemente. Para conferir uma única string de teste, tudo bem – há uma mais abaixo nesta página que você deveria usar. Para uma lista de clientes reais, não.

---

## Caminho 4: não aplicar hash

A opção esquecida. O Google Ads aceita dados de clientes em texto puro e aplica o hash antes do upload, e o TikTok documenta que *"accepts both hashed and original values."*

Então, se o seu motivo para aplicar hash é uma política ou um contrato, o hash é a resposta. Se você presumiu que era obrigatório, muitas vezes não é – e aplicar hash previamente significa que você assume a normalização, e cada erro nela, em vez da plataforma. Vale saber antes de construir um pipeline em torno disso.

---

## Depois: normalize, e normalize por plataforma

Esta é a parte que a maioria dos guias pula, e é a razão de as taxas de correspondência despencarem.

### Google Ads

O **Customer Match** documenta, para colunas com hash: tudo em minúsculas, sem espaços, *"Format phone numbers using the E.164 format"* e – explicitamente – *"Include the country code and '+' sign."*

O Google documenta uma regra só para Gmail em dois lugares, e elas não são idênticas – o que vale saber antes de copiar uma delas para um pipeline.

A página do **arquivo de dados do Customer Match** diz apenas: *"Remove all periods (.) that precede the domain name in gmail.com and googlemail.com email addresses."* Pontos, nada mais.

A página da API do Customer Match vai além, mas sob um título restrito a **conversões avançadas**: remova os pontos do nome de usuário *e* o sinal de mais com tudo que vem depois. O exemplo resolvido dela é `Jane.Doe+Shopping@googlemail.com` → `jane.doe+shopping@googlemail.com` (minúsculas) → `janedoe@googlemail.com`.

Ou seja, a metade do sufixo com mais está documentada para conversões avançadas, não para o upload de uma lista de clientes. Se você está montando uma lista de público, a regra dos pontos é a que o Google de fato documenta para esse trabalho. **No que as duas concordam: isso se aplica apenas a `gmail.com` e `googlemail.com`.** Aplicar a todos os domínios é um bug por si só – muitos sistemas de e-mail tratam `jane.doe@` e `janedoe@` como pessoas diferentes.

### Meta

A Meta documenta outra coisa. Para e-mail: *"Trim any leading and trailing spaces. Convert all characters to lowercase."* Nenhuma regra de ponto do Gmail.

Para telefone: *"Remove symbols, letters, and any leading zeros,"* mais *"Always include the country code as part of your customers' phone numbers."* O exemplo resolvido da própria Meta é `(650)555-1212` → `16505551212` – código do país, só dígitos, sem sinal de mais.

### Então o mesmo telefone produz dois hashes diferentes

|  | Google Ads | Meta |
|---|---|---|
| Telefone, documentado | E.164, *"include the country code and '+' sign"* | *"Remove symbols… and any leading zeros"*; exemplo → `16505551212` |
| Pontos do Gmail e sufixo `+` | Pontos removidos em `gmail.com` / `googlemail.com`; a regra do sufixo `+` está documentada para conversões avançadas | Não documentado |
| Codificação | *"Use hex SHA256"* | *"HEX representations… using lowercase for A through F"* |

Uma coluna com hash não atende as duas plataformas. Se você vinha reaproveitando uma, essa é a sua taxa de correspondência.

### O TikTok é a exceção

O TikTok documenta bem menos: *"MD5 and SHA256 encryption is supported. The content of the file before encryption needs to be in all uppercase or lowercase."* Nenhuma exigência de E.164 é publicada, e ele aceita tanto valores com hash quanto originais. Não presuma que as regras do Google valem lá.

---

## As fórmulas, na ordem em que se aplicam

Normalize em uma coluna auxiliar, aplique hash na coluna auxiliar e depois fique só com o digest.

| Etapa | Fórmula |
|---|---|
| E-mail, ambas as plataformas | `=LOWER(TRIM(A2))` |
| Remover um espaço não separável que o `TRIM()` deixa passar | `=TRIM(SUBSTITUTE(A2, CHAR(160), " "))` |
| Pontos do Gmail e sufixo `+`, só Google Ads – veja a ressalva de escopo acima (aplicado a `B2`, o e-mail em minúsculas) | `=IF(REGEXMATCH(B2, "@(gmail\|googlemail)\.com$"), SUBSTITUTE(REGEXREPLACE(REGEXEXTRACT(B2, "^[^@]+"), "\+.*$", ""), ".", "") & REGEXEXTRACT(B2, "@.*$"), B2)` |
| Telefone, só dígitos (Meta) | `=REGEXREPLACE(A2, "[^0-9]", "")` |
| Telefone, E.164 (Google Ads) | `="+" & REGEXREPLACE(A2, "[^0-9]", "")`, depois de ter certeza de que o código do país está presente |

Essa última linha carrega uma ressalva que merece ser dita em voz alta: colocar um `+` na frente de um número nacional não cria um número E.164 válido. `07700 900461` vira `+7700900461`, que está errado e não vai corresponder. O código do país precisa estar realmente lá.

---

## Os modos de falha, na ordem em que acontecem

1. **Sua planilha destrói os dados antes de você aplicar o hash.** Um número de 16 dígitos vira notação científica, `07700 900461` perde o zero à esquerda, `+44…` é lido como fórmula. Formate a coluna como texto simples **antes** de qualquer coisa cair nela – consertar depois é perda de dados, não formatação.
2. **Maiúsculas e espaços.** `John@` e `john@` são digests diferentes. Assim como `john@x.com` e `john@x.com ` com um espaço no fim vindo de uma exportação CSV. E o `TRIM()` não remove um espaço não separável, que é exatamente o que uma colagem de página web deixa para trás.
3. **Aplicar hash no valor exibido.** `(650) 555-1212` não é `16505551212`. Se a célula está formatada como telefone, o que você vê e o que você passa pelo hash são strings diferentes.
4. **Hash duplo.** Rodar a fórmula sobre uma coluna que já contém hashes. Conferência fácil: um digest SHA-256 em hexadecimal tem sempre exatamente 64 caracteres de `0-9a-f`, então `=LEN(B2)=64` pega isso – e pega truncamento também.
5. **Codificação errada.** Um digest em base64 é um hash válido da entrada certa e ainda assim não vai corresponder. Vários trechos populares de copiar e colar usam MD5 *e* base64 por padrão.

---

## Verifique antes de enviar

A Meta publica o digest esperado para `john_smith@gmail.com`:

```
62a14e44f765419d10fea99367361a727c12365e2520f32218d505ed9aa0f62f
```

Aplique hash exatamente nessa string com a sua fórmula. Se você não obtiver exatamente esse valor de volta, conserte a fórmula – não a lista. Leva trinta segundos e é o único teste que distingue "meu hashing está quebrado" de "minha lista é ruim", coisas que de fora são indistinguíveis.

---

## Uma palavra honesta sobre privacidade

Hashing é pseudonimização, não anonimização. O GDPR resolve isso no Considerando 26: *"Personal data which have undergone pseudonymisation, which could be attributed to a natural person by the use of additional information should be considered to be information on an identifiable natural person."* As diretrizes 01/2025 do EDPB sobre pseudonimização partem exatamente desse ponto.

Um hash de telefone sem salt é quebrável por força bruta – o espaço numérico é pequeno o bastante para ser esgotado. E você não pode adicionar salt, porque o salt é exatamente o que impede a plataforma de corresponder. Dados de clientes com hash continuam sendo dados de clientes. Trate-os assim.

Quando terminar: copie a coluna com hash, cole especial apenas como valores e apague a coluna bruta.

---

## Tudo, em ordem

Qualquer que tenha sido o caminho, a sequência é a mesma:

1. **Formate a coluna como texto simples** antes de os dados caírem nela.
2. **Normalize em uma coluna auxiliar**, usando as regras da plataforma para a qual você vai enviar – não as da outra.
3. **Aplique hash na coluna auxiliar**, SHA-256 hexadecimal, a menos que a plataforma diga outra coisa.
4. **Teste uma string conhecida** contra o digest publicado pela Meta antes de confiar na coluna.
5. **Confira `=LEN(B2)=64`** em todo o intervalo para pegar truncamento e hash duplo.
6. **Cole especial apenas como valores**, apague a coluna bruta e envie.

As etapas 2 e 3 são as que o [Hash Data](/pt/google-workspace/hash-data) reduz a uma única função – `=HASHEMAIL()` para e-mail, `=HASHPHONE()` para telefones em E.164, `=HASH()` para qualquer coisa que você já normalizou. Ele suporta SHA256, MD5, SHA1, SHA512 e SHA3-256, e tudo roda dentro da sua planilha. O nível gratuito cobre 100 chamadas de hash por dia; o pago remove o limite.

---

## Fontes

- [Lista de funções do Google Planilhas](https://support.google.com/docs/table/25273)
- [Apps Script – Utilities.computeDigest](https://developers.google.com/apps-script/reference/utilities/utilities) e [DigestAlgorithm](https://developers.google.com/apps-script/reference/utilities/digest-algorithm)
- [Apps Script – Funções personalizadas no Google Planilhas](https://developers.google.com/apps-script/guides/sheets/functions)
- [Ajuda do Google Ads – Formatar o arquivo de dados do cliente](https://support.google.com/google-ads/answer/7659867)
- [Google Ads API – Get started with Customer Match](https://developers.google.com/google-ads/api/docs/remarketing/audience-segments/customer-match/get-started)
- [Meta – Conversions API customer information parameters](https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters/)
- [Meta – Custom Audiences guide](https://developers.facebook.com/docs/marketing-api/audiences/guides/custom-audiences/)
- [TikTok – Guidelines for customer files](https://ads.tiktok.com/help/article/customer-file-faq)
- [GDPR Considerando 26 – Não aplicável a dados anônimos](https://gdpr-info.eu/recitals/no-26/)
- [Diretrizes 01/2025 do EDPB sobre Pseudonimização](https://www.edpb.europa.eu/system/files/2025-01/edpb_guidelines_202501_pseudonymisation_en.pdf)

*Especificações das plataformas verificadas em 20 de agosto de 2026. As plataformas de anúncios revisam essas páginas; confira a fonte antes de um upload grande.*

---

## Leitura relacionada

- [Documentação do Hash Data – `=HASHPHONE()`](/docs/hash-data/using-hash-data/hash-phone)
- [Boas práticas de hashing no Google Planilhas](/docs/hash-data/power-user-tip/best-practices)
- [Como Auditar Quem Tem Acesso ao Seu Google Drive](/pt/blog/drive-guard-auditoria-acesso-google-drive)
