Skip to main content
There are four ways to add contacts to Brew. Use whichever fits your workflow.
MethodBest for
CSV uploadOne-time imports, migration from another platform, bulk additions
Add manuallyA handful of contacts you want to add by hand
Sync from integrationsContinuous sync from HubSpot, Stripe, or other connected sources
APIProgrammatic add/update from your backend
Open the Audience tab in the sidebar, then click Add contacts in the top right to choose a method.

CSV upload

The fastest way to import a lot of contacts at once. Brew handles deduplication, partial updates, and verification automatically.
1

Prepare your CSV

Required column:
  • Email, the contact’s email address
Recommended:
  • First Name
  • Last Name
Optional:
  • Subscribed. true or false. Defaults to true if missing.
  • Any custom property you’ve created in Brew
Download our example CSV template to get the format right.
2

Open the import screen

Audience → Add contactsCSV Upload.
3

Upload your CSV

Drag and drop, or click to browse. Wait for it to process.
4

Map columns to Brew properties

For each CSV column, confirm the mapping is right. Unrecognized columns will be created as new custom properties.
5

Review and import

Click Complete Import. Contacts process in the background. You can navigate away.

Updating existing contacts

CSV upload also updates contacts that already exist.
Brew matches on email address. If the email exists, the row updates the existing contact. If not, a new contact is created.
Empty cells don’t overwrite existing data. Only cells with values update the corresponding property.
  • If the Subscribed column is missing, new contacts are subscribed by default
  • To import unsubscribed contacts, include Subscribed with false
  • The importer never re-subscribes contacts who have previously unsubscribed

Common issues

If your CSV has duplicate emails, Brew processes them in order, the last row wins. Deduplicate before uploading to avoid surprises.
Emails must be in a valid format (e.g. name@domain.com). Invalid emails are flagged at the review step and skipped.
Make sure your CSV is UTF-8 encoded. Garbled characters in the column-mapping screen mean the file isn’t UTF-8, re-export.
Very large CSVs can take several minutes. Split huge files into smaller batches if you want easier tracking.

Import history

Past imports appear below the upload area on the CSV Upload page, date, count, and any errors.

Add manually

For a few contacts at a time. Audience → Add contactsAdd manually, then enter the email and optional properties.

Sync from integrations

Connecting an event-source integration keeps contacts flowing into Brew automatically. Every webhook the provider sends does two things at once — fires every Published automation whose trigger matches the event, and upserts the contact into your audience with provider-namespaced custom fields you can use in filters and merge tags.
IntegrationWhat gets synced
Clerkclerk_user_id, clerk_organization_id, clerk_subscription_status, clerk_plan_name, clerk_is_trialing, clerk_signed_up_at, clerk_last_sign_in_at, clerk_waitlist_status
Stripestripe_customer_id, stripe_subscription_status, stripe_subscription_plan, stripe_lifetime_value_cents, stripe_renews_at, stripe_trial_end, stripe_delinquent — plus one-click backfill of every historic customer
Stytchstytch_project (Consumer or B2B), stytch_user_id, stytch_member_id, stytch_organization_id, stytch_org_role, stytch_account_status
Supabasesupabase_user_id, supabase_phone, supabase_role, supabase_account_status, supabase_email_verified_at, supabase_phone_verified_at, supabase_last_sign_in_at
WorkOSworkos_user_id, workos_email_verified, workos_organization_id, workos_org_role, workos_directory_user_id, workos_directory_id, workos_account_status
Shopifyshopify_customer_id, shopify_shop_domain, shopify_tags, shopify_account_status, shopify_last_order_id, shopify_last_order_total, shopify_last_order_at, shopify_last_fulfillment_status
RevenueCatrevenuecat_app_user_id, revenuecat_store, revenuecat_environment, revenuecat_subscription_status, revenuecat_product_id, revenuecat_last_purchase_at
Custom field definitions are auto-created on first write, so new fields show up filterable in the audience UI without any extra setup.

API

Programmatically create, update, or delete contacts from your backend.

View API documentation

Endpoints, authentication, and code examples

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:

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 analyze documentation with ChatGPT or Claude for deeper insights.