Dynamo Developer DocsDynamo Developer Docs
Core Concepts

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.

MethodUse it when
Upload a CSV fileYou have a customer list as a file on your machine.
Connect an S3 bucketYour list lives in an Amazon S3 bucket and you'd rather have Dynamo pull it than upload a file.
Connect an integrationYour 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 hasColumnsA row looks like
Emails onlyOne (email)ada@example.com
Emails and phone numbersTwo (email, Phone)ada@example.com,1501234567
Phone numbers onlyTwo — 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
,4915123456789

Pre-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:

FieldNormalize, then hashSHA-256 (hex)
Emailtrim() + lowercaseSHA256("ada@example.com")
Phonedigits 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");
// d1da348ef58333dcdab874e2c8cf60a414c99db20153f93e2e4d903fdb055e9b

A 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.

On this page