Summary
This documentation describes how B2B Company records are transferred from Shopware to iPaaS.com, including the company identity, its addresses, and its B2B employees. The family creates and updates iPaaS.com Customer Company records when triggered by Shopware company webhook events or by Manual Sync, and stores several Shopware-specific values as iPaaS.com custom fields. Individual (non-company) customer records are transferred separately by the Add/Update Shopware Customer TO iPaaS.com collection.
ID Format
Manual Sync ID Format
Companies can be transferred from the iPaaS.com Manual Sync page by entering the Shopware company ID. A specific company is transferred together with its addresses and employees.
Example company ID: 01915630e5db7214ab1ab2dc71608955
External ID Format
After a successful transfer, each transferred record is linked in iPaaS.com using an external ID so it stays associated with the correct company across transfers:
The company is linked by its Shopware company ID.
Each address is linked using a composite external ID built from the Shopware address ID and its parent company ID, in the form {"id":"{address id}","customerId":"{company id}"}.
Each B2B employee relationship is linked using a composite external ID built from the employee ID, the relationship type, and the parent customer ID, in the form {"id":"{employee id}","Type":"B2BEmployee","businessPartnerCustomerId":"{customer id}"}.
Deleted Record Support
Deletions are not propagated by default. This family supports the Add and Update of B2B Company records, their addresses, and their B2B employee relationships; there is no Delete collection in this family, so removing a company, address, or relationship in Shopware does not remove the corresponding record in iPaaS.com.
Custom Field Support
This family supports Shopware custom fields. The parent collection can read Shopware company custom field values using the GetValueFromCustomField conversion function: a Dynamic Formula mapping calls GetValueFromCustomField with the company's custom fields and the technical name of the Shopware custom field to read. The function returns the value of the first custom field whose technical name matches, and returns nothing when no field matches. The value can be sent as-is to an iPaaS.com custom field or used inside a larger formula. The C5_Custom_Customer_Company mapping is a worked example that reads the Shopware custom field whose technical name is "customer comments".
The child address collection additionally retains the raw Shopware Country ID and Country State ID on iPaaS.com custom fields, alongside the human-readable Country and Region names produced by the resolution formulas.
Mapping Collection Status
Collection | Status |
Add/Update Shopware B2B Company TO iPaaS.com | Enabled |
Add/Update Shopware B2B Company Address TO iPaaS.com | Enabled |
Add/Update Shopware B2B Company Relationship (B2B-Employee) TO iPaaS.com | Enabled |
Trigger Events
company/created: a new Shopware company is created.
company/updated: an existing Shopware company is updated.
The child address and relationship collections have no independent trigger; they run automatically as part of the parent B2B company transfer.
Duplicate or Conflicting Mappings
This family transfers B2B Companies, their addresses, and their employees from Shopware to iPaaS.com. The following collections operate on the same records in the opposite direction:
Add/Update Shopware B2B Company FROM iPaaS.com: Creates or updates companies in Shopware from iPaaS.com data.
Add/Update Shopware B2B Company Address FROM iPaaS.com: Creates or updates company addresses in Shopware from iPaaS.com data.
Before enabling these inbound collections alongside the outbound "From iPaaS.com" collections, review and customize your mapping collection filters to prevent circular updates. Define clearly which system is the source of truth for company data. If both directions are active with default mappings, changes may propagate back and forth between systems. There is no opposite-direction collection for B2B company relationships at the time this documentation was written.
Unmapped Field Overwrite Risk
The iPaaS.com API performs a full record replace when updating records, and these collections handle both Add and Update. The fields below are not mapped in the default template mappings. Any existing value in these fields on the iPaaS.com record is overwritten with an empty value each time an Update transfer runs, unless an additional mapping is added to preserve it.
Customer Company (parent): AccountNumber, Department, Description, FaxNumber, ParentCompanyId, PhoneNumber, TaxIdNumber, Url
Customer Company Address (child): Company, PhoneNumber, Type
Company Relationship (child): StartDate, EndDate, IsPrimary
To preserve such values, split the combined Add/Update collection into separate Add and Update collections and, in the Update collection, add a Dynamic Formula mapping that uses the DestinationValue function to carry the existing iPaaS.com value forward — for example, DestinationValue.PhoneNumber mapped to the iPaaS.com PhoneNumber field. The DestinationValue function reads the current value from the iPaaS.com destination record before the replace and writes it back into the outgoing record, so the value is preserved. This is simpler than adding source-side mappings and works for every field, including those that originate in iPaaS.com and have no Shopware equivalent.
Supported Child Collections
Add/Update Shopware B2B Company Address TO iPaaS.com (Customer Company Address): Transfers the company's addresses as part of the company transfer. Each address is linked in iPaaS.com using a composite external ID built from the Shopware address ID and its parent company ID, in the form {"id":"{address id}","customerId":"{company id}"}.
Add/Update Shopware B2B Company Relationship (B2B-Employee) TO iPaaS.com (Company Relationship): Transfers the company's B2B employees and subsidiary companies as company relationships. Each relationship is linked in iPaaS.com using a composite external ID built from the employee ID, the relationship type, and the parent customer ID, in the form {"id":"{employee id}","Type":"B2BEmployee","businessPartnerCustomerId":"{customer id}"}.
Shopware Caveats
B2B Suite required: B2B Company records, their addresses, and their employees are provided by the Shopware Commercial (B2B Suite) extension, not the stock Admin API. Subscribers must have that extension installed for this family to transfer data. The relationships exist only in B2B-enabled Shopware environments.
Webhook workflow actions require Enterprise Shopware: The automatic-transfer workflows described under Setup Requirements can only be created on Enterprise editions of Shopware. Subscribers on other editions should rely on Manual Sync or order-driven company transfers.
Country and Region resolution: On the address collection, the Country and Region names are resolved from Shopware's country and country-state IDs and depend on those IDs existing in Shopware. The names are returned in the parent B2B company's language when available, falling back to the default language. If an ID cannot be resolved, the corresponding name is left empty.
iPaaS.com Caveats
Categories require a linked customer group: The Categories mapping only resolves to an iPaaS.com category when the corresponding Shopware customer group has already been linked between the two platforms. Customer groups that are not linked are omitted from the transferred categories rather than created on the fly.
Duplicate prevention by name and email: When a Shopware company is transferred and is not already linked to an iPaaS.com company, the integration looks for an existing iPaaS.com company with the same email address and name, and links to it instead of creating a duplicate. Keep company names and email addresses accurate in Shopware so this matching works as intended.
Subsidiary companies are created before their parents: When CompanyAddressesAsSubsidiaries is "true", each address becomes its own iPaaS.com Customer Company (a subsidiary) and is created during the prerequisite step, before the parent company. Subsidiary names are made unique by appending "Subsidiary {Number}". Because subsidiaries precede their parents, the Shopware B2B Parent Company Id mapping captures the parent ID for later use rather than resolving the iPaaS.com company ID at transfer time.
Employees are transferred as a prerequisite: A company's B2B employees are transferred into iPaaS.com before the company itself. If an employee record cannot be created or updated, the company transfer is stopped and an error is recorded so the company is not left partially linked.
Child collections cannot be triggered independently: The address and relationship collections run only as part of a parent B2B company transfer. They cannot be triggered from the Manual Sync page; transfer the parent B2B company to move its addresses and relationships.
Related party must exist first for relationships: A relationship's RelatedToId is resolved by looking up the iPaaS.com internal identifier of the related customer or company from its Shopware identifier. This requires that the related party has already been transferred to and linked in iPaaS.com.
Integration-Specific Caveats
Subscribers should stagger large manual jobs and rely on the configured API throttle limits exposed by the subscription when transferring many companies at once, to avoid overloading either platform.
Setup Requirements
For automatic transfers, subscribers or their MiSP must subscribe to Shopware company events on the Inbound Data Flows (External Webhooks) page of the Shopware subscription in iPaaS.com. Webhooks do not activate automatically — the relevant events must be subscribed before automatic transfers occur. Subscribing creates a workflow in Shopware that sends a webhook to iPaaS.com after the corresponding event; clearing the Inbound Data Flow toggle removes that workflow.
The supported company events are company/created and company/updated.
Webhook workflow actions are only available in Enterprise editions of Shopware. On non-Enterprise editions, use Manual Sync (or transfer companies as part of an order transfer) instead. The B2B Company feature requires the Shopware Commercial (B2B Suite) extension.
Integration Flow
A Shopware company/created or company/updated webhook is received (or a company ID is entered on the Manual Sync page).
The integration retrieves the full company record from Shopware.
The prerequisite step transfers the company's B2B employees and, when CompanyAddressesAsSubsidiaries is "true", its subsidiary companies. Each related party is created and linked in iPaaS.com first.
The company record is transformed and transferred to iPaaS.com — the name is built (falling back to first and last name when no company name is present), the customer group is resolved to an iPaaS.com category when linked, and the Shopware-specific values are stored as custom fields.
The company's addresses are processed through the Add/Update Shopware B2B Company Address TO iPaaS.com child collection.
The company's relationships (employees and subsidiaries) are processed through the Add/Update Shopware B2B Company Relationship (B2B-Employee) TO iPaaS.com child collection, after the related parties have been linked.
Each transferred record is linked in iPaaS.com by its external ID (company ID for the company; composite IDs for addresses and relationships, see ID Format).
Companies are also transferred automatically as a dependency of an order transfer (see Additional Notes) without a company webhook being subscribed.
Mappings
Add/Update Shopware B2B Company TO iPaaS.com
Description. Transfers the B2B company identity from Shopware to iPaaS.com, links the customer group to a category, and stores Shopware-specific values as custom fields.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Name | required — supplies the iPaaS.com Company name from the Shopware company name, falling back to first and last name when no company name is present; also a key for duplicate detection. |
Field | EmailAddress | recommended — maps the Shopware company email; used with the name to match and link an existing iPaaS.com company and prevent duplicates. | |
Dynamic Formula |
| Categories | recommended — converts the Shopware company's group ID to an iPaaS.com category when the customer group is linked; unlinked groups are omitted. |
Field | FirstName | First Name (custom field) | optional — stores the Shopware company contact first name; also feeds the Name fallback. |
Field | LastName | Last Name (custom field) | optional — stores the Shopware company contact last name; also feeds the Name fallback. |
Field | SalesChannelId | Sales Channel ID (custom field) | optional — stores the Shopware sales channel ID the company belongs to. |
Field | LanguageId | Language ID (custom field) | optional — stores the Shopware language ID associated with the company. |
Dynamic Formula |
| C5_Custom_Customer_Company (custom field) | optional — worked example that reads a Shopware custom field by technical name via GetValueFromCustomField. |
Dynamic Formula |
| Shopware B2B Parent Company Id (custom field) | optional — captures the Shopware parent company ID for subsidiary companies; stores nothing for any other company. |
// Name
if(!string.IsNullOrEmpty(CompanyName))
return CompanyName;
else
return FirstName + " " + LastName;// Categories return await ConvertShopwareCategoryToiPaaS(GroupId);
// C5_Custom_Customer_Company return await GetValueFromCustomField(CustomFields, "customer comments");
// Shopware B2B Parent Company Id
if(Id.Contains("_SubsidiaryCompany")){
var parentId = Links.Self;
var justParent = parentId.Split('/').Last();
return justParent;
}
else {
return null;
}Placeholder value — replace during implementation: "customer comments" is an example Shopware custom field technical name; replace it with the technical name of the custom field you want to transfer, or remove this example mapping if it is not needed.
Add/Update Shopware B2B Company Address TO iPaaS.com
Description. Transfers a B2B company's addresses to iPaaS.com as part of the parent company transfer, resolving country and region names from Shopware identifiers.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Field | Street | Address1 | recommended — the primary street line, for deliverable addresses. |
Field | AdditionalAddressLine1 | Address2 | optional — the second street line. |
Field | AdditionalAddressLine2 | Address3 | optional — the third street line. |
Field | City | City | recommended — the address city. |
Dynamic Formula |
| Country | recommended — resolves the country name from the Shopware Country ID via CountryNameFromId, in the parent company's language with default-language fallback; empty if unresolved. |
Field | CountryId | Country ID (custom field) | optional — stores the raw Shopware Country ID alongside the resolved Country name. |
Field | CountryStateId | Country State ID (custom field) | optional — stores the raw Shopware Country State ID alongside the resolved Region name. |
Field | FirstName | FirstName | recommended — the recipient first name on the address. |
Field | IsPrimaryBilling | IsPrimaryBilling | optional — flags whether this is the company's primary billing address. |
Field | IsPrimaryShipping | IsPrimaryShipping | optional — flags whether this is the company's primary shipping address. |
Field | LastName | LastName | recommended — the recipient last name on the address. |
Field | ZipCode | PostalCode | recommended — the postal/ZIP code, for deliverable addresses. |
Dynamic Formula |
| Region | recommended — resolves the region name from the Shopware Country ID and Country State ID via StateNameFromId, in the parent company's language with default-language fallback; empty if unresolved. |
// Country var country = await CountryNameFromId(CountryId,Parent.LanguageId); if (!string.IsNullOrEmpty(country)) return country; return await CountryNameFromId(CountryId);
// Region
var state = await StateNameFromId(CountryId, CountryStateId, Parent.LanguageId);
if(!string.IsNullOrEmpty(state))
return state;
return await StateNameFromId(CountryId, CountryStateId);Add/Update Shopware B2B Company Relationship (B2B-Employee) TO iPaaS.com
Mapping Filter
string tableName = string.Empty;
if(Id != null && Id.Contains("_SubsidiaryCompany"))
tableName = "Company";
else
tableName = "Customer";
var iPaaSEntityId = await GetSpaceportIdAsync(Id.Split("|")[0], tableName, SpaceportSystemId);
if(iPaaSEntityId != null && !string.IsNullOrWhiteSpace(iPaaSEntityId.ToString()))
return true;
throw new Exception("Can not create this company relationship (id: "+ Id +") as its employee/subsidiary_company because it does not exist or interlinked with iPaaS customer/company");Filter Description. Before a relationship is transferred, the filter determines the related party's type from the Shopware Id: an ID containing _SubsidiaryCompany is treated as a Company, otherwise as a Customer. It then calls GetSpaceportIdAsync to look up the related party's iPaaS.com internal ID from its Shopware ID. If a matching, linked iPaaS.com record is found, the relationship passes and the transfer proceeds. If the related employee or subsidiary company does not yet exist or is not yet linked on iPaaS.com, the filter throws "Can not create this company relationship (id: "+ Id +") as its employee/subsidiary_company because it does not exist or interlinked with iPaaS customer/company" and the transfer fails. In practice the related employee or subsidiary company must be transferred to iPaaS.com before the relationship that points at it.
Description. Transfers the relationships that connect a Shopware B2B company to its employees and subsidiary companies, setting the relationship type and resolving the related party's iPaaS.com identifier.
Mapping Type | Source Field (Shopware) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Type | recommended — classifies the relationship as Subsidiary Company (ID contains |
Dynamic Formula |
| RelatedToId | recommended — resolves the related party's iPaaS.com internal ID via GetSpaceportIdAsync (a Company for subsidiaries, a Customer otherwise); ties the relationship to the correct iPaaS.com record. |
// Type
if(Id != null && Id.Contains("_SubsidiaryCompany"))
return "Subsidiary Company";
else
return "Employee";// RelatedToId
string tableName = string.Empty;
if(Id != null && Id.Contains("_SubsidiaryCompany"))
tableName = "Company";
else
tableName = "Customer";
return await GetSpaceportIdAsync(Id.Split("|")[0], tableName, SpaceportSystemId);Error Handling
"Can not create this company relationship (id: ...) as its employee/subsidiary_company because it does not exist or interlinked with iPaaS customer/company": the relationship's related employee (Customer) or subsidiary company (Company) has not yet been transferred to and linked in iPaaS.com. Resolution: transfer the related party first, then re-trigger the relationship transfer. Errors surface in Dashboard / Integration Monitoring / Error Logs.
Shopware API temporarily unavailable: if Shopware is unreachable when a transfer is triggered, the transfer fails and an error appears in Dashboard / Integration Monitoring / Error Logs. Resolution: retry by triggering a new webhook event or by using Manual Sync (for child records, re-trigger the parent B2B company transfer).
Employee prerequisite failure: if a company's B2B employee record cannot be created or updated, the company transfer is stopped and an error is recorded so the company is not left partially linked. Resolution: correct the underlying employee record, then re-trigger the transfer.
Testing & Validation
Test Scenarios
Create a new B2B company in Shopware and confirm a corresponding iPaaS.com Customer Company is created with the expected name and email.
Update an existing B2B company in Shopware and confirm the linked iPaaS.com Company is updated rather than duplicated.
Transfer a company with no company name and confirm the Name falls back to the company contact's first and last name.
Transfer a company whose Shopware customer group is linked and confirm the iPaaS.com Categories value resolves; transfer one whose group is not linked and confirm the category is omitted.
Transfer a company with multiple addresses and confirm each address is created and linked under the company with resolved Country and Region names.
Transfer a company with employees and confirm each employee relationship is typed Employee and linked to the correct iPaaS.com customer.
With CompanyAddressesAsSubsidiaries set to "true", confirm subsidiary companies are created with unique "Subsidiary {Number}" names and linked through Subsidiary Company relationships.
Attempt a relationship transfer before the related employee/subsidiary is linked and confirm the validating filter rejects it with the documented error.
Perform a Manual Sync using a Shopware company ID and confirm the company, addresses, and employees transfer together.
Validation Checklist
The iPaaS.com Customer Company has a non-empty Name and the expected EmailAddress.
Duplicate detection links to an existing iPaaS.com company by name and email rather than creating a duplicate.
Custom fields (First Name, Last Name, Sales Channel ID, Language ID, C5_Custom_Customer_Company, Shopware B2B Parent Company Id) carry the expected values.
Addresses are linked with the composite external ID and show resolved Country/Region names, with raw Country ID and Country State ID retained.
Relationships are linked with the composite external ID and carry the correct Type and RelatedToId.
The example custom field technical name ("customer comments") has been replaced or the example mapping removed before production use.
Where preserving unmapped fields matters, separate Add and Update collections with DestinationValue mappings have been configured.
Additional Notes
When an order is transferred from Shopware to iPaaS.com for a business customer, a B2B company transfer occurs automatically to capture the company on the order — even if company webhooks are disabled. To prevent company records from being created or updated during order transfers, disable the B2B company transfer mapping collections.
These limitations are inherent to the current design of the integration and the capabilities of the Shopware API, and they apply to all subscribers at the time this documentation was written.
