Integrations module

Connect your Shopify
shop to GSE-Web

Your catalogue and available stock go to the shop. Paid orders arrive in GSE-Web as confirmed outbound orders, with stock reserved.

Home / Documentation / Shopify connector

In brief

The Shopify connector links a Shopify shop to a GSE-Web warehouse. GSE-Web publishes the stock to a location of the shop, the shop sends its orders. It is set up by an administrator of the organisation, in the ADMIN › “Integrations” menu.

  • What goes to the shop: the pages of simple products, kits and products with variants (name, reference, price, barcode), if you ask for it, and the available stock of the published warehouse, placed in the Shopify location you choose.
  • What arrives in GSE-Web: each paid order (or each order with the payment statuses you choose) becomes a confirmed outbound order, with stock reserved; the buyer becomes an “Individual” customer. If you ask for it, the description and photos of linked products are also pulled from the shop.
  • When: stock goes to the shop a few seconds after each change in GSE-Web, and an order arrives at once by webhook. A full pass runs every 5 minutes and catches up anything missed.
  • What is never done: nothing is deleted in the shop, GSE-Web never writes the lines of an order and never issues a refund. It only fulfils or cancels the order, if you ask for it.
  • Switching off: pause, disconnect or close the module at any time, without losing anything; on resuming, orders placed in the meantime are caught up.
Before you start

Requirements

Check these points before opening the connector screen: the connection test checks them and states plainly what does not fit.

✓

The shop's myshopify.com domain

The connector plugs into the shop's admin domain, of the form ma-boutique.myshopify.com, never into its public address.

✓

An app in the Dev Dashboard

Created in the organisation that owns the shop, with these permissions: read_products, write_products, read_inventory, write_inventory, read_locations, read_orders, write_orders, write_merchant_managed_fulfillment_orders, read_publications, write_publications. Release a version, install the app on the shop, then note the client ID and the secret. A shop that still has a legacy custom app uses its Admin token (shpat_…) and its API secret.

✓

Protected customer data declared

Buyers' name, e-mail and address are Shopify “protected customer data”: declare their use in the Dev Dashboard. Without this, orders arrive without a buyer and become items to handle.

✓

The modules enabled for your organisation

“Integrations”, then “Shopify”. Ask KLS-Concept to enable them. Without “Integrations”, the menu entry does not appear; without “Shopify”, its card reads “Not available for your organisation”.

✓

An ADMIN account with two-factor authentication

Entering the shop's credentials is refused until two-factor authentication is turned on for your account, in “My information”.

✓

A real warehouse

Its available stock is published to the shop and orders become outbound orders there. An exercise warehouse is refused.

✓

The same currency and the same price mode

The shop's currency must be your organisation's, and “Published prices” (excluding or including tax) must match the shop's “Include sales tax in product price and shipping rate” setting (Settings › Taxes and duties).

Step-by-step setup

Six steps, in the order of the screen.

1

Open the connector screen

ADMIN menu › “Integrations”. The Shopify card is in the “E-commerce” category. Click “Set up” (the button becomes “Manage” once the shop is saved).

2

“Shop” card

Choose the “App type”: “Dev Dashboard app (client ID and secret)”, or “Legacy custom app (Admin token and API secret)”. Fill in the “Shop domain” (…myshopify.com), then the “App client ID” and the “App secret” (or the “Admin access token” and the secret), and choose the “Published warehouse”. The card lists the permissions to tick on the app.

The credentials are write-only: once saved, they are never shown again. The screen only shows a few characters so you can recognise them. To keep them, leave the fields empty; to replace them, enter the secret AND the client ID (or the token). With a Dev Dashboard app, GSE-Web obtains the access token itself, valid for 24 hours, and renews it.

3

“Settings” card

Each setting has a default value:

  • “Published prices”: “Excluding tax” by default, or “Including tax”.
  • “Create and update product pages in the shop”: unticked by default. Unticked, GSE-Web creates no page: it only links the products already in the shop with the same reference (SKU), regardless of upper or lower case.
  • “Publish available stock”: ticked by default. Unticked, a page created by GSE-Web does not have its stock tracked by Shopify.
  • “Receive orders”: ticked by default.
  • “Report deliveries and cancellations to the shop”: ticked by default. Order delivered: order fulfilled in the shop, with carrier and tracking number — Shopify notifies the customer with its shipping e-mail. Order cancelled in GSE-Web: order cancelled in the shop, without a refund.
  • “Imported payment statuses”: “Paid” by default. You can add “Payment pending”, “Payment authorised” and “Partially paid” (cash on delivery, bank transfer).
  • “Maximum age of a caught-up order (days)”: 30 by default, from 1 to 90. Without the read_all_orders permission, Shopify only returns orders from the last 60 days: catch-up does not go back further.
  • “Pull the description and photos from the shop”: unticked by default. The shop remains the owner of the description and photos, which GSE-Web never sends to it; ticked, they are copied onto the linked product. An empty description in the shop never erases the one in GSE-Web, and a photo added in GSE-Web is never removed.
4

Save

Click “Save”. “Test the connection” and “Activate” use the saved configuration: as long as a change is not saved, the screen says so and these two buttons wait.

5

Test the connection, then choose the location

“Test the connection” queries the shop and checks that the credentials really belong to this domain, that the app has all its permissions, and that the currency and the price mode match. It also loads the list of the shop's active locations: choose the “Shop location” that receives the stock, then “Save”. Even when refused, the test shows the missing permissions and the locations, so that you can correct them.

6

Activate

“Activate” runs the test again (a location is then required), then creates four webhook subscriptions in the shop: order created, updated, cancelled and deleted. The status becomes “Active — stock sent as soon as it changes, full sync every 5 minutes” (“Active — synced every 5 minutes” if stock is not published). Orders received before activation are not imported.

What is synchronised, and which side is authoritative

Each field has a single owner. In a shop order, GSE-Web only writes its fulfilment or its cancellation, never its lines.

📦 GSE-Web is authoritative

  • ✓Product name
  • ✓Reference (SKU in the shop)
  • ✓Sale price, excluding or including tax depending on the setting
  • ✓Barcode
  • ✓On sale or draft
  • ✓Stock, in the chosen location

🛒 The shop is authoritative

  • ✓Description (pulled into GSE-Web as an option)
  • ✓Photos (pulled into GSE-Web as an option)
  • ✓Collections and tags
  • ✓Taxes
  • ✓Orders
  • ✓Refunds

The rules

  • Simple products, kits and products with variants. A simple product is published as a Shopify product with a single variant. So is a kit, its stock being the number of kits that can be assembled from the components in the published warehouse. A product with variants is published as a product with options (three axes at most, a Shopify limit), with no price or stock of its own; each variant is one of its Shopify variants, with its reference, price and stock.
  • A product withdrawn from sale in GSE-Web becomes a draft in the shop; it is never deleted there. As Shopify has no status per variant, a variant withdrawn from sale is set to stock 0. Products created by GSE-Web are published to the online store; an existing page is never republished, to respect your choice if you remove it from a channel.
  • A product page changed in the shop on a field GSE-Web is authoritative for is rewritten at the product's next change in GSE-Web. Stock tracking of an existing variant, however, is never changed.
  • Published stock = available stock of the published warehouse (physical minus reserved), rounded down to the unit, never negative, placed in the chosen location — the shop's other locations are not touched. It goes to the shop a few seconds after each change: receipt, issue, transfer, stock count, reservation placed or released on an order. The full pass also reads it again every 5 minutes.
  • One order = one confirmed outbound order from the published warehouse, with “Reserve the products for this order.” ticked: the whole ordered quantity is reserved, even beyond the stock (the shortfall shows as “Awaiting receipt” on the order), and the stock published in the shop drops at once. The delivery address is copied. Never a partial order: if a line is a problem (unknown product, unknown variant, kit that cannot be published, unreadable buyer, other currency), no order is created and an item to handle explains why.
  • Never imported: test orders and orders whose payment status is unknown. An order already fulfilled in Shopify when it arrives — point-of-sale sale (Shopify POS), shipment made from the Shopify admin — does not give an outbound order: it would ship the goods a second time. An item to handle asks you to record its stock exit in GSE-Web.
  • One buyer = one “Individual” customer, found again by e-mail from one order to the next (code starting with WEB-). A business partner already in GSE-Web is not matched: an “Individual” customer is created.
  • Order cancelled in the shop (cancelled, deleted, refunded or payment voided): the outbound order is cancelled and its reservations released, unless someone is already handling it. In that case, an item to handle leaves the decision to the team. An order that Shopify no longer returns (over 60 days without read_all_orders) is never taken for a deleted order.
  • Order changed in the shop after import: the change is not carried over to the outbound order; an item to handle asks you to check it.
  • An order for a kit becomes an outbound order for its components (quantity × number of kits); the order's note names the kit. An order for a variant gives an order for the GSE-Web variant, as for any product.
  • Reporting deliveries and cancellations (setting ticked by default): an order delivered or closed in GSE-Web fulfils its shop order; if it left in a shipment, the carrier and tracking number are passed on, and Shopify notifies the customer with its shipping e-mail. An order cancelled in GSE-Web cancels its shop order and puts the stock back on sale, without a refund or an e-mail to the customer: the refund is made in Shopify. A shop order already fulfilled by the shop is not undone, and a fulfilment left partial on the Shopify side is not treated as done: an item to handle reports it. Partly delivered or in preparation: nothing until the order is complete.
  • Pulling the description and photos (setting unticked by default): on each pass, for each linked product, the shop's description is copied as plain text onto the product; photos are added in the shop's order, the first being the main one, and removed when they disappear from the shop. At most 20 photos per product. Not pulled: collections, tags, taxes, the description and photos specific to each variant, nor names, prices and barcodes changed in the shop.

Day to day

The connector screen reads from top to bottom: status, shop, settings, buttons, then the items to handle and the log.

The “Status” card

It shows where the connection stands, the shop's name and currency, the date of the last sync, the last error and the number of items to handle. On the card of the “Integrations” page, the status fits in a chip.

  • Not active yet “Set up, not activated yet”.
  • Connected “Active — stock sent as soon as it changes, full sync every 5 minutes”. If stock is not published: “Active — synced every 5 minutes”.
  • Paused “Paused — nothing is sent or imported”.
  • Stopped — check it “Stopped by the server — check the credentials and test”.

“Sync now”

Stock is sent to the shop automatically, a few seconds after each change, and orders arrive as soon as they are placed: the screen recalls this below the button. This button only starts the full sync right away (product pages, missed orders, deliveries), which otherwise runs every 5 minutes. The message says whether the pass finished, whether it raised items to handle, or why it did not start.

The “What flows between GSE-Web and the shop” card

Below the settings, a card tells, for each exchange, which way it goes: from GSE-Web to the shop (pages, stock, variants, deliveries and cancellations), from the shop to GSE-Web (orders, cancellations, description and photos) and what never goes through (order lines, refunds, collections, tags and taxes, names, prices and barcodes changed in the shop). A line tied to an unticked setting is marked “Off”.

The “Log”

Each pass is listed with its type and its result. Types: “Product pages”, “Stock”, “Live stock” (sent as soon as a stock changes, listed only if a quantity changed), “Pull from the shop”, “Order catch-up”, “Order feedback”, “Order received”, “Webhook check”, “Connection test”. Results: “Succeeded”, “Partial”, “Failed”, “Running”, “Interrupted”. Clicking a pass opens its detail, item by item: product created or updated, stock published, order imported, fulfilled or cancelled, photo pulled, webhook recreated… (at most 200 items per pass). Passes that changed nothing can be hidden.

The “Items to handle”

A line that does not go through never blocks the sync: it becomes an item to handle and the rest carries on. Items about product pages and stock clear themselves once their cause is fixed. Order items have two buttons.

  • “Retry” reads the order from the shop again and retries the import, whatever its age. It is not offered for feedback items (fulfilment, cancellation in the shop): the next pass retries them on its own.
  • “Ignore” puts the item away: an ignored item does not come back to the list. “Ignore all”, at the top of the list, puts away all open items at once, including those not displayed, after confirmation.

Product pages

Product …: product type not supported by the shop

Cause
This product is of a type the connector does not publish. Simple products, kits and products with variants are published.
What to do
Nothing to do in GSE-Web. Manage this product directly in the shop.

Product …: no sale price — not published

Cause
The product has no sale price in GSE-Web.
What to do
Enter its sale price. The item clears at the next pass.

Product …: VAT rate missing, tax-inclusive price cannot be computed

Cause
Prices are published including tax and the product has no VAT rate.
What to do
Enter the product's VAT rate.

Product …: the reference is already used in the shop by another product

Cause
The shop variant carrying this reference is already linked to another GSE-Web product, belongs to a multi-variant product while the GSE-Web one is simple (or the other way round), or the shop carries the same reference on several variants. A reference containing a comma cannot be searched in the shop either.
What to do
Make sure one reference designates a single product, on both sides.

Product … rejected by the shop (…)

Cause
Shopify rejected the product page; its rejection code is shown.
What to do
Check the product in the shop using this code.

Product …: created in the shop but not published to the online store (…)

Cause
The product exists in Shopify, but could not be published to the “Online Store” channel: no customer can buy it.
What to do
Publish the product to the online store in Shopify, then “Ignore”. Also check the app's publication permissions (read_publications, write_publications). This item does not clear on its own: GSE-Web never republishes an existing page.

Product … deleted in the shop: recreate or unlink it

Cause
The linked product no longer exists in the shop.
What to do
Recreate it in the shop with the same reference. If it should no longer be there, write to us.

Product …: type changed in GSE-Web, the old Shopify product is no longer linked

Cause
The product changed from simple to “with variants” (or the reverse): the Shopify product of the old type no longer matches it. The link was removed; the new product follows the current type.
What to do
Delete or archive the old product in Shopify, then “Ignore”.

Kit …: bill of materials cannot be published (reason)

Cause
The kit has no component, one of them is archived or inactive, or a component's quantity is entered in another unit than its base unit. The kit is not put on sale.
What to do
Fix the kit's bill of materials. The item clears at the next pass.

Product with options …: no live variant — not published

Cause
A product with variants is sold through its variants: without an active variant, it is not put on sale.
What to do
Create a variant, or reactivate one. The item clears at the next pass.

Variant …: not published (reason)

Cause
The variant cannot be published: its parent product cannot be found, is archived or not yet published in the shop, or its axes and values are invalid (Shopify accepts three axes at most). The reason is shown in brackets.
What to do
Fix the stated cause, on the parent product or on the variant. The item clears at the next pass.

Product …: photo not pulled from the shop (reason)

Cause
A photo from the shop could not be copied onto the product. Possible reasons: image not found, unsupported format (JPEG, PNG, WebP and GIF are accepted), over 5 MB or unreadable, shop unreachable (retried on the next pass), unsafe image address (public HTTPS required), more than 20 photos (the following ones are not pulled).
What to do
Check the photo in the product's media in the shop. The item disappears once everything is imported; the rest of the product is pulled anyway.

Stock

Fractional stock rounded down to the unit in the shop

Cause
The available stock has decimals; the shop only sells whole units.
What to do
Information only: the shop shows the lower unit.

Stock of product … rejected by the shop (…)

Cause
Shopify rejected the quantity; its rejection code is shown.
What to do
Check the product page in the shop using this code.

Stock location unavailable (reason): the stock is not published

Cause
The stock cannot be sent: no location was chosen, or the shop refuses the one that was (deleted, deactivated, permission missing). GSE-Web never falls back on another location.
What to do
Choose an active location in the setup (pause the connection to change it), “Save”, “Test the connection”, then “Resume”.

Orders

Order …: unknown product (SKU …) — no order created

Cause
A line of the order carries a reference that does not exist in GSE-Web.
What to do
Create the product with the same reference, then “Retry”.

Order …: variant cannot be imported (SKU …, reason) — no order created

Cause
A line refers to a variant GSE-Web does not know, or to the reference of the product with variants itself, without its variant.
What to do
Unknown variant: create the variant with the same reference as the shop variant, then “Retry”. Parent product reference ordered without a variant: handle the order manually.

Order …: no buyer e-mail

Cause
Without an e-mail, the buyer can be neither found nor created as a customer.
What to do
Add the customer's e-mail to the order in the shop, then “Retry”. If the e-mail is already there, check the app's access to protected customer data.

Order …: buyer unreadable (protected customer data not declared)

Cause
Shopify gives the app neither the buyer's name, e-mail nor address until it has declared its use of protected customer data.
What to do
In the Dev Dashboard, declare access to protected customer data (name, e-mail, address), release a version of the app, then “Retry”.

Order …: the customer is archived in GSE-Web

Cause
The customer matching this buyer has been archived.
What to do
No outbound order is created. Handle this order manually.

Order …: currency … differs from …

Cause
The order is in a currency other than your organisation's.
What to do
Handle this order manually.

Order …: too old to be imported automatically (over … days)

Cause
During catch-up, the order exceeds the “Maximum age of a caught-up order”.
What to do
“Retry” imports it anyway.

Order …: already shipped from Shopify, no outbound order created

Cause
The order was already fulfilled (wholly or partly) in Shopify when it arrived: point-of-sale sale (Shopify POS) or shipment made from the Shopify admin. An outbound order would ship it a second time; its stock exit is therefore not recorded in GSE-Web.
What to do
Record the matching stock exit in GSE-Web (otherwise GSE-Web will publish its old available stock to the shop again), then “Ignore”.

Order … cancelled in the shop, but the outbound order is already being handled: for the team to decide

Cause
The outbound order is already being prepared: GSE-Web does not cancel it on its own.
What to do
Decide with the team. If the outbound order must be cancelled, release it, then “Retry”.

Order … changed in the shop after import: check the outbound order

Cause
The order changed in the shop after the outbound order was created; the change is not carried over.
What to do
Compare the order and the outbound order, and correct the outbound order if needed.

Order …: import failed (…)

Cause
The import failed; the reason is shown in brackets.
What to do
Fix the stated cause, then “Retry”.

Order …: kit … cannot be published (reason) — no order created

Cause
The order contains a kit whose bill of materials does not hold: no component, an archived or inactive component, or a unit other than the base unit. No order is created.
What to do
Fix the kit's bill of materials, then “Retry”.

Order …: the shop refused the operation (…)

Cause
Shopify refused to fulfil or cancel the order, could not find it, or keeps part of it on hold (fulfilment order on hold or scheduled); the message says which.
What to do
Check the order in the shop and fulfil or cancel it manually if needed: the next pass retries on its own as long as the outbound order calls for it.

Order …: order cancelled, but the shop order is already closed — to settle with the customer

Cause
The outbound order was cancelled in GSE-Web, but the shop had already fulfilled or closed the order: GSE-Web does not undo it.
What to do
Settle the situation with the customer (refund, return) directly in the shop.

Webhooks

Webhooks removed by the shop: recreated, orders caught up

Cause
Shopify removes a webhook subscription after several failed deliveries, or one of the app's subscriptions was deleted in the shop.
What to do
Nothing to do: the webhook check, every 6 hours, recreates them and catches up the orders.

Pause, resume and changes

The connector can be switched off and on again at any time. Some changes follow a rule, which the screen reminds you of and the server enforces.

“Pause”

Nothing is sent or imported any more, and nothing is lost. The stock shown in the shop stays as last sent.

“Resume”

The shop is checked again (credentials, permissions, currency, price mode, location), then catch-up starts: orders placed during the pause are imported if they are less than N days old (“Maximum age of a caught-up order”, 30 by default) and if Shopify still returns them. Older ones become items to handle.

Changing the credentials, the price mode or the location

On an active connection, the domain, the credentials, “Published prices” and the location are locked. Follow this order: “Pause”, change, “Save”, “Test the connection”, “Resume”. A new location receives all the stock; the former one is not reset to zero — do it in Shopify, as the shop adds up its locations.

Changing shop

“Disconnect” first: the former shop's webhook subscriptions are removed. Then enter the new shop; the location has to be chosen again.

Reconnecting the same shop

Products, orders and customers already linked are found again: no second outbound order is created for an order already imported, and all the stock is sent again.

Changing a product page setting

After changing “Published prices” or “Create and update product pages in the shop”, the next pass reads the whole catalogue again. Changing the “Published warehouse” sends all the stock again.

“Disconnect”

The webhook subscriptions are removed from the shop and the credentials erased. Nothing is deleted in the shop or in GSE-Web: outbound orders and customers already imported remain. If the shop does not answer, the screen asks you to delete the app's subscriptions yourself from Shopify.

Module closed

If KLS-Concept closes the module for your organisation, everything stops without anything being deleted. When it reopens, the next pass catches up the orders and publishes the stock again.

Security and data

What the connector keeps, and how.

Encrypted credentials

The app secret, the client ID or the Admin token are encrypted on the server (AES-256-GCM). They are never shown again, nor written to the logs. The 24-hour token of a Dev Dashboard app is never stored.

Two-factor authentication

It is required to enter or replace a shop's credentials.

Shopify domain only

The connector only calls the …myshopify.com domain entered, over HTTPS; no redirect is followed. Pulled photos are only downloaded from a public HTTPS address, without ever passing on the token.

Signed webhooks

Each webhook received is signed with the app secret, and its signature is checked before any processing. It only serves as a signal: the order is read again from Shopify, and its content is not kept.

Buyer data

The buyer's details are copied to their customer record and the delivery address to the outbound order. The link with the shop keeps only a fingerprint of their e-mail.

Nothing in the export

The encrypted credentials are not included in the organisation's portability export.

Troubleshooting

The message shown by the screen, its cause and what to do. The code in square brackets helps support find the case.

Stopped — check it

“Stopped by the server — check the credentials and test”

After five authentication refusals in a row (app uninstalled, secret regenerated, token revoked), the server stops the connection rather than keep trying. Check the app in Shopify, enter new credentials if needed, “Save”, “Test the connection”, then “Activate”.

Invalid shop domain: a domain of the form shop.myshopify.com is expected

What to do
Enter the shop's admin domain (…myshopify.com), not its public address. The admin address pasted from the browser is accepted.
[SHOPIFY_SHOP_DOMAIN_INVALID]

Shopify rejects the credentials: check the client ID and secret (or the Admin token), that the app is installed on the shop and that it belongs to the same Dev Dashboard organisation

What to do
Check the client ID and the secret in the app's settings (Dev Dashboard), that the app is indeed installed on this shop, and that the app and the shop are in the same organisation.
[SHOPIFY_SHOP_AUTH_FAILED]

These credentials belong to the shop …, not …

What to do
The credentials belong to another shop: correct the domain, or enter the credentials of the app installed on this shop.
[SHOPIFY_SHOP_DOMAIN_MISMATCH]

The app does not have all the required permissions. Missing permissions: …

What to do
In the Dev Dashboard, tick the missing permissions, release a new version and reinstall the app on the shop, then test again. The screen shows the list of missing permissions.
[SHOPIFY_SHOP_SCOPES_MISSING]

The shop currency (…) differs from the organisation's (…)

What to do
The connector only links a shop in your organisation's currency.
[SHOPIFY_SHOP_CURRENCY_MISMATCH]

The shop publishes its prices …, but the connection is set to …

What to do
In “Settings”, set “Published prices” to the shop's regime (“Include sales tax in product price and shipping rate”, in Settings › Taxes and duties). Pause the connection first if it is active, save, then test.
[SHOPIFY_SHOP_PRICE_MODE_MISMATCH]

Choose the Shopify location that receives the stock (test the connection to get the list of locations)

What to do
“Test the connection”, choose the “Shop location”, “Save”, then “Activate”.
[SHOPIFY_LOCATION_REQUIRED]

The chosen location no longer exists or is deactivated in the shop: test the connection and choose another one

What to do
Pause the connection, “Test the connection” (the list of locations is reloaded), choose an active location, “Save”, then “Resume”.
[SHOPIFY_LOCATION_NOT_FOUND]

The shop is frozen, paused or locked by Shopify: nothing to fix in GSE-Web, try again once it is open again

What to do
Settle the shop's situation with Shopify (subscription, payment); the sync then resumes on its own.
[SHOPIFY_SHOP_UNAVAILABLE]

The shop cannot be reached (…)

What to do
Check that the shop answers, then try again.
[SHOPIFY_SHOP_UNREACHABLE]

The shop did not answer in time

What to do
Try again a little later.
[SHOPIFY_SHOP_TIMEOUT]

The shop is limiting calls: try again later

What to do
Wait: the next pass resumes on its own.
[SHOPIFY_SHOP_RATE_LIMITED]

Unreadable answer from the shop

What to do
Try again; if the message comes back, write to us with the code below.
[SHOPIFY_SHOP_RESPONSE_INVALID]

Pause the connection before changing the shop, the credentials or the stock location

What to do
“Pause”, change, “Save”, “Test the connection”, “Resume”.
[SHOPIFY_CONNECTION_ACTIVE_CHANGE_REFUSED]

Disconnect the current shop first (its webhook subscriptions are still armed) before entering another one

What to do
“Disconnect”, then enter the new shop.
[SHOPIFY_SHOP_CHANGE_REQUIRES_DISCONNECT]

The price mode (excl./incl. tax) changes on a paused connection

What to do
Follow this order: “Pause”, change “Published prices”, save, test, then “Resume”. The price mode is checked against the shop at the test and on resuming.
[SHOPIFY_PRICE_MODE_CHANGE_REQUIRES_PAUSE]

The app secret and exactly one identifier — the client ID or the Admin token — are required together

What to do
Enter the secret with the client ID (or with the Admin token), or leave everything empty to keep the saved credentials.
[SHOPIFY_CREDENTIALS_REQUIRED]

Turn on two-factor authentication on your account before entering a shop's credentials

What to do
Turn it on in “My information” (the screen offers “Open “My information””), then save again.
[SHOPIFY_CONNECTION_TWO_FACTOR_REQUIRED]

A training warehouse cannot be linked to an online shop

What to do
Choose a real warehouse as “Published warehouse”.
[SHOPIFY_WAREHOUSE_EXERCISE_REFUSED]

The stored credentials can no longer be read on this server: enter them again

What to do
Enter the secret and the client ID (or the token) again, test, then activate.
[INTEGRATIONS_CREDENTIALS_UNREADABLE]

A sync is already running for this connection: try again in a moment

What to do
Wait for the current pass to finish.
[INTEGRATIONS_CONNECTION_BUSY]

Frequently asked questions

Are products with variants supported?

Yes. A product with variants is published as a product with options, and each of its variants as a Shopify variant, with its reference, price and stock. Shopify accepts three axes at most (size, colour, material…). An order for a variant gives an order for the GSE-Web variant.

Can several shops or several locations be linked?

No. An organisation links one shop, and one GSE-Web warehouse, the “Published warehouse”, feeds a single location of the shop. The other Shopify locations are not touched.

Are deliveries reported back to the shop?

Yes, if “Report deliveries and cancellations to the shop” is ticked, which it is by default. A delivered order fulfils its shop order; if it left in a shipment, the carrier and tracking number are passed on, and Shopify sends the customer its shipping e-mail. An order cancelled in GSE-Web cancels its shop order, without a refund. GSE-Web never writes the lines of an order.

Are product images and descriptions exchanged?

They never leave GSE-Web: photos and description are managed in Shopify. However, if you tick “Pull the description and photos from the shop”, they are copied into GSE-Web onto the linked products. The photos and description specific to each variant are not pulled.

Are the shop's collections, tags and taxes pulled?

No. They remain managed in Shopify, and GSE-Web does not pull them.

What about point-of-sale sales (Shopify POS)?

An order already fulfilled in Shopify when it arrives, such as a point-of-sale sale, does not become an outbound order: the goods have already left. An item to handle asks you to record its stock exit in GSE-Web; otherwise, GSE-Web would publish its old available stock to the shop again.

What happens if I pause or if the module is closed?

Nothing is sent or imported, and nothing is deleted. The stock in the shop stays as last sent. On resuming, orders placed in the meantime are caught up if they are less than 30 days old (adjustable from 1 to 90, and 60 days at most without the read_all_orders permission).

How long before an order appears in GSE-Web?

At once, by webhook. If a webhook is lost, the next pass, every 5 minutes, catches up the order.

Can the shop sell a product that is no longer in stock?

The risk is cut down to a few seconds, not removed. Stock goes to the shop a few seconds after each issue, receipt or reservation recorded in GSE-Web, and each shop order reserves its whole quantity at once. A shop sale at the very moment of an issue in the warehouse is still possible: it becomes an order whose shortfall shows as “Awaiting receipt”.

Is a buyer already in my business partners recognised?

No. The connector creates one “Individual” customer per buyer and finds them again by e-mail on later orders, but it does not match them with a business partner already entered in GSE-Web.

Are orders placed before activation imported?

No. Only orders received after activation are imported.

How do I get the connector?

The “Integrations” and “Shopify” modules are enabled organisation by organisation by KLS-Concept. Write to us from the contact page.

Link your Shopify shop

Ask for the connector to be enabled for your organisation, or send us your questions about your case.