Skip to main content
Shopify

What the Shopify Connector Pull Stock button does, step by step

The Pull Stock button brings Shopify's stock into Odoo: it reads what Shopify holds at its main location and makes inventory adjustments in the linked Odoo location to match, less what Odoo has delivered and Shopify has not yet fulfilled. It only works with Pull stock from Shopify switched on and with Inventory rights.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 5 November 2026

Key facts

Module
Shopify
Versions
Odoo 17, 18, 19 and 20
Checked
in the connector's source code, version 20.0 · against the sources linked at the end
Reading time
5 min

When it shows and what it needs

The Pull Stock button is on the Shopify Instances form, opened from the menu Sales › Shopify › Control Center › Instances. It exists in the 17, 18, 19 and 20 branches of the module and is always visible, with no condition.

Diagram with the Sales › Shopify › Control Center › Instances menu, the Pull Stock button and, to one side, the texts that can stop it
Diagram built with code from the module's published code (not an Odoo screen): the menu, the Pull Stock button and what can stop it.

For it to do anything, the instance needs Pull stock from Shopify switched on: Shopify then becomes the stock master. According to its help text, it cannot be on together with the stock push (Sync Stock Enabled), nor with another store pulling into the same Odoo location. The help adds that what Shopify holds as damaged, in quality control or as safety stock is part of its on hand: in Odoo it is stock like the rest.

Your Odoo doesn't talk to Amazon, Temu or Shopify?
Video: Your Odoo doesn't talk to Amazon, Temu or Shopify?

Step by step

  1. Start with the automatic route. On the Shopify Instances form, Operations tab, Sync Settings group, switch on Pull stock from Shopify. It is off by default.
  2. Switch on the scheduled action Shopify Pull Stock (Shopify → Odoo) too: it runs every six hours and is deactivated on install. The checkbox help says it plainly: turning it on does not run the pull.
  3. Press Pull Stock only when you want the stock now, without waiting for the scheduled action. It is the manual route and goes through what follows.
  4. Before creating anything, the button checks that the checkbox is on. If it is not, it stops and changes nothing.
  5. Then it checks that whoever presses has Inventory rights, because the pull makes inventory adjustments. If not, it stops with the permissions message in the table.
  6. It creates an entry in the sync log, of the stock pull type, in progress.
  7. It looks for the active product links of that instance that have a Shopify inventory item, and drops those of a product from another company linked before a fix. If none are left, it closes the log as done, with a note, and changes nothing.
  8. It works out the Odoo location: the one mapped to Shopify's primary location or, failing that, the stock location of the store's warehouse (of its company). If it finds none, it marks the log as failed and leaves the reason in it.
  9. It checks that no other active store with the checkbox on pulls into that same location, one inside it or one holding it. If one does, it marks the log as failed and stops without touching stock.
  10. It uses the Shopify location saved in Default Location Gid (Webhooks tab of the form). If that is empty, it asks Shopify for its first location and saves it there.
  11. It asks Shopify, in batches of one hundred items, how much is at that location (what is in it, committed stock included).
  12. It skips products tracked by lots or serial numbers, products that are not stored and kits, and notes them. Products for which Shopify returned no quantity are left untouched.
  13. If the Odoo location (with its children) has a pending count for that product, it does not overwrite it: it leaves the product unadjusted and notes it.
  14. It works out the difference: Shopify's on hand, less what Odoo delivered from that location (with its children) for the store's open orders and Shopify has not yet fulfilled, less what Odoo has available in the location. It does not count what the connector fulfilled, nor orders Shopify fulfilled some other way.
  15. If the difference is positive, it creates and applies an inventory adjustment that raises the location's stock. If it is negative, it lowers it by taking from the stock in the location (children and packages included, never what belongs to an owner), in removal order. If Odoo has not enough adjustable stock to lower, it does not adjust that product and counts it as an error.
  16. Each product is handled on its own: if one fails, it is counted as an error and the run carries on. When it adjusts one, it records the sync date on its link.
  17. It closes the log with a note: how many quantities it pulled and which products it skipped, left because of a pending count or could not lower. The log ends as successful if there were no errors, partial if there were errors and something was updated, and failed if there were errors and nothing was updated.

Some of the messages the button can give

MessageWhen it appearsWhat to do
Pulling stock from Shopify makes inventory adjustments: it needs Inventory rights.When you press the button without Inventory rights.Have a user with Inventory rights press it.
Shopify stock pull failed for …: …When something fails during the pull, with the log already created. First comes the shop domain (Shop Domain), then the reason.Read the reason after the colon: the log is left as failed with that text.

If FlexigoTech Cloud has paused the service, the code deletes the log entry instead of leaving it as failed, and in that case the failure message in the last row is not generated.

Diagram of the Inventory rights message in Spanish, German, French, Italian and Portuguese
Diagram built with code from the module's published translations (not an Odoo screen): the permissions message from the table, in five languages.

What to check afterwards

Open the log for that run: its state and note tell you how many quantities were pulled and which products were skipped, left because of a pending count or could not be lowered. The adjustments go into the inventory history and are valued like any other. If a product appears in the note because of a pending count, the note itself says to apply or clear it in Odoo.

Cost and help

The module costs €9 per Odoo version, for 17, 18, 19 and 20, excluding VAT, as a one-off payment. It also needs a FlexigoTech Cloud subscription: the Connector plan is €49/month or €490/year excluding VAT.

FlexigoTech implements Odoo 17, 18, 19 and 20 and builds connectors and custom integrations.

Keep reading

The message «Authorize … in Shopify first (Authorize in Shopify).» in Shopify ConnectorThe Shopify Connector message Authorize … in Shopify first (Authorize in Shopify). explained: the code condition that triggers it and how to fix it.
Checked in the connector's source code (version 20.0) and the linked sources

Sources