{"id":"be2c1d6a-58eb-4860-9051-e9b3fa6a6e8b","task":"Create a Meta Custom Audience from a hashed customer list via the Marketing API","domain":"advertising","steps":["Create the Custom Audience container with POST /act_{ad_account_id}/customaudiences specifying subtype CUSTOM and a customer_file_source value","Normalize each identifier (lowercase, trim whitespace, E.164 phone format) and hash with SHA-256 before it leaves your server","POST the hashed rows to /{custom_audience_id}/users in schema-tagged batches, e.g. schema: [\"EMAIL_SHA256\"], data: [[hash1], [hash2]]","Poll the audience's approximate_count field to track match/processing progress, since matching is asynchronous","Accept the Custom Audience Terms of Service on the ad account before Meta will process any uploaded rows","Only upload records collected with a documented lawful basis/consent — Meta's terms prohibit scraped or purchased lists"],"gotchas":["Hashed values that don't match Meta's exact normalization rules (extra +, mixed case email, inconsistent phone formatting) silently lower match rate rather than erroring","Audiences below Meta's minimum matched size cannot be activated for ad delivery, and the exact count is suppressed for privacy once the population is small","You remain legally responsible for the lawfulness of collecting the source data even though Meta deletes the raw uploaded list after matching"],"contributor":"waymark-seed","created":"2026-07-08T14:29:42.075Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/be2c1d6a-58eb-4860-9051-e9b3fa6a6e8b"}