Hello everyone! I’m a beginner with n8n and trying to sync my product catalog between Airtable and Shopify. Both platforms already contain my complete product inventory.
My current workflow uses an Airtable webhook to detect changes, then verifies if the product exists in Shopify using the product ID. Based on this check, it either updates an existing item or creates a new one.
Currently I’m manually connecting each field in both the update and create operations. This seems inefficient.
I have three main questions:
Can I automatically identify which specific fields have changed between the Airtable record and Shopify product, then only update those modified fields?
Is there a way to combine the update/create logic into one operation instead of separate nodes?
Should I stick with Airtable webhooks or would a scheduled workflow be more reliable to ensure no updates are missed?
Any advice from experienced users would be greatly appreciated!
Been running similar setups for years and hit these exact same issues.
For question 1 - tracking field changes is tricky but doable. I pull the current Shopify product data first, then use a Code node to compare it against the incoming Airtable data. JSON.stringify() both objects and compare them field by field. Only pass the changed fields to your update operation.
Question 2 - you can merge update/create logic using an IF node that checks if the product exists. Route to update if it exists, create if not. But honestly, keeping them separate is cleaner for debugging. I learned this the hard way when a combined node failed and I couldn’t tell which operation broke.
Question 3 - depends on your volume. Webhooks are great for real-time updates but can miss events if your endpoint goes down. I actually run both. Webhooks for immediate updates, then a scheduled workflow every night to catch anything that slipped through.
One thing I’d add - always include error handling. Shopify rate limits will bite you eventually. Use a Wait node between operations and retry logic for failed requests.
Also consider using Shopify’s bulk operations API if you’re syncing large catalogs. Way more efficient than individual product updates.
I’ve been dealing with similar sync issues for a year now. Here’s what actually works: For detecting field changes, skip the extra Airtable fields. I use a mapping object that stores the last synced values right in n8n’s workflow data. No extra API calls to Shopify, no clutter in Airtable. Don’t merge your update/create operations - the efficiency gains aren’t worth the headache. Keep them separate but batch your operations instead. I process multiple changes in one workflow run rather than firing individual workflows for each webhook. Webhook failures mostly happen during Shopify maintenance or Airtable hiccups. Skip the duplicate scheduled workflows and build a simple retry mechanism with exponential backoff. Failed webhooks get queued and retry automatically. One thing nobody’s mentioned - watch your inventory tracking. Shopify’s inventory system will conflict with Airtable updates if you don’t nail down which system owns stock levels as the source of truth.
I’ve been doing Airtable-Shopify sync for two years and learned some painful lessons. For field change detection, I store a hash of each product’s data in a separate Airtable field. When the webhook fires, I generate a new hash and compare it to the stored one. If they match, I skip the sync completely. Saves API calls and prevents pointless Shopify updates. I tried the merged approach first but it was a nightmare. Separate nodes give you way better visibility when things break and make troubleshooting actually possible. On webhooks vs scheduled - webhook reliability depends on your server setup. n8n cloud works great, but self-hosting can miss events due to network issues. I use a hybrid approach now: webhooks for immediate updates plus a ‘last_synced’ timestamp in Airtable for periodic catch-up syncs. This catches anything the webhooks missed. Pro tip - always validate your data before hitting Shopify. I once pushed empty product titles and it was a complete disaster.