Skip to content
Shop integration & processes

Customer Part Numbers Searchable in the B2B Shop

Making customer part numbers from the ERP searchable in a B2B shop: data model, BMEcat elements, tenant permissions and the return path into the e-invoice.

14 min read KundenartikelnummernB2B-CommerceStammdaten

A buyer searches a supplier's shop for a ball valve and types in the number printed on the purchase requisition: K-88 4711/2. That string comes from the buyer's own ERP and does not exist in the supplier's catalogue. The shop returns zero results, the buyer picks up the phone, and the order arrives as an email attachment once again. This article shows how customer part numbers travel from the ERP into the shop so that search finds them, documents carry them, and no other customer gets to see them. Anyone connecting ERP and shop in wholesale decides at exactly this point whether the online channel relieves purchasing or forces a second number world upon it.

Key takeaways

  • In B2B trade an article carries at least three numbers: the supplier's, the customer's and the manufacturer's.
  • The BMEcat catalogue standard holds the customer part number in a dedicated element, repeatable and, at 50 characters (BME e.V.), longer than the supplier's own article number.
  • Search rarely fails because of the search engine; it fails because the index does not contain the foreign numbers at all.
  • Customer part numbers are customer-bound: they belong in a mapping table, not as an attribute on the article master.
  • The electronic invoice knows the field as well: BT-156 (OpenPeppol) carries the identifier assigned by the buyer.
  • Without a return path into cart, order confirmation, delivery note and invoice, the number stays a search aid instead of a process attribute.

Three numbers for the same part

In business-to-business trade an article rarely has a single identity. The supplier keeps its own article number because stock, pricing and picking all depend on it. The manufacturer assigns a type number, usually complemented by a European Article Number. And the buyer keeps a third number, because their ERP knows the item under a key that fits their bills of material, cost centres and purchase requisitions. That third number is the customer part number. It is the only one of the three a buyer can read from memory or from their own screen without looking anything up, which is precisely why it is the one they type into the search box.

The BMEcat catalogue standard has modelled this three-way split for a long time. The supplier's article number is a mandatory element with 32 characters (BME e.V.) and, according to the specification, is the one that governs ordering. The buying company's number has more room than the supplier's own, at 50 characters (BME e.V.), and may be repeated. Even the product group from the customer's ERP has its own element, albeit with only 10 characters (BME e.V.). A shop that does not rebuild this structure squeezes three number worlds into one field and loses the mapping as soon as two customers name the same article differently. How these fields travel from inventory management into the shop decides the later quality of search.

Supplier article number

Mandatory element with 32 characters, governing ordering, stock and pricing. It remains the technical key inside the shop even when the customer rarely sees it.

Customer part number

Repeatable element with 50 characters. It belongs to exactly one customer, may differ per plant or site, and changes whenever the customer rebuilds their master data.

Manufacturer and EAN number

For the same number element the standard offers predefined types, among them the European Article Number with 14 characters (BME e.V.). It works as a bridge between systems but does not replace the customer's own number.

What the catalogue standard has required since 1999

The customer part number is not a special request from a few key accounts; it has been part of the exchange format for a quarter of a century. Version 1.0 of the standard was adopted in November 1999 in Frankfurt (BME e.V.); the edition in common use today, 2005.2, carries the field as the BUYER_PID element inside PRODUCT_DETAILS – the older ARTICLE_DETAILS branch from version 1.2 still carries BUYER_AID in the same place. The English edition of the same specification describes it identically: optional, repeatable, with a length of 50 characters (BME e.V.). For companies shipping internationally that means there is no need for a second concept per market, only for an implementation that serves both language editions of the same standard.

The decisive part is the type attribute on the element. BMEcat distinguishes what kind of number it holds and, alongside the predefined values, permits user-defined type names of 1 to 50 characters (BME e.V.). The standard therefore explicitly anticipates more than one foreign number per article: one for central purchasing, one for the plant, one for maintenance. This very repeatability tends to get lost during import because the target field in the shop was built as a single value. If the mapping between ERP and store is not designed as an n-to-m relation from the start, data disappears silently from the second number onwards.

bmecat-article.xml
<PRODUCT mode="new">
  <SUPPLIER_PID type="supplier_specific">40-2517-KH25</SUPPLIER_PID>
  <PRODUCT_DETAILS>
    <DESCRIPTION_SHORT>Ball valve DN 25, brass, PN 16</DESCRIPTION_SHORT>
    <INTERNATIONAL_PID type="ean">40123456789012</INTERNATIONAL_PID>
    <BUYER_PID type="buyer_specific">K-88 4711/2</BUYER_PID>
    <BUYER_PID type="plant_north">4711-N</BUYER_PID>
    <ERP_GROUP_BUYER>ARM-2500</ERP_GROUP_BUYER>
  </PRODUCT_DETAILS>
</PRODUCT>

The number belongs to the relation, not to the article

A customer part number describes the relationship between a customer and an article. In the data model it is therefore a row in a mapping table holding customer, article, number, type and validity – not another attribute on the article. Hanging it on the article means touching the article master on every customer change, which throws any master data synchronisation out of step.

Why shop search fails on foreign numbers

Internal search is a measured weak spot in commerce. More than half of the benchmarked online shops do not adequately support users' search needs: 56% (Baymard Institute) fail in a benchmark covering more than 170 reviewed shops. Even the simplest form, typing an exact product name or model number, causes problems on 12% (Baymard Institute) of shops. And as soon as abbreviations or symbols appear in the query, which is exactly what every article number brings with it, more than every second shop struggles, at 54% (Baymard Institute).

In business-to-business trade a fourth difficulty is added that consumer commerce does not have: the search term is not in the catalogue at all. K-88 4711/2 is neither a typo nor an unusual expression; it is a string that is simply absent from the supplier's data as long as nobody has stored it there. No synonym dictionary and no typo tolerance finds a value that is missing from the index. The task is therefore not a search task but a data task, and it is solved in the product data flow from PIM and ERP before the search engine is involved at all.

  • Separators swallowed. The number reads K-88 4711/2 in the ERP and K884711-2 in the catalogue. Without normalisation to a shared search form, the query matches nothing.
  • Only one target field. The shop holds one value per article, while the customer keeps one number per plant. From the second value onwards the import overwrites the first.
  • Number missing from the index. The field exists in the database but is not read by the search index because it was added after the first build.
  • Wrong weighting. The foreign number matches but lands behind twenty full-text hits from description texts and goes unseen.
  • No return path. Search finds the article, the cart then shows the supplier number again, and the buyer loses the mapping exactly where it is needed.
  • Visible to everyone. The foreign number ends up in the public product description and thus appears in other people's search results.

The data model inside the shop

What holds up is a dedicated table with five or six columns: customer number, supplier article number, foreign number, type, validity period and source. The type separates central purchasing, plant and maintenance. The validity allows a switch on a given date without deleting the old row, which matters for questions about closed orders. And the source records whether the row came from the ERP, from a catalogue import or from order history. Companies that keep further per-article details alongside the numbers, such as the import data for the CBAM deadline in 2026, apply the same separation between article master and mapping. That last column looks redundant until the first conflict occurs: it then decides which value wins, without anyone having to guess.

For search, an additional index segment is built from this table, filtered per customer. Technically that is either a multi-value field on the article document with an attached access check, or a dedicated index type that returns hits for the signed-in customer only. Both routes work; what matters is that the filtering sits in the query and not in the display. Post-filtering in the frontend reveals the unfiltered hit count, and the hit count reveals which number ranges other customers keep. With large catalogues this logic belongs in a middleware between ERP and shop so that the shop only ever sees the finished index and the computing load stays out of the ordering process.

customer-part-numbers-mapping.json
{
  "customer_no": "10042",
  "supplier_sku": "40-2517-KH25",
  "cross_references": [
    { "type": "central_purchasing", "value": "K-88 4711/2", "valid_from": "2026-01-01", "source": "erp" },
    { "type": "plant_north",        "value": "4711-N",      "valid_from": "2026-04-01", "source": "bmecat" }
  ],
  "search_tokens": ["k884711 2", "k 88 4711 2", "4711n"],
  "visibility": "customer_only"
}
Terminal
$ curl -s '/api/search?q=K-88+4711%2F2' -H 'X-Customer: 10042' | jq '.hits[0]'
{ "sku": "40-2517-KH25", "matched_on": "cross_reference.central_purchasing", "display_no": "K-88 4711/2" }
$ curl -s '/api/search?q=K-88+4711%2F2' -H 'X-Customer: 10099' | jq '.total'
0

Visibility, permissions and tenants

A customer part number is a statement about the customer, not about the article. It reveals how a company structures its range, which plants it supplies and occasionally which project a part is ordered for. It therefore belongs behind the login and inside the same permission scope as prices and assortments. Anyone who has already solved customer assortment release cleanly attaches the numbers to that same check instead of placing a second mechanism next to it that can later drift on its own.

Three edge cases are worth deciding up front. First, the group with several purchasing organisations: the same number can stand for two different articles in two plants, in which case the type has to carry the resolution and the result list has to show both candidates. Second, the sales agent who orders on behalf of several customers and switches context per session; here visibility hangs on the selected customer, not on the user account. Third, the guest without a login, who must not see foreign numbers at all because there is no customer to attribute them to. All three are permission questions rather than search questions, and they are answered in the query layer.

Situation in purchasingWithout customer part numberWith customer part number
Searching for one's own numberZero results, fallback to phone or emailA hit on the matching article
Uploading an order list from the ERPLine-by-line translation by handMapping via the foreign number during import
Checking the order confirmationReconciliation via descriptions and quantitiesReconciliation via one's own number per line
Booking goods receiptLooking it up in one's own article masterThe number is printed on the delivery note
Posting the invoiceAssigning the lines by handElement BT-156 carries the buyer's number
Supplier replaces the articleThe customer notices at goods receiptThe successor article hangs on the same foreign number

Where the numbers come from

Four routes are common in practice, and most companies need more than one. The first is the customer master in the ERP: many systems keep the foreign number as a field on the customer-article relation because it is maintained there anyway for order entry over the phone. The second is catalogue exchange: the customer returns their numbers inside the catalogue file and the supplier imports them. The third is order history: from two years of orders one can derive under which number a customer has kept an article, although that derivation needs confirmation. The fourth is self-service in the customer account, where buyers store their numbers themselves or upload them as a file.

  1. Survey the stock. Count how many customers keep their own numbers at all and how many articles per customer are affected. The build follows from that figure, not the other way round.
  2. Define the leading source. Pick one source per customer group and record the precedence in writing before the first import runs.
  3. Define normalisation. Bring separators, spaces and letter case into one search form and keep the raw form alongside it.
  4. Extend the index. Add the foreign numbers as a dedicated field to the search index and weight them above description texts.
  5. Build the return path. Pass the number through cart, order confirmation, delivery note and invoice, otherwise the benefit ends at the result list.
  6. Hand over maintenance. Enable self-service in the customer account and log every change so the mapping stays traceable.

Catalogue exchange is the fastest lever

Companies that already exchange catalogues via BMEcat have the return channel for foreign numbers in place. The customer fills the BUYER_PID element inside the PRODUCT_DETAILS of the file they send back, and the import writes the rows into the mapping table. For companies additionally connected through procurement portals via OCI, the number even travels back inside the cart return message.

From search to the invoice

The benefit does not end at the result list. The foreign number has to travel through the entire document chain, because the buyer wants to find it again on every document. The European electronic invoice provides two separate, standardised elements for exactly that: BT-155 (OpenPeppol) carries the identifier assigned by the seller, BT-156 (OpenPeppol) the one assigned by the buyer. Both sit in the invoice line and may occur once per line. Keeping the number in the shop but not passing it into outbound invoicing gives away precisely the place where it saves the most manual effort. The same pass-through applies to every document field: how vouchers and item lines are handed over to accounting follows the same mapping logic.

The time pressure comes from the switch to structured invoices. Paper and simple image files are a transitional arrangement in business-to-business trade, and the transition period is staggered: for supplies carried out before 1 January 2027, every company may keep invoicing on paper until 31 December 2026 (Bundesministerium der Justiz) or, with the recipient’s consent, in an electronic format that does not meet the standard; no turnover threshold applies. Only for supplies carried out after 31 December 2026 is that route tied to a total turnover of no more than 800 000 euros (Bundesministerium der Justiz) in the preceding calendar year – and for invoices transmitted by electronic data interchange under Recommendation 94/820/EC, a separate exception without a turnover threshold applies for the same period (Bundesministerium der Justiz). Issuing is time-bound as well: the invoice has to be issued within six months (Bundesministerium der Justiz) of the service being performed. Companies planning the switch anyway should anchor the foreign number in the same step; how that interacts with the e-invoicing mandate is a construction stage of its own.

Numbers arriving by machine are the norm in business-to-business trade rather than the exception. Almost half of industrial companies with electronic sales receive orders via EDI: 46.04% (Eurostat) in reference year 2024, surveyed among enterprises with ten or more employees. In wholesale and retail, 10.51% (Eurostat) of total turnover comes from EDI sales. Across all sectors more turnover even arrives through EDI than through websites and apps: 11.07% (Eurostat) against 8.39%. The shop therefore stands next to a lane that has known the customer's number for years, and it should reuse the same mapping logic instead of building a second one beside it. How tightly the two routes are coupled depends on the EDI integration via EDIFACT.

What purchasing gains

The online channel in business-to-business trade is large enough for the effort to pay off. Wholesalers and manufacturers in Germany turned over 476 billion euros (ECC KÖLN) through online shops and marketplaces, measured for reference year 2023; total B2B e-commerce including EDI reached 1.4 trillion euros (ECC KÖLN) in the same period. Nearly eight in ten companies run a digital customer portal: 78% (ECC KÖLN) of the manufacturers and wholesalers surveyed. That is exactly where a buyer expects to find their own numbers again, and exactly where it is decided whether they use the channel a second time.

The demand side confirms the picture. In a survey of 308 buyers from industrial companies, 79% (ECC KÖLN) rated a customer portal as particularly relevant, with 78% on the vendor side. 84% (ECC KÖLN) of the industrial companies surveyed consider it possible to digitalise the entire day-to-day business in purchasing, and around 80% (ECC KÖLN) of the manufacturing companies surveyed expect German industry to buy more through online channels in the near future. Number maintenance is no side issue in that picture; it is the precondition for a purchase requisition from the ERP landing in the cart without an intermediate step.

Across Europe the share is shifting slowly but steadily as well: the proportion of enterprises with electronic sales rose from 18.93% in 2014 to 23.59% (Eurostat) in 2024. The business channel is no sideshow in that figure, quite the opposite: 4.34% (Eurostat) of total turnover comes from web sales to enterprises and public authorities, against 4.04% from sales to private consumers. Anyone serving prices, assortments and numbers per customer is addressing the larger of the two web channels; the matching price synchronisation in B2B follows the same tenant logic as number maintenance.

What machines see of the search

A side aspect with consequences: a shop's internal search is mostly invisible to machines. Only 28% (Web Almanac) of the home pages examined describe their own search function in a machine-readable way, measured in the July 2025 crawl across more than 16 million websites. Structured data of any kind is served by 50% (Web Almanac) of home pages. For customer part numbers this is explicitly not an invitation to publish: foreign numbers belong behind the login. Machine-readable description concerns public search and public product identifiers, not the customer-bound ones. Drawing that line cleanly is part of any interface development that keeps both inside one system.

In practice that means the public product page carries manufacturer and EAN numbers, the customer-bound view additionally shows the signed-in customer's own number, and the delivery path for search engines does not see the second layer. This can be verified with a query that runs against the search endpoint without a login and whose hit count has to stay at zero. That check belongs in acceptance testing rather than in hope, because the fault is barely visible from outside: it surfaces only when a customer finds their own number in a competitor's index.

A sequence for the rollout

The order matters more than the choice of tools. Starting with the search engine means building a weighting for data that does not exist yet; starting with the document chain means passing through fields that nobody fills. The sensible route runs from the mapping table via the index to the display, and only then into the documents. The following list works as an acceptance grid for the first build stage and can be walked through in one session with purchasing, inside sales and IT.

  • Mapping table with customer, article, number, type, validity and source created
  • Repeatability per customer possible, precedence of sources recorded in writing
  • Normalised search form stored alongside the raw form and weighted above description texts
  • Result list shows the customer's number next to the supplier article number
  • Permission check sits in the query, not in the display
  • The number travels through cart, order confirmation, delivery note and invoice
  • Self-service in the customer account enabled with a change log
  • Bulk upload of order lists recognises foreign numbers without prior mapping
  • A query without a login returns zero hits on a known foreign number

Version 1.0 of the standard named "BMEcat" was adopted in November 1999 in Frankfurt.

BME e.V., BMEcat – origins and objectives

The effort for the first build stage stays manageable when the foreign numbers are already maintained in the ERP: it then comes down to one table, one import run, one index field and four document templates. It becomes more demanding when the numbers have to be collected first; order history serves well as a starting stock that the customer confirms in the portal. Which of the two starting positions applies is answered by a look into the customer-article table of the ERP – and that look stands at the beginning of every plan we set up in our services for wholesalers and manufacturers.

Sources and studies

This article is based on data and rule sets from BME e.V. (BMEcat 2005.2), OpenPeppol (Peppol BIS Billing 3.0), the German VAT Act as amended in September 2026 (Bundesministerium der Justiz), Eurostat (survey on ICT usage in enterprises, reference year 2024), the Baymard Institute (e-commerce search benchmark), ECC KÖLN (B2B market monitor and study on industrial procurement) and the Web Almanac 2025. All figures quoted refer to the state of the respective publication.

Related Articles

Law & compliance

EUDR from December 2026: due diligence data from ERP

From 30 December 2026 every consignment needs a due diligence statement. Which fields the ERP has to carry and how the reference number reaches customs.

14 min read
ERP & merchandise management

Mapping ERP product variants cleanly in the shop

Feature axes, the variant matrix and article number logic: how colour, size and version in the ERP become a solid variant structure in the shop, with GS1 rules.

13 min read
ERP & merchandise management

Units of Measure and Pack Sizes from ERP to Your Shop

Separate base, stock, selling and purchase units, pull conversion factors from the ERP, and map stock, minimum quantities and unit prices correctly.

13 min read