# Hashed Email Audience for Meta and Google Ads — Ravn

Canonical: https://askravn.com/skills/hashed-email-audience

Claude skill

# Hashed email audience for Meta and Google Ads

Turn the user's own customer list into a SHA-256 hashed audience file for Meta or Google Ads. Verify the emails first so dead addresses do not drag down the match rate, then hash them on the user's machine with `npx ravn audience`. Nothing is uploaded by Ravn; the user uploads the finished file to the ad platform themselves.
[Download SKILL.md](https://askravn.com/skills/hashed-email-audience/SKILL.md) [Start free](https://askravn.com/#start)

Install
## One command.
Installs into `~/.claude/skills` for Claude Code. In Claude, upload the downloaded file under Settings → Capabilities → Skills.
```
npx ravn skill install hashed-email-audience
```

## When to use

- The user wants a customer match or custom audience from their own customer, subscriber or lead list.
- They need the file in the exact hashed format each platform expects.
- Not for buying audiences. Ravn does not supply ad audiences or mobile ad IDs; this only prepares a list the user already has.

## Before you start

- Check the connection: `npx ravn whoami` (free). Hashing itself needs no lookups.
- Costs: the optional verification step is 1 lookup per unique address.
- Confirm the user has the right to use this list for advertising (for example, it is their own customers and their privacy notice covers it).
- Ask which platform: `meta` or `google`. Make one file per platform.

## Steps

- Remove anyone who opted out of marketing or asked to be deleted. Do this before anything else.
- Verify the list so only real addresses are hashed. Dry run, sample, full:

```
npx ravn enrich customers.csv --tool validate_email --column Email --dry-run
npx ravn enrich customers.csv --tool validate_email --column Email --limit 10 --out sample.csv
npx ravn enrich customers.csv --tool validate_email --column Email --out verified.csv
```

- Keep rows where `rw_verdict` is `valid`. Also keep `risky` rows that are only catch-all (`rw_catch_all` true and not `rw_disposable`); a catch-all mailbox may still belong to a real customer and the ad platform simply will not match it if not. Drop `invalid`, disposable and `unknown` rows. Save as `audience-input.csv` with the `Email` column intact.
- Build the hashed file for Meta:

```
npx ravn audience audience-input.csv --column Email --format meta
```

The output has one column with the header `email`. Each value is the SHA-256 hex hash of the address after trimming spaces and lowercasing. 5. Or build it for Google:

```
npx ravn audience audience-input.csv --column Email --format google
```

The output has the header `Email`. Each address is trimmed and lowercased, and for gmail.com and googlemail.com the dots before the `@` are also removed, then it is SHA-256 hashed. 6. Check the result: the row count should match the kept rows (minus any duplicates), and every value should be a 64-character hex string. Read the command's output for the path of the file it wrote. 7. Tell the user to upload the file in the ad platform's audience or customer list screen, and to delete local copies they no longer need.

## Output

- `verified.csv`: the original columns plus `rw_status` (`ok`, `not_found`, `error`, `dropped`), `rw_verdict`, `rw_risk_score`, `rw_reason`, `rw_catch_all`, `rw_disposable`.
- The hashed audience file: Meta with a single `email` column, or Google with a single `Email` column, one SHA-256 hex hash per row. No plain-text addresses.
- A summary: rows in, opted out removed, dropped by verification, hashed rows out.

## Rules

- Only hash lists the user has the right to use for advertising. Never build audiences of people who opted out. See [/privacy#optout](https://askravn.com/privacy#optout).
- Hashing runs locally. Do not paste the plain-text list or the hashes into chat or any other service.
- Hashing is not anonymisation. Treat the hashed file as personal data.
- No FCRA uses: never target or exclude people for credit, employment, insurance or housing decisions.
- On a 429 `fair_use_exhausted` during verification, stop and tell the human.

## Example prompt

Make me a Meta custom audience file from our customer list (customers.csv, column "Email"). Clean out the dead addresses first. I'll upload it myself.

## More [skills](https://askravn.com/skills)
Install them all with `npx ravn skill install --all`.
- [Clean and Enrich a HubSpot Contacts ExportUse when someone exports HubSpot contacts and wants them verified, gaps filled and a clean file ready to re-import without creating duplicates..](https://askravn.com/skills/hubspot-export-cleanup)
- [Identify Website Visitor Companies from IPsUse when someone has server or analytics logs and wants to know which companies visited, turning IPv4 addresses into organisations with honest gaps..](https://askravn.com/skills/identify-website-visitors)
- [LinkedIn Profile URL to Verified EmailUse when someone has LinkedIn profile URLs and wants a verified email for each person, work email first, via your own data provider..](https://askravn.com/skills/linkedin-to-email)
- [Meeting Prep Brief on a Person and CompanyUse before a call or meeting when someone wants a short brief on the person they are meeting and that person's company, from an email, name or LinkedIn URL..](https://askravn.com/skills/meeting-prep)
- [Monitor Ravn Usage and Credit SpendUse when an agent or person needs to stay within a Ravn budget by checking lookups and provider-key status before, during and after a job..](https://askravn.com/skills/monitor-usage-and-credits)
- [Ravn Core Skill for ClaudeUse Ravn from Claude or the terminal to validate emails, find work emails, enrich CSVs, and look up companies, phones and people..](https://askravn.com/skills/ravn)
