> For the complete documentation index, see [llms.txt](https://docs.solutioo.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.solutioo.de/shopware/shopware6_en_us/customer-management/b2b-users-from-contacts.md).

# B2B Users from Contacts

In B2B business, the buyer is not "one person" but a **company with several contact persons**. The connector maps exactly that: the **company account** is the **customer**, and the users who can log in are the **contacts** of that customer – each with a role.

**Customer & contact – how they work together**

```mermaid
flowchart TD
    D[Customer = company account in Shopware] --> K1[Contact A - Role: Approval]
    D --> K2[Contact B - Role: Orderer]
    D --> K3[Contact C - Role: View]
    K1 --> S[B2B users who can log in to the shop]
    K2 --> S
    K3 --> S
```

* The **customer** must be uploaded as a web customer – it represents the company account in Shopware.
* Every **contact** of the customer can be transferred as a separate **B2B user** who can log in.
* Contacts are assigned to the company account by the **Customer ID** of the customer; if this is not unique, the **email address** is used as a fallback.

{% hint style="info" %}
The customer always remains the basis. Therefore, run the customer upload first before you upload contacts as B2B users.
{% endhint %}

**Roles**

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>View</strong></td><td>May view and forward for approval.</td></tr><tr><td><strong>Orderer</strong></td><td>May view and create orders.</td></tr><tr><td><strong>Approval</strong></td><td>May view, create, and approve.</td></tr></tbody></table>

For details about the approval process, see [B2B Roles & Approval Process](/shopware/shopware6_en_us/customer-management/b2b-roles-and-approval-process.md).

**Setup (configuration)**

In the **B2B Contacts** area of the Shopware configuration:

| Field                            | Meaning                                                             |
| -------------------------------- | ------------------------------------------------------------------- |
| **Upload Contacts as B2B Users** | Master switch for the feature                                       |
| **B2B Language ID**              | Language of new B2B users                                           |
| **B2B Role ID (View)**           | Shopware role ID for "View"                                         |
| **B2B Role ID (Orderer)**        | Shopware role ID for "Orderer"                                      |
| **B2B Role ID (Approval)**       | Shopware role ID for "Approval"                                     |
| **B2B Email Substitute Domain**  | Domain for the substitute email if the contact has no email address |

**Login email (with fallback)**

* The **email address of the contact** is used as the login by default.
* If it is missing, the connector builds a **substitute address** following the pattern `{KontaktNr}@{DebitorNr}.{Ersatz-Domain}`.

{% hint style="warning" %}
Without a configured **substitute domain**, contacts without their own email address cannot be created. Enter the domain if you also want to transfer contacts without an email address.
{% endhint %}

**Procedure**

{% stepper %}
{% step %}
**Upload the customer as a web customer**

Set **Web Customer = Yes** and run the customer upload. The customer receives a Web-ID.
{% endstep %}

{% step %}
**Assign roles**

Assign the required role (View, Orderer, Approval) to the contacts.
{% endstep %}

{% step %}
**Upload B2B users**

Use **Upload B2B Users** – available both on the **Customer Card** (all contacts) and on the **Contact Card** (a single contact).
{% endstep %}

{% step %}
**Check**

Use **Check B2B User (API)** to read the user back from Shopware and verify that it was created.
{% endstep %}
{% endstepper %}

**Where do I find the actions?**

| Location          | Actions                                               |
| ----------------- | ----------------------------------------------------- |
| **Customer Card** | Upload B2B users for all contacts, activity log       |
| **Contact Card**  | Set the role, upload a single B2B user, check via API |

{% hint style="info" %}
An activity log on the contact and customer cards helps you track the uploads. Errors additionally appear in the [Activity Log](/shopware/shopware6_en_us/monitoring-and-logs/activity-log.md).
{% endhint %}

**Troubleshooting**

<details>

<summary>The B2B user is not created</summary>

* Has the **customer** been uploaded as a web customer (is a Web-ID present)?
* Is **Upload Contacts as B2B Users** enabled?
* Have the **role IDs** been entered?
* Does the contact have an email address – or is a **substitute domain** configured?

</details>

<details>

<summary>The contact is assigned to the wrong company account</summary>

Check the **Customer ID** link between the contact and the customer. If it is not unique, the email fallback applies – in that case, make sure the email addresses are unique.

</details>

<details>

<summary>Logging in to the shop does not work</summary>

The login email corresponds to the contact's email address or to the generated substitute address. Check which address was actually transferred (using **Check B2B User (API)**).

</details>

**Related topics**

* [Customer Upload (BC to Shopware)](/shopware/shopware6_en_us/customer-management/customer-upload-bc-to-shopware.md)
* [B2B Roles & Approval Process](/shopware/shopware6_en_us/customer-management/b2b-roles-and-approval-process.md)
* [Set Up a B2B Shop](/shopware/shopware6_en_us/onboarding-and-best-practices/set-up-a-b2b-shop.md)
* [Customer Group Prices (Rules)](/shopware/shopware6_en_us/price-and-inventory-management/customer-group-prices-rules.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.solutioo.de/shopware/shopware6_en_us/customer-management/b2b-users-from-contacts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
