Custom Audiences
Upload a customer list — via CSV, an S3 bucket, or a connected integration — to grow your Meta marketing-messages audience.
What is a custom audience?
A custom audience is a list of your existing customers — their emails and/or phone numbers — that you bring into Dynamo. Dynamo matches those contacts against Meta (Messenger) users and adds everyone it can match to your channel's marketing-messages audience, so you can reach them with marketing messages.
Matching is done by Meta, so only contacts that correspond to a real Meta user are added.
Ways to upload a custom audience
There are three ways to bring a custom audience into Dynamo. New users are always added to your existing list, never replacing it.
| Method | Use it when |
|---|---|
| Upload a CSV file | You have a customer list as a file on your machine. |
| Connect an S3 bucket | Your list lives in an Amazon S3 bucket and you'd rather have Dynamo pull it than upload a file. |
| Connect an integration | Your audience lives in your CRM (like Braze, Klaviyo, etc.) and you want Dynamo to sync it. |
The first two methods use the same CSV format, described below. Integrations pull contacts straight from the connected platform — no file required.
CSV format
The list is a CSV where column 1 is the email and column 2 is the phone number. The phone number is always the second column, so how many columns you need depends on what identifiers your list has:
| Your list has | Columns | A row looks like |
|---|---|---|
| Emails only | One (email) | ada@example.com |
| Emails and phone numbers | Two (email, Phone) | ada@example.com,1501234567 |
| Phone numbers only | Two — with the first cell empty | ,1501234567 |
Every row needs an email, a phone number, or both — at least one identifier so the contact can be matched.
Because the phone number is always the second column, a phone-only file still
needs two columns — leave the first (email) cell empty, e.g. ,1501234567.
Phone number format
Phone numbers must be digits only — remove all symbols, letters, and any leading zeros.
- ❌
+1 (050) 123-4567 - ✅
1501234567
Example
A single file can mix the row shapes above — email-and-phone, email-only, and phone-only:
ada@example.com,1501234567
grace@example.com
,4915123456789Pre-hashing your contacts (optional)
You can upload plaintext emails and phone numbers — Dynamo hashes them with SHA-256 before sending them to Meta, so raw values never leave Dynamo unhashed.
If you'd rather your file never contain raw contacts at all, you can pre-hash the values yourself. Dynamo detects already-hashed cells and passes them through unchanged. For a pre-hashed contact to match, you must hash it exactly the way Dynamo does — otherwise the hash won't line up and the contact won't match:
| Field | Normalize, then hash | SHA-256 (hex) |
|---|---|---|
trim() + lowercase | SHA256("ada@example.com") | |
| Phone | digits only (no symbols, letters, or leading zeros), then trim() | SHA256("1501234567") |
import CryptoJS from "crypto-js";
// Email: trim, lowercase, then SHA-256 (lowercase hex)
const hashEmail = (email) =>
CryptoJS.SHA256(email.trim().toLowerCase()).toString();
// Phone: must already be digits only (e.g. "1501234567"), then trim + SHA-256
const hashPhone = (phone) =>
CryptoJS.SHA256(phone.trim()).toString();
hashEmail("Ada@Example.com");
// b5fc85e55755f9e0d030a10ab4429b6b2944855f9a0d60077fe832becbc41d72
hashPhone("1501234567");
// d1da348ef58333dcdab874e2c8cf60a414c99db20153f93e2e4d903fdb055e9bA pre-hashed CSV uses the same column layout — just put the 64-character hex hashes in the email and phone positions. You can mix hashed and plaintext rows in one file.
Upload a CSV file
From the Dynamo dashboard, upload your CSV using the format above. You can upload multiple files — their users are added to your existing list.
Connect an S3 bucket
Instead of uploading a file, connect an Amazon S3 bucket and point Dynamo at the CSV file inside it that holds your list. Dynamo reads the file directly, using the same CSV format as above.
To connect a bucket you provide its name, region, and a read-only access key and secret, plus the path (key) of the CSV file within the bucket. Dynamo can pull the file once or re-sync it on a schedule, applying any additions and removals each time.
Connect an integration
Connect Braze or Klaviyo with a read-only API key and Dynamo will sync contacts from the segment you choose — no CSV needed. See each integration's page for setup steps.