How to Scale Product Personalization Across Shopify, Amazon & EDI Channels
 Fulfil
                    
                    Fulfil
                 
    Personalization has evolved from a nice-to-have feature to a business requirement for modern e-commerce brands. From engraved jewelry to custom gift messages, monogrammed apparel to build-your-own product bundles, customers increasingly expect the ability to personalize their purchases. However, managing personalization at scale presents significant operational challenges: how do you capture customization details from multiple sales channels, route them to the right fulfillment locations, communicate specifications to manufacturing equipment, and maintain compliance with platform-specific requirements?
Fulfil's product options provide a centralized framework for managing personalization across your entire operation. This article explains how Fulfil enables you to capture, route, and fulfill personalized orders efficiently across multiple sales channels, EDI trading partners, 3PL providers, and manufacturing processes.
What are Product Options? The Foundation for Personalization
At the core of Fulfil's personalization capabilities are product options. Product options enable you to capture customization details on individual order lines without requiring the creation of separate SKUs and BOMs for every possible variant combination.
Why Product Options Instead of SKUs
Before product options, brands managing personalization faced a choice: either create a unique SKU for every possible customization (engraved necklace with "Happy Anniversary" becomes SKU-001, with "I Love You" becomes SKU-002, and so on), or manually track customization details in order notes. The first approach creates unmanageable SKU proliferation. The second approach disconnects customization data from the operational systems that need it.
Product options solve this problem by treating customization as structured data attached to the order line. A single base SKU (like "Silver Necklace") can accept various customization options (engraving text, charm selections, delivery dates) captured as structured attributes on each order line.
Option Types and Data Structures
Fulfil supports multiple option types to accommodate different personalization scenarios:
Each option can be configured with validation rules:
- Required: Must be provided for the order to process
- Min/Max: Numerical boundaries for integer, float, or numeric types
- Repeatable: Allow multiple instances of the same option (e.g., multiple charms)
- Chargeable: Add upcharge based on the option selected
Option Sets for Streamlined Order Entry
Option sets group related options together and can be associated with products in your catalog. When an order line contains a product with an associated option set, Fulfil automatically prompts for those specific options during order creation. This standardizes data collection and ensures consistency across manual orders, channel imports, and API integrations.
For example, a "Personalized Bracelet" product might be associated with an option set containing:
- engraving_text (String, optional)
- charm (Product, repeatable)
- gift_message (Text, optional)
- requested_delivery_date (Date, optional)
Shopify Integration: Mapping Line Properties to Product Options
Shopify allows customers to add customizations through line item properties—arbitrary key-value pairs attached to cart items. These order line properties flow through to the order data and can be accessed during order processing.
How Shopify Line Item Properties Work
When building a product page in Shopify's theme code (using Liquid), you add form fields with names following the pattern properties[key_name]. For example:
<form action="/cart/add" method="post">
<input type="hidden" name="id" value="{% raw %}{{ product.selected_or_first_available_variant.id }}{% endraw %}" />
<!-- Engraving text field -->
<label for="engraving_text">Engraving (optional):</label>
<input type="text" name="properties[engraving_text]" id="engraving_text" />
<!-- Multiple charms as checkboxes -->
<label>Choose your charms:</label>
{% raw %}{% for charm_option in charm_options %}
{% if charm_option.inventory_quantity > 0 %}
<input type="checkbox" name="properties[charm][]" value="{{ charm_option.sku }}" />
{{ charm_option.name }}
{% endif %}
{% endfor %}{% endraw %}
<!-- Delivery date -->
<label for="requested_delivery_date">Requested Delivery Date:</label>
<input type="date" name="properties[requested_delivery_date]" id="requested_delivery_date" />
<button type="submit">Add to cart</button>
</form>
When the customer adds this item to their cart, Shopify stores these properties and includes them in the order data.
Mapping Properties to Fulfil Using Fulfil Functions
A Fulfil function is a custom script (usually written in Python) that can be used to transform or manipulate data within Fulfil's platform. These functions are commonly used in:
- Order imports: To modify incoming data (e.g., transform fields, clean up values, apply business logic).
- Automations and workflows: To create custom behaviors during various lifecycle events (e.g., after a shipment is completed).
- Custom field calculations or validations: To dynamically compute values or enforce rules.
When Fulfil imports Shopify orders, it captures line item properties as metadata on each sale line. You can then use a Fulfil function to map these properties to Fulfil product options.
The most maintainable approach is to use matching codes: configure your Fulfil product option codes to match the Shopify property keys. For example, if Shopify uses properties[engraving_text], create a product option in Fulfil with code engraving_text.
Here's how a Fulfil function handles this transformation:
for order_line in order_data.get("sale_lines", []):
line_metadata = order_line.get("metadata") or {}
product_options = []
# Handle engraving text
engraving = line_metadata.get("engraving_text")
if engraving:
product_options.append({"code": "engraving_text", "value": engraving})
# Handle charms provided as an array
for key, value in line_metadata.items():
if key.startswith("charm"):
# For product-type options, include quantity
product_options.append({"code": "charm", "value": value, "quantity": 1})
# Attach product_options to the sale_line
if product_options:
order_line["product_options"] = product_options
Best Practices for Scalable Shopify Personalization
Use Arrays for Repeatable Options: Instead of properties[charm_1], properties[charm_2], etc., use properties[charm][], which allows unlimited selections without code changes.
Match Data Types: Ensure your Fulfil product option types match the data structure. Product SKUs should use product-type options, text should use string or text types, and dates should use date types.
Predefine Options in Fulfil: Create all product options in Fulfil before referencing them in your Shopify theme. This allows your Fulfil function to validate and map correctly.
Maintain Synchronization: When you add new personalization fields to your Shopify theme, update the corresponding Fulfil function mapping logic in Fulfil and document these changes for future reference.
Amazon Custom: Supporting Platform Requirements
Amazon Custom is Amazon's program for allowing sellers to offer personalized products. When sellers participate in Amazon Custom, they must fulfill orders themselves (FBM only—FBA is not available), and Amazon captures customization details from customers during checkout.
How Amazon Passes Customization Data
Amazon provides customization data through their order reports and API. When Fulfil imports Amazon orders, customization details are available in the order data and can be mapped to product options using the same Fulfil function approach used for Shopify.
Amazon Custom supports various customization types:
- Text inputs (for names, messages, monograms)
- Surface selections (which part of the product to customize)
- Image uploads (for custom designs)
- Predefined options (colors, styles, sizes)
Fulfil's Amazon Integration and Product Options
Fulfil's Amazon channel integration automatically imports orders with their customization details. By configuring product options in Fulfil and using a Fulfil function to map Amazon's customization data to those options, you maintain the same structured personalization approach across both Shopify and Amazon.
This is particularly important for brands selling on multiple channels: a "Personalized Leather Wallet" with engraving options on Shopify should have the same product option structure in Fulfil as the same product on Amazon Custom. This allows your warehouse, manufacturing, and fulfillment processes to handle personalization consistently regardless of the sales channel.
Compliance Considerations
Amazon Custom has specific requirements:
- All orders must be fulfilled by merchant (FBM)
- Products must be in new condition
- Sellers must be the sole seller of custom listings
- Customization details must be accurate and complete
Fulfil’s product options ensure customization data flows through your fulfillment process without manual intervention, reducing the risk of errors that could lead to Amazon Custom compliance issues.
See related: How Hoss Improved Their Amazon Seller Health with Fulfil’s Amazon Integration
EDI Trading Partners: Personalization in B2B Scenarios
While direct-to-consumer channels like Shopify and Amazon are common personalization use cases, B2B scenarios through EDI trading partners also require personalization support. Wholesale customers, corporate gifting programs, and retail partners are increasingly requesting customization capabilities for dropshipping, where orders are captured on the retailer's website and sent to merchants for fulfillment.
See related: How Nomadix Scaled B2B With Fulfil
How EDI Handles Personalization
EDI (Electronic Data Interchange) is the structured exchange of business documents between trading partners. The most common EDI document for orders is the 850 Purchase Order. Within the 850 document structure, personalization information can be included in several ways:
Product Item Description (PID) segments: Contain detailed product descriptions and specifications.
Reference Information (N9 loop): Includes reference identifiers with qualifiers indicating the type of information:
- PRN qualifier: Personalization information
- GFT qualifier: Gift message
- GEN qualifier: General notes
Item Description fields: Free-form text describing customization requirements.
Mapping EDI Personalization to Fulfil Product Options
When Fulfil receives EDI 850 documents, the system parses the document structure and maps the fields to Fulfil's order model. Personalization information from EDI segments can be mapped to product options using post-processing functions.
For example, an EDI 850 document might include:
N9*PRN*Engraving: "Happy Anniversary"~
N9*GFT*Gift wrap with red ribbon~
These reference information segments contain personalization details that can be extracted and mapped to corresponding product options on the order line in Fulfil:
- The PRN reference maps to an engraving_text product option
- The GFT reference maps to a gift_message product option
DSCO/Rithum Integration Considerations
DSCO (now part of Rithum) is a platform that facilitates B2B commerce between brands and retailers. Rithum supports EDI integration and also provides API-based data exchange. For brands using Rithum to connect with retail partners, like Target, Walmart, or specialty retailers, personalization data can flow through either EDI documents or Rithum's API.
When Fulfil integrates with Rithum:
- Orders from retail partners arrive via Rithum's platform
- Custom product attributes and personalization details are included in the order payload
- Fulfil's Rithum integration maps these attributes to product options
- The resulting order in Fulfil contains structured personalization data just like orders from direct channels
This enables brands to offer personalized products to wholesale customers without having to establish separate processes for each retailer. A corporate gifting program through a large retailer can request engraved products, and those engravings flow through with the same Fulfil product options as a direct consumer order on Shopify.
Personalization Next Steps
Personalization is no longer an edge case—it's a core requirement for modern e-commerce and wholesale operations. However, managing personalization across multiple sales channels, fulfillment providers, manufacturing processes, and business systems creates significant operational complexity.
As an eCommerce ERP, Fulfil provides a centralized system for capturing, routing, and fulfilling personalized orders at scale. By treating personalization as structured data attached to order lines, product options enable:
- Multi-channel consistency: Shopify, Amazon, EDI, and API orders all use the same option structure
- Manufacturing integration: Production equipment reads personalization details programmatically
- 3PL communication: Fulfillment partners receive structured customization data
- Scalable operations: Brands can process thousands of personalized orders daily without manual intervention
- Data visibility: Reporting and analytics on personalization performance
Whether you're processing 50 personalized orders per week or 50,000 per day, Fulfil's product options provide the foundation for scaling personalization without sacrificing operational efficiency.
 
                    
                    Fulfil
Fulfil is the AI-native ERP built for modern Shopify and DTC brands. No consultants. No middleware. No surprises. Connect your sales channels, warehouses, accounting, and fulfillment in one system. Set up in weeks, not months.