CS-Cart & Multi-Vendor Add-On

Customer Number
(Kundennummer) Pro

CS-Cart gives you users. This add-on gives you customers with identity. Every real customer gets a permanent, human-readable Kundennummer — structured for invoicing, accounting, ERP sync, and cross-channel operations from day one.

✓ Permanent & Immutable ✓ Sequential or Prefixed ✓ Collision-Safe ✓ ERP & Accounting Ready ✓ Multi-Vendor Support
v1.0 CS-Cart 4.6+ · Ultimate · Multi-Vendor No core table modifications EXIM export included

01 Why you need Kundennummer — not just user_id

CS-Cart's user_id is a technical database key. It's sequential, auto-incremented, and meaningless to your accounting system, your ERP, your invoice template, and your customer on the phone. It changes meaning if you migrate platforms, merge databases, or archive old accounts.

A Kundennummer is a business identifier — stable, human-readable, and meaningful across every system and touchpoint in your company.

🔒
Permanent and immutable
Once assigned, a Kundennummer never changes. Not when the customer updates their profile. Not when they place order #500. Not when you archive or delete their account. The number is retired — never reused — providing a lifetime-persistent audit trail.
🧾
Invoice and accounting ready
A clean, structured Kundennummer belongs on every invoice, every export, and every reconciliation report. Your accountant, your ERP, and your auditor all understand K-100042 — none of them know what to do with user_id = 1847.
🔗
ERP and multi-system integration
The add-on's External ID fields let you store SAP customer IDs, DATEV client numbers, Stripe customer IDs, Amazon seller IDs, and more — all mapped against the same Kundennummer. Clean data mapping, zero ambiguity.
📊
Customer lifecycle tracking
The same Kundennummer follows a customer through registration, first order, return visit, loyalty tier change, and eventual account closure. Cross-channel and cross-system analysis becomes possible — and reliable.
Zero disruption to CS-Cart
The native user_id remains untouched as the technical database key. Kundennummer lives alongside it as the business-layer identifier. No core CS-Cart tables are modified. Clean install, clean uninstall.
🛡️
Collision-safe by design
The sequence counter uses atomic INSERT … ON DUPLICATE KEY UPDATE with InnoDB row-level locking — race-condition safe even on high-traffic stores. A UNIQUE index on the number column is the final backstop.

02 Number formats

Two formats are available. Choose before you start generating numbers — the format should stay consistent once customers have been assigned numbers.

Sequential
100001
100002, 100003 …
Pure sequential numbers starting from your configured starting number. Clean and compact. Zero-padding controls total digit width — set to 6 digits for 000001 style, or none for 100001.
Prefixed
K-100001
DE-2026-000123
PREFIX-SEQUENCE format. Set any prefix string — K, DE-2026, CUST, or your company abbreviation. The dash separator is automatic. Prefix and zero-padding width are fully configurable.
ℹ️
The starting number defaults to 100001. Set it higher if you want to leave room at the top for manual/legacy numbers, or if you want to avoid numbers that look like they belong to an immature system (e.g. starting at 1).

03 Dual ID architecture

The add-on introduces a clean separation between technical identity and business identity — two IDs that coexist without interfering with each other.

Technical Key
user_id = 1847
CS-Cart's internal database key. Auto-increment. Used by all CS-Cart queries, joins, and relationships. Never exposed to customers or external systems.
+
Business Identifier
K-100042
Your Kundennummer. Human-readable. Stable forever. On every invoice, export, and ERP record. What your team, accountants, and customers actually use.
Propertyuser_id (technical)Kundennummer (business)
PurposeDatabase foreign keyBusiness customer identifier
FormatInteger, auto-incrementSequential or prefixed string
ImmutableYesYes
Human-readableNoYes
On invoices / exportsTechnically possible, not meaningfulYes — designed for this
ERP / accounting awareNoYes
Touched by this add-onNever — untouchedCreated and managed

04 External IDs

Three optional external ID fields can be enabled independently. Each has a configurable label so you can name it to match your specific systems. External IDs are entered manually in the customer profile — or pushed via API-driven sync from your integration layer.

🏭 ERP ID
SAP: 0000123456
DATEV: 12345
Lexware: K-789
Store the customer's ID in your accounting or ERP system. Enables clean reconciliation between CS-Cart orders and your back-office financials — without manual cross-referencing.
💳 Payment Provider ID
Stripe: cus_Nx3K...
PayPal: PAYER-...
Mollie: cst_kEn...
Map CS-Cart customers to their payment provider profiles. Invaluable for refund resolution, fraud investigation, and subscription management across payment platforms.
🛒 Marketplace ID
Amazon: A2X...
eBay: seller_id
Kaufland: ext_id
Track customers who also purchase through marketplace channels. Enables cross-channel customer lifetime value analysis and prevents double-counting in reporting.
💡
External ID field labels are fully customizable in settings. Rename "ERP ID" to "DATEV-Nummer" or "Payment Provider ID" to "Stripe Customer ID" to match your team's terminology exactly.

05 Requirements

RequirementValueNotes
CS-Cart version4.6.1 – 4.99.xTested on CS-Cart 4.13 through 4.20.x
Supported editionsCS-Cart, Ultimate, Multi-VendorWorks on all three editions with edition-appropriate UI
DatabaseMySQL / MariaDB with InnoDBUses InnoDB row-locking for atomic counter increments. Creates two addon tables.
PHP7.1+Compatible with all CS-Cart 4.6+ supported PHP versions
Core file editsNoneHook-based only — no core CS-Cart tables or files are modified

06 Installation & first setup

1

Purchase and download

Get the Customer Number Pro Add-On from the CS-Cart Marketplace and download the .zip archive.

2

Install via Admin Panel

In your CS-Cart admin go to Add-ons → Manage Add-ons → +, select the .zip and click Upload & Install. Two database tables are created automatically: ?:jukello_customer_numbers and ?:jukello_customer_number_counters.

3

Configure your number format

Go to Add-ons → Manage Add-ons → Customer Number Pro → Settings. Choose Sequential or Prefixed, set your prefix, starting number, and zero-padding. This is the most important step — decide before any numbers are generated.

4

Enable External IDs (optional)

In Settings → External IDs section, enable the fields you need (ERP ID, Payment Provider ID, Marketplace ID) and set their labels to match your systems. Disabled fields show no UI and are not stored.

5

Backfill existing customers

Go to Customers → Customer Numbers → Dashboard and run the backfill tool. This assigns Kundennummern to all existing customers who don't have one yet. New customers are numbered automatically from this point.

On Multi-Vendor, the add-on auto-installs on all storefronts. Vendor panel users cannot see or manage Kundennummern — it's admin-only by design.

07 Settings reference

General

SettingDefaultDescription
Number formatSequentialSequential — pure numbers (100001, 100002). Prefixed — PREFIX-NUMBER (K-100001). Choose before generating any numbers.
PrefixKThe prefix used in Prefixed mode. Can be any string: K, CUST, DE-2026. A dash separator is added automatically between prefix and number.
Starting number100001The first number in the sequence. The counter seeds itself to start_number − 1 on first use, so the first generated number equals exactly this value.
Zero padding (digits)6 digitsTotal digit width of the number part: None (100001), 4 (0001), 6 (000001), 8 (00000001). Applied before the prefix in Prefixed mode.
Assign onRegistrationCustomer registration — number assigned immediately when a customer account is created. First successful order — number assigned when the customer's first order is placed.

External IDs

SettingDefaultDescription
Show ERP ID fieldNoEnables the ERP ID field on customer profiles. When disabled, the field is completely hidden and no data is saved.
ERP ID field labelERP IDCustom label for the ERP ID field. Rename to match your system: "DATEV-Nummer", "SAP-Kundennummer", "Lexware ID".
Show Payment Provider IDNoEnables the payment provider ID field. Useful for storing Stripe cus_ IDs, PayPal payer IDs, Mollie customer IDs.
Payment ID field labelPayment Provider IDRename to "Stripe Customer ID", "PayPal Payer ID", or your provider's terminology.
Show Marketplace IDNoEnables the marketplace ID field for tracking cross-channel customer identifiers.
Marketplace ID field labelMarketplace IDRename to "Amazon Seller ID", "Kaufland ID", or whichever marketplace you use.

Display

SettingDefaultDescription
Show Kundennummer in customer listYesAdds a Kundennummer column to the admin customer list (Customers → Customers). Supports sorting and search/filter by Kundennummer. Disable to keep the column hidden.

08 Admin dashboard

Navigate to Customers → Customer Numbers to access the dedicated dashboard. It gives you a live operational view of your customer number system.

📊
KPI overview
Four live metrics: total numbers assigned, coverage percentage (assigned ÷ total active customers), customers without a number, and the last assigned number. Missing count turns red when above zero.
⚙️
Active format banner
Shows your current format configuration and a live preview of what the next generated number will look like — before any customer triggers it. Links directly to Settings.
🔄
Backfill tool
Assign numbers to existing customers who don't have one yet. Configurable batch size (default 50). Run multiple times until coverage reaches 100%. Results show assigned, skipped (already had number), and errors.
📥
CSV export
One-click download of all assigned Kundennummern with user_id, email, name, external IDs, and assignment date. UTF-8 BOM included for Excel compatibility. Sorted by user_id descending.
🔢
Sequence counter control
Shows the current counter value and the next number that will be generated. Allows resetting the counter to a specific value — with a confirmation warning about collision risk.
👤
Customer profile tab
A dedicated Kundennummer tab on every customer profile edit page. Shows the assigned number (or "not yet assigned" with an Assign now button), plus external ID fields if enabled.

09 Backfilling existing customers

When you install the add-on on a store with existing customers, none of them have a Kundennummer yet. The backfill tool handles this cleanly without disrupting your store.

1

Configure your format first

Set your number format, prefix, starting number, and zero-padding in Settings before running backfill. All numbers generated during backfill will use these settings — they cannot be changed retroactively.

2

Open the dashboard

Go to Customers → Customer Numbers. The KPI row shows how many customers are missing a number. The orange alert banner links directly to the backfill section.

3

Set batch size and run

Enter a batch size (default 50, max 500) and click Run backfill. Each run processes that many customers and redirects back with a result notice showing assigned / skipped / errors. Repeat until the missing count reaches 0.

4

Verify coverage

Coverage percentage in the KPI row reaches 100% when all active customers have a number. The orange alert banner disappears. New customers are numbered automatically going forward — no further action needed.

⚠️
Backfill assigns numbers in ascending user_id order — oldest customers first. If you need a specific ordering (e.g. by registration date or total spend), export your customer list first and use the manual Assign now button on individual profiles in the desired order.

10 CSV & EXIM export

Kundennummern are available in two export channels — a standalone CSV from the dashboard, and CS-Cart's native EXIM system for users.

Export methodAccessColumns included
Dashboard CSVCustomers → Customer Numbers → Export CSVUser ID, Kundennummer, ERP ID, Payment Provider ID, Marketplace ID, Assigned Date, Email, First Name, Last Name, Status
CS-Cart EXIMAdministration → Export Data → UsersAdds "Kundennummer" column to the standard CS-Cart user export. Appears alongside all native CS-Cart user fields.
ℹ️
The Dashboard CSV includes a UTF-8 BOM at the start of the file so Excel opens it without character encoding issues — no manual import dialog required.

11 Use cases

Connecting CS-Cart to DATEV or Lexware

Enable the ERP ID field and label it "DATEV-Mandantennummer". When a customer is onboarded in DATEV, enter their DATEV client number in the CS-Cart customer profile. Your Kundennummer becomes the stable reference ID for reconciling CS-Cart orders against DATEV invoices — eliminating the manual lookup step that currently costs your accounting team hours per month.

Stripe customer mapping

Enable the Payment Provider ID field and label it "Stripe Customer ID". After creating a Stripe customer object for a CS-Cart customer, store the cus_ ID in the field. When a payment dispute or refund request comes in via Stripe, you can find the CS-Cart customer instantly by Stripe ID — without cross-referencing by email or name.

Assigning on first order instead of registration

Set Assign on to "First successful order" in Settings. This reserves Kundennummern for customers who have actually made a purchase — avoiding numbers being assigned to accounts created speculatively or abandoned at registration. Useful for stores where registration is required to browse but purchase intent varies.

Migrating an existing store

Install the add-on. Configure your format to match your existing Kundennummer scheme if you have one from a previous system (e.g. set prefix to K, start number to your current highest + 1). Run backfill to assign numbers to all existing customers in ascending user_id order. For the small number of customers who need specific legacy numbers, use the manual Assign now button after using the counter reset tool to seed the correct value first.

B2B wholesale stores with account managers

The Kundennummer appears on the customer profile page and in the customer list column. Your account manager can look up a customer by Kundennummer instantly using the customer list search — and reference it in every email, quote, and invoice without ambiguity. External IDs let you additionally store the customer's own reference number (their internal ID for your company) in the Marketplace ID field.

12 FAQ

Can a Kundennummer change after it's assigned?
No — and that's the point. Kundennummern are immutable by design. Once assigned to a customer, the number never changes — not when their profile is updated, not when they place additional orders, not when their account is deleted. The number is retired permanently — never reused — providing a lifetime-persistent, audit-safe identifier.
What number formats are available?
Two formats: Sequential (100001, 100002, …) and Prefixed (K-100001, DE-2026-000123, …). You set the prefix, starting number, and zero-padding width (none, 4, 6, or 8 digits). Decide on format before generating any numbers — changing format mid-operation creates inconsistent identifiers.
What are External IDs and when should I use them?
External IDs are optional fields (ERP ID, Payment Provider ID, Marketplace ID) for storing identifiers from other systems against a CS-Cart customer record. They are entered manually by an admin or pushed via API integration. Examples: SAP customer number, DATEV client ID, Stripe cus_ ID, Amazon seller ID. Enable only the fields you actually use — disabled fields show no UI and store no data.
Does this work on existing stores with thousands of customers?
Yes. The backfill tool assigns Kundennummern to all existing customers who don't have one yet. It runs in configurable batches (default 50 per run, max 500) to avoid server timeouts. Run it multiple times — it skips already-assigned customers automatically — until the dashboard shows 100% coverage. New customers are numbered automatically from that point.
Can two customers accidentally get the same number?
No. The sequence counter uses atomic INSERT … ON DUPLICATE KEY UPDATE with InnoDB row-level locking — safe even under concurrent load. A UNIQUE index on the kunden_nr column is the final backstop. The CollisionGuard class retries up to 10 times before throwing an error (which in sequential/prefixed mode should never happen unless the counter table is manually corrupted).
Does the add-on work with CS-Cart Multi-Vendor?
Yes. The add-on is fully compatible with Multi-Vendor. The Kundennummer tab and customer list column appear only in the root admin panel — vendor panel users cannot see or manage Kundennummern. This is by design: customer identification is a platform-level concern, not a per-vendor one.
Does the add-on appear in CS-Cart's EXIM (export/import) system?
Yes. The add-on includes a users EXIM schema that adds a "Kundennummer" column to CS-Cart's native user export. When you export users via Administration → Export Data → Users, Kundennummer appears alongside all standard CS-Cart user fields.
Does the add-on modify CS-Cart core tables?
No. The add-on creates its own two tables (?:jukello_customer_numbers and ?:jukello_customer_number_counters) and uses CS-Cart's native hook system exclusively. No core CS-Cart tables or files are modified. Uninstalling the add-on drops both tables cleanly — or you can comment out the uninstall query to preserve data for archival.
Can I reset the counter and start from a different number?
Yes — the dashboard counter section allows resetting the sequence to any value. Use with caution: setting the counter below the current highest assigned number risks generating duplicates for the numbers between the reset point and the current maximum. The reset form includes a confirmation step and a warning message. It's primarily useful for initial setup or post-migration adjustment.