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

# Lists

> Static groups of contacts that people join by their own action: a form, an import, a popup or an opt-in.

A **list** is a fixed group of contacts. People join a list by their own action, or because you put them there. Membership only changes when someone adds or removes them.

That is the whole difference from a segment. A segment is a rule, so membership follows your data and changes on its own. A list is a group, so membership stays exactly as you left it.

<CardGroup cols={2}>
  <Card title="Use a list" icon="rectangle-list">
    You want to hand-pick who is in it, or you want a record of who signed up
    through a particular form or popup.
  </Card>

  <Card title="Use a segment" icon="filter">
    You want membership to follow the data. Everyone who bought in the last 90
    days. Everyone subscribed to SMS. See [Segments](/en/audience/segments).
  </Card>
</CardGroup>

## Where lists live

Open **Lists & Segments** in the sidebar and pick the **Lists** tab. The table shows every list in the workspace with its name, member count, source and when it was last updated.

The toolbar has a search box, a **Show archived** toggle and a **New list** button. Click any row to open the list.

<Info>
  Joining a list is not consent. What you may actually send someone is still
  decided by their per-channel consent state. A contact can be on a list and
  still be unsubscribed from email. See [Consent and
  suppression](/en/audience/consent).
</Info>

## Creating a list

<Steps>
  <Step title="Click New list">
    From the Lists tab.
  </Step>

  <Step title="Name it">
    Give the list a name, an optional description and a colour. The description
    shows under the name in the table, so use it to say who belongs on this
    list.
  </Step>

  <Step title="Add contacts, or skip">
    The second step offers to import a file or a Google Sheet straight into the
    new list. Choose **Skip for now** if you would rather add people later. The
    list is already created at this point either way.
  </Step>
</Steps>

To rename a list, change its description or change its colour later, open the row menu and choose **Edit**.

## Where the members come from

Each list records a **source**, shown as a badge in the table. It tells you how members usually arrive.

| Source            | What it means                                                                                                  |
| ----------------- | -------------------------------------------------------------------------------------------------------------- |
| Manual            | You created the list and add people to it yourself.                                                            |
| Import            | People arrive by importing a file into this list. Set automatically the first time a file is imported into it. |
| Form              | People join by submitting a form.                                                                              |
| API               | People are added by your own integration through the API.                                                      |
| Segment snapshot  | The list was created by converting a segment.                                                                  |
| Preference center | Senderz manages this list. It backs a topic on your consent page.                                              |

The source is a label, not a restriction. A list marked Manual still accepts an import, and vice versa.

## Adding contacts to a list

Here are the ways in. Preference-center topics are a sixth, covered further down.

<AccordionGroup>
  <Accordion title="From the Contacts page" icon="address-book">
    Tick the contacts you want, then choose **Add to list** in the bulk action
    bar and pick the list. When your selection covers a filtered view, you can
    also select every matching contact, not just the ones on screen.

    The bar also has a **Save as list** button. That one creates a **static
    segment** from your selection, not a list. It is useful, but it is a
    different object, so use **Add to list** when you mean a list.
  </Accordion>

  <Accordion title="By importing a file" icon="file-import">
    Open the row menu and choose **Import file**, or open the list and click
    **Import file**. The normal import wizard runs, with this list already
    chosen as the destination.

    The duplicate handling you pick on the review step changes what happens to
    list membership:

    * **Update existing** matched contacts are updated with new fields and added to the list.
    * **Skip updates** matched contacts keep their current fields but are still added to the list.
    * **Add only new** matched contacts are left unchanged and are **not** added to the list.

    See [Importing contacts](/en/audience/import) for the rest of the wizard.
  </Accordion>

  <Accordion title="From a storefront popup" icon="window-maximize">
    In the popup builder, select the submit button and set **List to Submit**.
    Everyone who submits that form joins the list. The builder says it plainly:
    joining a list is not consent, and what you may send is still decided by
    their email and SMS consent.

    Embedded forms do not attach to a list. Use a popup, or add the contact to
    a list from your own code through the API.
  </Accordion>

  <Accordion title="From an automation" icon="sitemap">
    Add an **Update in list** step to an automation and choose **Add to lists**.
    Contacts are added when they reach that step. See
    [In automations](#lists-in-automations) below.
  </Accordion>

  <Accordion title="Through the API" icon="code">
    Add members by contact id or by email, up to 100 per call. See
    [Lists](/en/api-reference/lists) in the API reference.
  </Accordion>
</AccordionGroup>

## Opening a list

The list page shows three stat cards: **Members**, **Source** and **Created**, with the last-updated date underneath.

Below that is the member table. Each row shows the contact, their **email consent** state and the date they were added, and there is a search box for finding one person. A **Remove** action on the row takes that contact off the list. Their profile is not deleted.

The header carries two actions: **Import file** and **Send campaign**.

### Import history

If files have been imported into the list, an **Import history** panel appears. Each entry records who ran the import, the file name, the duplicate mode and a breakdown of the result: new, updated, skipped and failed. **View report** opens the full per-row report for that run.

The list keeps its last 50 imports.

## Sending to a list

Campaigns target segments, not lists. To send to a list, build a segment that points at it.

<Steps>
  <Step title="Create a segment">
    Go to the **Segments** tab and create a segment.
  </Step>

  <Step title="Add an Is in a list condition">
    Pick the condition **Is in a list** and choose your list. The operators are
    "is in" and "is not in", and you can name more than one list.
  </Step>

  <Step title="Use that segment as the campaign audience">
    Pick it on the audience step of the campaign wizard.
  </Step>
</Steps>

The **Use in campaign** row action and the **Send campaign** button on a list both open the campaign wizard. You still choose the audience there, using a segment as above.

<Tip>
  Combine the list condition with others. "Is in a list: VIP early access" AND
  "Email consent is subscribed" gives you a clean, sendable audience from a
  hand-curated list.
</Tip>

## Lists in automations

Lists show up in three places in the automation builder.

<Tabs>
  <Tab title="Added to list">
    A trigger. Choose the list in the trigger settings, and a contact joining
    that list starts the automation.

    The trigger fires when someone joins through a storefront popup whose
    submit button is attached to the list. Adding contacts from the Contacts
    page, from an import, from an **Update in list** step or through the API
    does not fire it.

    See [Triggers](/en/messaging/flows/triggers).
  </Tab>

  <Tab title="Is in a list">
    A profile filter. Use it as an entry condition or an exit condition to
    restrict an automation to the people on a list, or to hold back the people
    who are already on one. See [Audience and
    exit](/en/messaging/flows/audience-and-exit).
  </Tab>

  <Tab title="Update in list">
    An action step. Choose lists to add to, lists to remove from, or both at
    once. Contacts are added or removed when they reach the step.

    A list a contact already belongs to is skipped. A list they are not in is
    skipped on removal. The same list cannot be on both sides of one step. The
    contact always continues to the next step, even when nothing changed, and
    the result is recorded on their activity feed.

    This step works on lists only. It cannot point at a segment, because a
    segment works out its own membership from its filter and hand-editing it
    would fight that filter. See [Steps](/en/messaging/flows/steps).
  </Tab>
</Tabs>

When you backfill an automation whose trigger is **Added to list**, the backfill offers everyone currently on the selected list. Profiles already added by an earlier backfill are excluded.

## Turning a segment into a list

Open a segment's row menu and choose **Convert Segment to List**. Senderz creates a real list holding everyone who matches the segment at that moment.

This is a one-time snapshot. The list will not update when contacts enter or leave the segment. That is the point: it freezes an audience so you can work with a fixed group.

The new list's source reads **Segment snapshot**.

## Preference center topics

If your consent page offers topic preferences, each topic is backed by a real managed list, with the source **Preference center**. A recipient ticking a topic joins that list, and unticking it leaves.

Those lists behave like any other list. You can target them from a segment and see who is on them. Renaming the topic on the consent page renames the list. See [Consent and suppression](/en/audience/consent).

## Archiving and deleting

<AccordionGroup>
  <Accordion title="Archiving" icon="box-archive">
    An archived list is hidden from the Lists table until you flip **Show
    archived**, and archived lists then carry an **Archived** badge. Archived
    lists are also excluded from the list picker in the popup builder.

    There is no archive button in the app today, and the public API does not
    expose one either. The toggle and the badge are there for lists that were
    already marked archived. If you want a list out of the way now, rename it
    or delete it.
  </Accordion>

  <Accordion title="Deleting" icon="trash">
    The row menu has **Delete**. The confirmation says what happens: contacts
    stay in your account, only the list membership is removed.

    Deleting a list does not delete anyone, does not change anyone's consent
    and does not remove anyone from your suppression list.

    Check anything that pointed at the list before you delete it. A segment
    keeps its **Is in a list** condition, but the membership behind it is gone,
    so the audience it selects changes. A popup keeps the stored choice and
    warns that the selected list is no longer available.
  </Accordion>
</AccordionGroup>

## Limits worth knowing

| Limit                        | Value          |
| ---------------------------- | -------------- |
| Members added per API call   | 100            |
| Import history kept per list | 50 runs        |
| List name                    | 255 characters |
| List description             | 500 characters |

Member counts on the Lists table are recalculated when the table loads, so a count you just changed is current.

## Lists in the API

The public API exposes your lists directly. You can enumerate them, add members by contact id or email, and remove members individually or in bulk. Adding or removing a member fires the `list.subscribed` and `list.unsubscribed` outbound webhooks.

See [Lists](/en/api-reference/lists) for the endpoints and [Authentication](/en/api-reference/authentication) for the headers.

## Related

<CardGroup cols={2}>
  <Card title="Segments" icon="filter" href="/en/audience/segments">
    Rule-based audiences, and the Is in a list condition.
  </Card>

  <Card title="Contacts" icon="address-book" href="/en/audience/contacts">
    The contact record, bulk actions and the activity feed.
  </Card>

  <Card title="Importing contacts" icon="file-import" href="/en/audience/import">
    The import wizard, duplicate handling and consent columns.
  </Card>

  <Card title="Popups" icon="window-maximize" href="/en/messaging/popups">
    Attaching a signup form to a list.
  </Card>
</CardGroup>
