search_contacts (to search), save_contact (to update an existing contact by email), and delete_contacts over MCP work the same records, and the contacts API serves them to code.
A search_contacts search that is one whole email address returns only that contact, or nothing when there is none. Any other text matches the contacts whose email, first or last name contains any of its words, so it can return other contacts: update or delete a contact you found by its address, never the first row of a text search.
Contact Properties
Every contact has properties, fields that store information you can use for personalization and segmentation.Default Properties
subscribed, created_at, and updated_at are filter and sort fields, not merge tags. Brew hides them from the variable picker because they’re bookkeeping rather than personalization. Use a custom property if you want a date you can write into email copy. See Merge Tags for the full syntax.Custom Properties
Add custom properties for any additional data, demographics, plan, behavior, anything you want to use in personalization or segmentation. To add a custom property:- Open the Audience tab
- Click the contact-properties icon (rightmost icon in the audience table)
- Select Add new property
- Name it, pick a type, save
Property Types
String
String
Text values. Examples:
"Enterprise", "New York", "Referred by Jane".Number
Number
Integers or decimals. Examples:
42, 99.95, 2500.Boolean
Boolean
True/false. Accepted formats:
true/false, yes/no, 1/0.Date
Date
Brew stores dates as UTC timestamps and reads these formats:
- ISO, with or without a time and offset:
2025-01-05,2025-01-05 14:30,2025-01-05T14:30:00Z - Unix timestamps:
1704067200(seconds) or1704067200000(milliseconds). Over the API, a JSON number is always milliseconds, so send seconds as a string. - Month names:
5 Jan 2025,Jan 5, 2025,January 5 2025,05-Jan-25 - Year first:
2025/01/05,2025.01.05, or20250105 - Month and year, read as the 1st:
2025-01,January 2025 - Dots, read day first:
05.01.2025is 5 January - Slashes or dashes:
01/05/2025,01-05-2025
13/01/2025 and 01/13/2025 are both 13 January. A date like 03/04/2025 is 3 April in the UK and 4 March in the US, so Brew reads every date in a column the same way:- A day over 12 anywhere in the column settles the order for all of it.
- Otherwise the CSV import shows both readings of the column’s dates and lets you pick. The API and MCP CSV import take
dateOrder(day_firstormonth_first). - With neither, Brew reads month first and the API response carries a
DATE_ORDER_ASSUMEDwarning.
Activity Timeline
Click any contact’s email in the Audience table to see their full activity timeline. Every event, in chronological order. The timeline shows:Email engagement
Email engagement
- Sent. When an email was delivered to the contact
- Opened. When they opened an email
- Clicked. When they clicked a link
- Hard bounced. Permanent failure
- Soft bounced. Temporary failure
- Marked as spam. They reported an email as spam
- Unsubscribed. They opted out
Audience events
Audience events
- Added to audience. When the contact was first added
- Property updated. Any time a property changed
Unsubscribes
Every marketing email carries an unsubscribe link automatically. Unsubscribe page owns how the path works end to end. On this side, the contact’s status updates immediately and an “unsubscribed” event appears in their activity timeline. What happens after unsubscribe:- They stop receiving marketing emails, whether one-off sends or automations
- Transactional sends like password resets still reach them: an automation sending from a transactional-purpose domain delivers to unsubscribed contacts
- The unsubscribe shows up in your analytics
- Only a person on your team can re-subscribe a contact, from the contact’s page, after confirming the contact asked to receive your marketing email again. Brew records that confirmation as the contact’s consent. This protects against accidental re-subscription and keeps you compliant with CAN-SPAM
- The API, the MCP tools, CSV imports and Brew’s agent never re-subscribe anyone. An import row that asks to still updates the contact’s other fields, and the contact stays unsubscribed. Through the API or MCP, a single update that tries is refused with
RESUBSCRIBE_NOT_ALLOWED, and an import or batch row that tries comes back with aRESUBSCRIBE_SKIPPEDwarning - Unsubscribing always works: set
Subscribedtofalseon a contact, in an import, or through the API - Hard bounces and spam complaints are handled separately from unsubscribes
Customize the Unsubscribe Page
Open Brand → Unsubscribe to preview and customize the page contacts see. You can adjust the copy, branding, and confirmation message. The unsubscribe link itself stays automatic in every email.Updating Contact Properties
For individual contacts:- Click a contact in the Audience table
- Edit any property
- Click Save
Deleting Contacts
To permanently remove contacts:- Filter or select the contacts to delete
- Click the More menu
(...)at the top of the table - Select Delete contacts
- Confirm
Need Help?
Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:- Self-Service Tools
- Talk to Our Team
Search Documentation
Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.
ChatGPT/Claude Integration
Click “Open in ChatGPT” at the top right of any page to explore it further with ChatGPT or Claude.