Skip to main content

iPaaS.com to Adobe Commerce/Magento 2 Customer Mapping Documentation

How customers transfer from iPaaS.com into Adobe Commerce/Magento 2, including customer group and B2B company assignment and the addresses written with them.

Summary

Customer records are written from iPaaS.com into Adobe Commerce/Magento 2. Each iPaaS.com Customer becomes one Magento customer carrying the email address, name, customer group, and — for stores running Adobe Commerce B2B — the company assignment, job title, and company telephone number. A child collection writes the customer's addresses onto the same Magento customer.

This is the outbound direction. A separate inbound family brings customers the other way; see Duplicate or Conflicting Mappings below for what enabling both means.

Addresses can also be written independently of a customer transfer by a separate standalone collection, which is documented in its own article.

ID Format

Manual Sync ID Format

Enter the iPaaS.com Customer record identifier — the internal numeric identifier of the customer in iPaaS.com, for example 31877.

The customer's email address is not accepted as a Manual Sync value.

External ID Format

After a successful transfer, iPaaS.com stores the Adobe Commerce/Magento 2 customer id as the external ID on a record linking the iPaaS.com Customer to the Magento customer. That record routes later transfers of the same customer to the existing Magento customer for an update rather than creating a duplicate, and it is what the standalone address collection reads to resolve which Magento customer an address belongs to.

Deleted Record Support

Delete is supported for customers, through a separate delete mapping that is not part of this family and is not included in the default templates. It is one of only a few entities in this integration where an outbound delete propagates.

Removing a customer from a company is not something the integration can do; that change must be made in the Magento admin.

Custom Field Support

This family reads several iPaaS.com custom fields, which must exist by these exact names for the behavior they control to work.

On the customer record:

  • M2_Magento_Status: the customer's status within their Adobe Commerce B2B company. The value is numeric — enter 1 rather than a true/false value, because the field's data type will not accept a boolean.

  • M2_Magento Job Title: the customer's job title within their B2B company. Note this name contains a space where the status field uses an underscore.

On the address record, read by the address child:

  • M2_CustomerAdd_Regionid, M2_CustomerAdd_RegionCode, M2_CustomerAdd_Region: the region identifier, code, and name used to resolve the Magento region for the address. Any one of the three can drive the lookup, and the others act as fallbacks.

Mapping Collection Status

Status: Enabled. Both collections ship enabled.

Trigger Events: Creation or update of a Customer record in iPaaS.com, plus Manual Sync on demand.

Automatic outbound transfers are enabled on the subscription's Outbound Data Flows page. Until that flow is enabled, no customers are sent automatically. Manual Sync is always available regardless.

Duplicate or Conflicting Mappings

  • Add/Update Adobe Commerce/Magento 2 Customer TO iPaaS.com and its address child move customer data in the opposite direction. They are the inbound counterparts of these collections rather than competitors for the same write.

Subscribers or their MiSP who enable both directions should be aware that customer data then round-trips between the two systems, and should decide which system is the master for each field so a value maintained in one is not replaced by the other on the next transfer.

  • Add/Update Adobe Commerce/Magento 2 Standalone Customer Address FROM iPaaS.com writes the same Magento address data in the same direction, but on its own rather than beneath a customer transfer. These two genuinely compete: enabling both means an address can be written twice, once with its customer and once independently. Choose the model that fits the workflow and review the filters and the Add and Update settings on both before enabling them together.

Duplicate matching

This integration implements no selectable collision-handling methods, and the behavior is not configurable on these collections. The external-ID record linking the iPaaS.com Customer to its Magento customer decides whether a transfer creates or updates.

Where no link exists, the integration also attempts to match an existing Magento customer by email address and create the link rather than producing a duplicate.

Unmapped field overwrite risk

Mapped fields that carry a value overwrite the matching values on the Magento customer on every transfer, including values a store administrator changed by hand. The fields at risk are Email, FirstName, LastName, GroupId, Status, CompanyId, JobTitle and Telephone on the customer, and City, CountryId, DefaultBilling, DefaultShipping, FirstName, LastName, PostCode, RegionId, RegionCode, Region_, Street and Telephone on each address.

The integration provides no guarantee that unmapped or blank fields are preserved on a customer update. Subscribers or their MiSP should validate in a staging environment how fields left blank in iPaaS.com behave before relying on that behavior in production.

The mitigation is a DestinationValue. Where a Magento field must hold a specific value that iPaaS.com does not supply, set a DestinationValue on that mapping so the integration writes the value chosen there instead of taking it from the source. Values that must be maintained only in Magento should be kept on fields these collections do not map.

Supported Child Collections

The parent collection is Add/Update Adobe Commerce/Magento 2 Customer FROM iPaaS.com. It has one child:

  • Add/Update Adobe Commerce/Magento 2 Customer Address FROM iPaaS.com: writes the customer's addresses onto the Magento customer as part of the customer's transfer. It runs beneath the parent and does not transfer on its own.

System Caveats

Adobe Commerce/Magento 2 Caveats

  • Magento requires a default billing or shipping address. A customer whose iPaaS.com addresses are all unflagged cannot be written correctly. The address child checks this before the write and reports it in subscriber terms, rather than letting the store return its own less specific error. See the address child's filter below.

  • Customer groups must already exist. The group is resolved by name; a name that does not match an existing Magento customer group yields no group assignment.

  • B2B fields require Adobe Commerce B2B. The company assignment, job title, status and company telephone apply only to stores running the B2B module. On a store without it, leave those mappings unpopulated.

  • The street is written as a single pipe-separated value. The three iPaaS.com address lines are concatenated with a vertical bar rather than written as individually separated Magento street lines.

  • Customer writes are subject to Magento's API limits. A large initial customer load can encounter request-array and page-size limits. Stagger large manual catch-up runs rather than issuing them concurrently.

iPaaS.com Caveats

  • The email address, first name and last name are required. A customer cannot be written to Magento without them.

  • At least one address must be flagged primary. This is a Magento requirement. The address child enforces it before the write so the failure is reported in subscriber terms rather than as a store API error.

  • The region custom fields must exist by their exact names for region resolution to work. An unmatched region leaves the region unset without raising an error.

  • The company relationship is resolved two ways. A company relationship on the iPaaS.com customer is preferred; where none exists, the company name is looked up instead. If neither resolves, no company is assigned.

Integration-Specific Caveats

  • An unmatched customer group or company produces no error. A customer can transfer successfully without the group or company assignment the subscriber expected, and the omission is visible only by inspecting the Magento customer.

  • The status custom field is numeric. Entering a boolean value will not be accepted.

  • The two region-driving custom fields are named inconsistently with the status field. The status field uses an underscore, the job title field a space. Both must be created exactly as named.

  • This family and the standalone address collection overlap. Running both writes some addresses twice.

Setup Requirements

Adobe Commerce/Magento 2 Configuration

  • Create the customer groups the catalog uses, so group resolution by name succeeds.

  • Confirm whether the store runs Adobe Commerce B2B, and if not, leave the company, job title, status and telephone mappings unpopulated.

  • Confirm the companies referenced by iPaaS.com customers exist, or that the company transfer has run.

iPaaS.com Configuration

  • Create the customer custom fields M2_Magento_Status and M2_Magento Job Title where B2B behavior is required.

  • Create the address custom fields M2_CustomerAdd_Regionid, M2_CustomerAdd_RegionCode and M2_CustomerAdd_Region, and populate at least one of them per address.

  • Ensure every customer has at least one address flagged as primary billing or primary shipping, or the address child will stop the transfer.

  • Decide whether addresses are written through this family's child or through the standalone address collection, and enable only one.

  • Decide which system is the master for customer data, and enable the inbound customer family only if a round trip is intended.

  • Enable the outbound flow for Adobe Commerce/Magento 2 customers on the subscription's Outbound Data Flows page.

Full step-by-step setup instructions are in the Adobe Commerce/Magento 2 Installation Instructions article.

Integration Flow

  1. A Customer record is created or updated in iPaaS.com, or a Manual Sync is run.

  2. The customer is evaluated by the parent collection. It carries no filter, so every customer record is processed.

  3. The customer group is resolved from the first category on the iPaaS.com customer, by name.

  4. The company is resolved: a company relationship on the customer is preferred, and the company name is used as a fallback.

  5. iPaaS.com decides between an Add and an Update using the external-ID record, falling back to an email-address match.

  6. The customer is created or updated in Adobe Commerce/Magento 2.

  7. The address child runs against the customer's addresses. It first confirms at least one address is flagged primary billing or primary shipping, stopping the transfer with an explicit message if none is. Each qualifying address is then written, with its region resolved from the address custom fields and its street lines concatenated.

Mappings

Add/Update Adobe Commerce/Magento 2 Customer FROM iPaaS.com (Parent)

iPaaS.com data type: Customer

This collection carries no mapping filter — every iPaaS.com Customer record is processed.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Adobe Commerce/Magento 2)

Description

Field

EmailAddress

Email

Required. The customer's email address, and the fallback match used to link to an existing Magento customer where no external-ID record exists.

Field

FirstName

FirstName

Required. The customer's first name.

Field

LastName

LastName

Required. The customer's last name.

Dynamic Formula

var groupName = Categories?.FirstOrDefault()?.CategoryName; if (!string.IsNullOrWhiteSpace(groupName)){ var id = await GetCategoryIdByName(groupName); if(!string.IsNullOrWhiteSpace(id)) return ConvertToInt(id); } return 0;

GroupId

Optional. Sets the Magento customer group from the first category on the iPaaS.com customer, resolved by name. A name that does not match an existing group yields 0 — no group assignment — and raises no error.

Dynamic Formula

var companyRelationship = Relationships.FirstOrDefault(x=>x.Type.ToLower() == "company")?.RelatedToId; var companyName = Company; if (!string.IsNullOrWhiteSpace(companyRelationship)) { var relationshipId = await GetExternalIdAsync(companyRelationship, "Company", SpaceportSystemId); if(!string.IsNullOrWhiteSpace(relationshipId)) return ConvertToInt(relationshipId); } else if (!string.IsNullOrWhiteSpace(companyName)) { var id = await GetCompanyIdByName(companyName); if (!string.IsNullOrWhiteSpace(id)) return ConvertToInt(id); } return 0;

CompanyId

Optional. Assigns the customer to an Adobe Commerce B2B company. A company relationship on the iPaaS.com customer is preferred; the company name is used as a fallback. Neither resolving yields 0 — no company assignment — and raises no error. Applies only to B2B stores.

Field

M2_Magento_Status

Status

Optional. The customer's status within their B2B company, from the custom field. The value is numeric — enter 1 rather than a boolean.

Field

M2_Magento Job Title

JobTitle

Optional. The customer's job title within their B2B company, from the custom field. Note the field name contains a space.

Dynamic Formula

FieldFromFirstMatch(Addresses, "IsPrimaryBilling == true", "PhoneNumber")

Telephone

Optional. The telephone number on the customer's B2B company profile, taken from the phone number on the customer's primary billing address.

Add/Update Adobe Commerce/Magento 2 Customer Address FROM iPaaS.com (Child)

iPaaS.com data type: Customer Address

Mapping Filter

if(Parent.Addresses != null && Parent.Addresses.Count > 0 && Parent.Addresses.Any(x=>x.IsPrimaryBilling == true || x.IsPrimaryShipping == true))
    return true;
throw new Exception("None of the addresses for this iPaaS customer are marked as primary billing or shipping. Since Magento requires at least one default billing or shipping address to function correctly, please update an address in iPaaS to set either 'IsPrimaryBilling' or 'IsPrimaryShipping' to true.");

Adobe Commerce/Magento 2 requires a customer to have a default billing or shipping address. This filter enforces that requirement up front: it passes when the customer has at least one address flagged as primary billing or primary shipping, and where none is, it stops the transfer with a message that names both the problem and the fix — which is more actionable than the error the Magento API would return further down the line:

"None of the addresses for this iPaaS customer are marked as primary billing or shipping. Since Magento requires at least one default billing or shipping address to function correctly, please update an address in iPaaS to set either 'IsPrimaryBilling' or 'IsPrimaryShipping' to true."

Search the Error Logs for that text to find affected customers. The remedy is exactly what the message says — flag one of the customer's addresses as primary billing or primary shipping in iPaaS.com, then re-transfer.

Mapping Type

Source Field (iPaaS.com)

Destination Field (Adobe Commerce/Magento 2)

Description

Field

FirstName

FirstName

Required. The address contact's first name.

Field

LastName

LastName

Required. The address contact's last name.

Field

City

City

Required. The address city.

Field

PostalCode

PostCode

Required. The address postal code.

Dynamic Formula

var countryId = await GetCountryCode(Country); return countryId?.ToString();

CountryId

Required. Resolves the Magento country identifier from the iPaaS.com address country.

Dynamic Formula

var concatenatedAddress=""; concatenatedAddress = (!string.IsNullOrEmpty(Address1)==true ? Address1 :"") + (!string.IsNullOrEmpty(Address2)==true ? "\|"+Address2:"") + (!string.IsNullOrEmpty(Address3)==true ? "\|"+Address3:""); return concatenatedAddress;

Street

Required. Concatenates the three iPaaS.com address lines into a single value separated by vertical bars, skipping any that are empty.

Dynamic Formula

Region identifier lookup — see the region resolution note below

RegionId

Required. Resolves the Magento region identifier for the address from the region custom fields. An unmatched region leaves this unset without raising an error.

Dynamic Formula

Region code lookup — see the region resolution note below

RegionCode

Required. Resolves the Magento region code for the address.

Dynamic Formula

Region name lookup — see the region resolution note below

Region_

Required. Resolves the Magento region name for the address.

Field

PhoneNumber

Telephone

Recommended. The address telephone number.

Field

IsPrimaryBilling

DefaultBilling

Recommended. Marks the address as the customer's default billing address in Magento. At least one address must carry this or the shipping equivalent, or the collection's filter stops the transfer.

Field

IsPrimaryShipping

DefaultShipping

Recommended. Marks the address as the customer's default shipping address in Magento.

Region resolution

The three region mappings share one lookup. Each reads the same three address custom fields — M2_CustomerAdd_Regionid, M2_CustomerAdd_RegionCode and M2_CustomerAdd_Region — together with the address country, and passes all of them to a region lookup that validates the region against that country. The lookup returns the identifier, the code and the name, and each mapping takes its own part of that result.

Any one of the three custom fields can drive the lookup, and the others act as fallbacks: if the region identifier is missing or wrong, the code or the name is used instead. If none of them resolves against the country, all three mappings return nothing and the region is left unset — silently, with no error raised.

The full lookup, as it appears on the RegionId mapping:

var regionId = GetCustomFieldValue(CustomFields, "M2_CustomerAdd_Regionid");
var regionCode = GetCustomFieldValue(CustomFields, "M2_CustomerAdd_RegionCode");
var regionName = GetCustomFieldValue(CustomFields, "M2_CustomerAdd_Region");
var countryId = Country;
if (!string.IsNullOrEmpty(regionId)|| !string.IsNullOrEmpty(regionCode) || !string.IsNullOrEmpty(regionName) && !string.IsNullOrEmpty(countryId)) {
    var regionList = await GetRegionByCountryCode(Country, regionId , regionCode, regionName);
    if (regionList != null && regionList.Count > 0)
    {
        return int.Parse(regionList[0]);
    }
}
return null;

The RegionCode and Region_ mappings are identical except that they take the second and third values from the returned list respectively, and return them as text rather than as a number.

Error Handling

The full catalog of messages this integration produces, with causes and resolutions, is in the Adobe Commerce/Magento 2 Error Messages article. The conditions most often seen on this transfer are:

  • Error message: None of the addresses for this iPaaS customer are marked as primary billing or shipping. The customer has no address flagged primary billing or primary shipping, and Magento requires one. Resolution: flag an address in iPaaS.com, then re-transfer the customer.

  • The customer could not be created. Magento rejected the customer, most often for a missing required field or a duplicate email address. Resolution: confirm the email address, first name and last name are populated and the email is not already in use.

  • An existing customer could not be linked by email. A Magento customer already holds the incoming email address and the link could not be created. Resolution: reconcile the duplicate in Magento, then re-run.

  • A customer that transfers without its group or company. Neither resolution succeeded. This raises no error. Resolution: confirm the customer group name matches a Magento group, and that the company exists or has been transferred.

Errors are reported under Dashboard / Integration Monitoring / Error Logs.

Testing & Validation

Test Scenarios

  1. Create a Customer in iPaaS.com with a primary billing address and confirm a Magento customer is created with the correct email address, name, and address.

  2. Manually sync using the iPaaS.com Customer record identifier and confirm it resolves; confirm the email address does not.

  3. Update the customer in iPaaS.com and confirm the same Magento customer is updated rather than a duplicate created.

  4. Transfer a customer whose addresses are none flagged primary, and confirm the transfer stops with the primary-address message.

  5. Set a customer category whose name matches a Magento customer group and confirm the group is assigned; then set one that matches nothing and confirm the customer transfers with no group and no error.

  6. On a B2B store, set a company relationship and confirm the company is assigned; remove the relationship, set only the company name, and confirm the name fallback resolves.

  7. Populate each of the three region custom fields in turn and confirm the region resolves from any one of them.

  8. Populate a region that does not exist in the address's country and confirm the region is left unset with no error.

  9. Enter three address lines and confirm the Magento street value carries all three separated by vertical bars.

  10. Set M2_Magento_Status to a boolean value and confirm it is not accepted; set it to 1 and confirm it is.

  11. If the standalone address collection is also enabled, transfer the same address through both and confirm the effect.

Validation Checklist

  • Every customer has at least one address flagged primary billing or primary shipping.

  • The customer custom fields M2_Magento_Status and M2_Magento Job Title exist, exactly as named, where B2B behavior is required.

  • The address region custom fields exist and at least one is populated per address.

  • Magento customer groups exist with names matching the iPaaS.com customer categories.

  • On a non-B2B store, the company, job title, status and telephone mappings are left unpopulated.

  • Only one of this family's address child and the standalone address collection is enabled.

  • A decision has been recorded on which system is master for customer data, if both directions are enabled.

Additional Notes

  • The address child’s filter is the only place in this family that stops a transfer outright, and it does so deliberately: the primary-address requirement is Magento’s, and catching it here produces a clearer message than the store’s own error would. Everything else that fails to resolve — the customer group, the company, the region — does so silently.

  • Street lines reach Magento as a single pipe-separated value rather than as separate street lines.

  • A customer cannot be removed from a company by the integration; that change must be made in the Magento admin.

  • Validate the blank-field behavior, the region resolution, and — where both directions are enabled — the round-trip behavior in a staging environment before enabling automatic transfers in production.

Related Documents

Did this answer your question?