> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brew.new/llms.txt
> Use this file to discover all available pages before exploring further.

# Add contacts

> Bring contacts into Brew via CSV upload, manual entry, integrations, or the API.

There are four ways to add contacts to Brew. Use whichever fits your workflow.

| Method                     | Best for                                                          |
| -------------------------- | ----------------------------------------------------------------- |
| **CSV upload**             | One-time imports, migration from another platform, bulk additions |
| **Add manually**           | A handful of contacts you want to add by hand                     |
| **Sync from integrations** | Continuous sync from HubSpot, Stripe, or other connected sources  |
| **API**                    | Programmatic 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

<video autoPlay loop muted playsInline style={{width:"100%",borderRadius:"8px"}}>
  <source src="https://0edx89zhjrasqnjf.public.blob.vercel-storage.com/docs/adding_contacts.webm" type="video/webm" />
</video>

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

<Steps>
  <Step title="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

    <Tip>
      Download our example CSV template to get the format right.
    </Tip>
  </Step>

  <Step title="Open the import screen">
    Audience → **Add contacts** → **CSV Upload**.
  </Step>

  <Step title="Upload your CSV">
    Drag and drop, or click to browse. Wait for it to process.
  </Step>

  <Step title="Map columns to Brew properties">
    For each CSV column, confirm the mapping is right. Unrecognized columns will be created as new custom properties.
  </Step>

  <Step title="Review and import">
    Click **Complete Import**. Contacts process in the background. You can navigate away.
  </Step>
</Steps>

### Updating existing contacts

CSV upload also updates contacts that already exist.

<AccordionGroup>
  <Accordion title="Matching" icon="user-pen">
    Brew matches on email address. If the email exists, the row updates the existing contact. If not, a new contact is created.
  </Accordion>

  <Accordion title="Partial updates" icon="edit">
    Empty cells **don't overwrite** existing data. Only cells with values update the corresponding property.
  </Accordion>

  <Accordion title="Subscription status" icon="envelope-circle-check">
    * 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
  </Accordion>
</AccordionGroup>

### Common issues

<AccordionGroup>
  <Accordion title="Duplicate contacts" icon="copy">
    If your CSV has duplicate emails, Brew processes them in order, the last row wins. Deduplicate before uploading to avoid surprises.
  </Accordion>

  <Accordion title="Invalid email formats" icon="triangle-exclamation">
    Emails must be in a valid format (e.g. `name@domain.com`). Invalid emails are flagged at the review step and skipped.
  </Accordion>

  <Accordion title="Encoding issues" icon="file-code">
    Make sure your CSV is UTF-8 encoded. Garbled characters in the column-mapping screen mean the file isn't UTF-8, re-export.
  </Accordion>

  <Accordion title="Large files" icon="file-arrow-up">
    Very large CSVs can take several minutes. Split huge files into smaller batches if you want easier tracking.
  </Accordion>
</AccordionGroup>

### 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 contacts** → **Add manually**, then enter the email and optional properties.

## Sync from integrations

Connecting an [event-source integration](/integrations/integrations#trigger-automations-from-events) 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.

| Integration                                   | What gets synced                                                                                                                                                                                                                |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Clerk](/integrations/import/clerk)           | `clerk_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`                                           |
| [Stripe](/integrations/import/stripe)         | `stripe_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 |
| [Stytch](/integrations/import/stytch)         | `stytch_project` (Consumer or B2B), `stytch_user_id`, `stytch_member_id`, `stytch_organization_id`, `stytch_org_role`, `stytch_account_status`                                                                                  |
| [Supabase](/integrations/import/supabase)     | `supabase_user_id`, `supabase_phone`, `supabase_role`, `supabase_account_status`, `supabase_email_verified_at`, `supabase_phone_verified_at`, `supabase_last_sign_in_at`                                                        |
| [WorkOS](/integrations/import/workos)         | `workos_user_id`, `workos_email_verified`, `workos_organization_id`, `workos_org_role`, `workos_directory_user_id`, `workos_directory_id`, `workos_account_status`                                                              |
| [Shopify](/integrations/import/shopify)       | `shopify_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`                         |
| [RevenueCat](/integrations/import/revenuecat) | `revenuecat_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.

<Card title="View API documentation" icon="code" color="#c44925" href="/api-reference/api/api-introduction">
  Endpoints, authentication, and code examples
</Card>

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

<Tabs>
  <Tab title="Self-Service Tools">
    <CardGroup cols="2">
      <Card title="Search Documentation" icon="magnifying-glass" color="#c44925">
        Type in the "Ask any question" search bar at the top left to instantly find relevant documentation pages.
      </Card>

      <Card title="ChatGPT/Claude Integration" icon="robot" color="#c44925">
        Click "Open in ChatGPT" at the top right of any page to analyze documentation with ChatGPT or Claude for deeper insights.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Talk to Our Team">
    <CardGroup cols="2">
      <Card title="Schedule a Call" icon="calendar" color="#c44925" href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ1iYoRUG1J792XQpbuQLjSRRDupr7MwraFK-HQRCtTYdBmrQi8nZu2qXfzKQigb8gbKJK3KN3-R">
        Book time with our founders for personalized guidance on strategy, best practices, or complex implementation questions.
      </Card>

      <Card title="Call Us Directly" icon="phone" color="#c44925">
        Need immediate assistance? Reach us at **+1-(332)-203-2145** for urgent issues or time-sensitive questions.
      </Card>

      <Card title="Slack Channel" icon="slack" color="#c44925">
        Our preferred support channel. You'll receive an invite after signup for direct founder support and fast responses.
      </Card>

      <Card title="Email Support" icon="envelope" color="#c44925" href="mailto:support@brew.new">
        Contact us at **[support@brew.new](mailto:support@brew.new)** for detailed inquiries or if you prefer not to use Slack.
      </Card>
    </CardGroup>
  </Tab>
</Tabs>
