Hi everyone,
I’m new to the forum, so please be gentle ![]()
Also, apologies in advance if this ends up under the wrong topic.
My team and I are discussing how to implement a customer favorite list feature for a custom app, and we’re split on whether the data should live inside Shopify metafields/metaobjects or in an external database.
Personally, I lean toward using an external database—but I’m open to being proven wrong.
The feature will be used across both B2B and B2C stores, so flexibility and scalability matter.
Option 1: Shopify Metafields / Metaobjects
Proposed structure
- Create a metaobject definition:
custom_favorite_lists_customer
→ Contains multiple favorite lists for a customer. - Create a metaobject definition:
custom_favorite_list_customer_ref
→ Unsure whether the value type should be string/text or product reference list. - Create a customer metafield:
custom_favorite_list_customer_ref - Link metaobject → customer metafield
- Store product references inside the metafield
- Fetch everything via GraphQL
Pros
- Visible and manageable directly in the Shopify Admin UI
(other staff can easily inspect or edit customer favorite lists) - No external infrastructure required
Cons
- Metaobject limits vary by Shopify plan
- Metafield value size limit (16 KB) may become a bottleneck
- External systems must authenticate with Shopify to access the data
- Potential risk of data conflicts if multiple sessions update metafields simultaneously
(e.g., customers logged in on multiple devices)
Concerns / Open Questions
- Could frequent updates corrupt metafield/metaobject data?
- Will Shopify introduce stricter limits in the future?
- Is this approach too fragile for large or complex favorite lists?
Option 2: External Database (e.g., Supabase)
Proposed structure
- Create tables such as
customer_favorite_list,favorite_list_products, etc. - Fetch favorite lists via GraphQL using customer ID as reference
Pros
- Not tied to Shopify’s metafield/metaobject limits
- Can be reused across multiple platforms or clients
- Easier to enrich data (translations, AI‑generated content, mixed content types)
- More control over schema, indexing, performance, and concurrency
Cons
- Must handle product cleanup when items are deleted from Shopify
- Requires authentication/authorization layer
- Slightly more infrastructure and maintenance overhead
Discussion
This approach gives us more flexibility and is more aligned with standard industry practices.
Experienced developers may find it easier to maintain and extend.
What I’m Looking For
I know there’s no single “correct” answer—both approaches have trade‑offs.
I’d love to hear how others have solved similar problems:
- Would you store customer favorite lists inside Shopify metafields/metaobjects?
- Or would you offload everything to an external database?
- Any pitfalls or best practices you’ve learned along the way?
Thanks in advance for your insights!