Shopify as a Channel
Summary
Shopify connects to Flxpoint via OAuth only — no API keys or tokens — and supports Import Listings, Sync & Link Listings, Publish Listings, Get Orders, and Sync Orders. Always connect with your .myshopify.com URL (not your custom domain) and set a valid Location ID, which Sync & Link, Publish, and Sync Orders all require.
In Sales Channels, click +, choose Shopify, name the channel and select the processes you need. On Connect to Your Shopify Store, enter your .myshopify.com Store URL and click Continue / Authorize to approve the app on Shopify — you return to Flxpoint marked Connected.
.myshopify.com store URL (e.g. https://your-store-name.myshopify.com) — not your custom domain. This is where the OAuth flow sends you to approve the app.Connect with your .myshopify.com URL — not your custom domain
Shopify OAuth requires the .myshopify.com subdomain (e.g. https://your-store-name.myshopify.com). Entering your branded/custom domain makes authentication fail. Find it in Shopify Admin → Settings → Domains.
Location ID is required — keep it current or updates fail silently
Sync & Link Listings, Publish Listings and Sync Orders all require a valid Location ID. If you add or change a location in Shopify, update the Location ID in every Flxpoint integration that uses it — otherwise orders stop importing and quantity updates post to the wrong warehouse, with no error shown.
Publish Listings overwrites Shopify content
Running Publish on a linked listing overwrites whatever is on Shopify — including edits made directly on the storefront. Set Title to Don't Map on update-only templates to preserve Shopify-side title edits. Sync & Link Listings only touches price and quantity and never changes content.
Shopify enforces hard variant limits
Maximum 3 option types and 100 variants per product. Exceeding either causes variant creation to fail on Publish with no partial save. Restructure products that exceed these limits before publishing.
| Shopify Field | Maps To – Notes |
|---|---|
| externalListingId (Parent/Variant) | → externalListingId. Shopify's internal ID; identifies the parent listing and each variant. |
| SKU (Handle) | → parent SKU (the Shopify product handle). |
| Variant SKU | → SKU. Your unique per-variant identifier and a good choice for Master SKU. Variants without a SKU are skipped on import. |
| UPC (Barcode) | → UPC. Also usable as the Master SKU. |
| Title | → Title. Parent and variant names (e.g. Blue T-Shirt – Medium). |
| Description | → Description. |
| Manufacturer | → Manufacturer (brand). |
| Images | → Images. Product and variant images. |
| Price / MSRP / SalePrice | → Price / MSRP / SalePrice. |
| Quantity | → Quantity. Available stock per variant. |
| Options | → Options (e.g. Medium, Blue). |
| Weight / Unit | → Weight / Weight Unit. |
| Attributes (Tags) | → Attributes (Shopify tags). |
| Category 1/2/3 (Collections) | → Categories 1–3. |
| customField / customFields (Metafields) | → customField / customFields. Product and variant metafields. |
Import options (Product & Listing Management)
This required setting controls what each run is allowed to create and update. All four options are available on Shopify.
| Option | What it does | When to use it |
|---|---|---|
| Change feed (recommended) | Creates new products and listings and updates existing ones. Each run only fetches what changed on Shopify since the last successful run, so runs stay fast. | Your everyday default. |
| New products and listings | Creates new products and new listings only. Existing Flxpoint records are left untouched. | When you have curated data in Flxpoint that Shopify should not overwrite. |
| New listings | Creates new listings only. No products are created in your catalog, and existing records are not updated. | When your catalog is built from your sources and Shopify should only contribute listings. |
| Catalog refresh (not recommended) | Creates new products and listings and updates all existing ones, re-reading your entire Shopify catalog. | One-off recovery after a bulk edit on the Shopify side. Expect a long-running job. |
| Flxpoint Field | Shopify Field – Notes |
|---|---|
| Listing Variant → Quantity | → Quantity (required). Inventory updates post to the selected Location ID. |
| Listing Variant → List Price | → Price (recommended). Use rules for markups or rounding. |
| Listing Variant → SKU | → SKU (recommended). Primary match key for Linking Priority — start with SKU ↔ SKU. |
| Track Inventory | → Track Inventory (optional). Set Don't Map to preserve Shopify's existing tracking state; true/false to force it. Quantity still syncs regardless via the GraphQL API. |
| Flxpoint Field | Shopify Field – Notes |
|---|---|
| Listing Parent → Title | → Title. Required when creating new products; set Don't Map on update-only templates to preserve Shopify-side title edits. Enable Truncate Title to 255 for long titles. |
| Listing Parent → Description | → Description (text/HTML). |
| Listing Variant → SKU | → Variant SKU (required). Uniquely identifies the variant to create or update. |
| Listing Variant → List Price | → Variant Price. Primary sell price in Shopify. |
| Listing Variant → MSRP | → Compare at Price. Should be ≥ Price. |
| Listing Parent → Attributes | → Tags. Sent comma-separated. |
| Listing Parent → Category 1 | → Category. Use a Shopify taxonomy GID (e.g. gid://shopify/TaxonomyCategory/aa-1) when applicable. |
| Images (Parent/Variant) | → Images. Enable Advanced Image Duplication Logic to prevent repeated uploads. |
| Metafields | → customField / customFields. Select the Shopify metafield type (text, number, boolean, json, rich_text_field, date); Flxpoint validates the value before sending and shows Valid/Invalid per row. |
| Shopify Property | Maps To – Notes |
|---|---|
| order.name | → Order Reference Number. Looks like #1001 — matches the label seen in the Shopify UI. |
| order.order_number | → Order Reference Number. Numeric only (1001); ideal when downstream systems expect digits. |
| order.id (Shopify orderId) | → Order Reference Number. GID or numeric ID; best for cross-system joins and shipment lookups. |
| line_items.quantity | → line Quantity. Map from line_items.quantity; using fulfillable quantity can cause orders to import On Hold. In filters, select unfulfilled/partial and include the financial statuses you need (e.g. paid, authorized). |
| Flxpoint Field | Shopify Field – Notes |
|---|---|
| Shipment → Tracking Number | → Tracking Number (required). Primary identifier for the fulfillment. If unmapped, the sync fails with Missing required field 'Tracking Number' for fulfillment sync. |
| Shipment → Carrier | → Tracking Company (recommended). Carrier name (UPS, USPS, FedEx, etc.). |
| Shipment → Tracking URL | → Tracking URL (optional). Deep link to carrier tracking. |
| Notify Customer | → Notify Customer (optional). Set to true to email customers when the fulfillment posts. |
| Location (integration) | → Location ID (required via config). Fulfillments post to this Shopify location; mixed-location lines retry on the next run. |
Error in configuring integration). Open the channel's connection settings and reconnect via OAuth — this restores the token without affecting your existing integration configs. If all scheduled jobs stopped at the same time, this is the most likely cause.https://assets.flxpoint.com). If you see this error, contact Flxpoint support — a backend job (not available in the Flxpoint UI) is required to ensure all images are fetched.Don't Map in a template used to create new products, and Shopify requires a Title on every product-create request. Map Title for templates that create products. For update-only templates, leaving Title as Don't Map is correct and preserves Shopify-side edits. Re-run Publish after correcting the mapping.What is the difference between Publish Listings and Sync & Link Listings?▸
How does Flxpoint map product categories to Shopify?▸
gid://shopify/TaxonomyCategory/aa-1) in the Category mapping row.Why are Shopify orders showing as unpaid in Flxpoint?▸
authorized. Shopify marks orders as "authorized" between placement and payment capture — if your filter only includes paid, those orders arrive before payment is confirmed and show as unpaid. Add authorized to the financial-status filter in Get Orders if you process orders before payment capture completes.Can I connect multiple Shopify stores?▸
Shopify – Brand A – US vs Shopify – Brand B – EU). Each channel's integrations run completely independently.How do I map a Flxpoint field to a Shopify metafield?▸
namespace.key (e.g. custom.material) and select the correct metafield type (text, number, boolean, JSON, rich text, date). The definition must already exist in Shopify before the sync runs — create it at Shopify Admin → Settings → Custom Data. The template shows a Valid/Invalid status per metafield row to catch type mismatches before publishing.