Install the PHP Point Of Sale app from the Shopify App Store, enter your POS URL, activate billing (14-day free trial, then monthly through Shopify), and choose sync options in the guided wizard. This article covers the setup scenarios, the field-by-field mapping in both directions, every default setting, sync intervals and cancellation.
The PHP Point Of Sale Shopify app connects your Shopify storefront and your register so inventory, items and sales stay centralized in one place. It works in both directions: POS customers can expand to an ecommerce website, and existing Shopify stores can add a brick-and-mortar register, without maintaining two catalogs. A sale at the counter updates Shopify's quantity; a Shopify order flows into the POS as a sale.
Everything on the POS side lives in Store Config (search for ecommerce), and changing it requires the Store Config module permission (permissions and templates). The general sync engine — operation order, manual sync, logs, conflicts — is covered in how ecommerce sync works; this article covers everything Shopify-specific.
Before you install
You need both a Shopify store and a PHP Point Of Sale store, with login credentials for each. One rule saves the most grief: if you are creating a new store on either side, do not add any products or items to it before installing the app. Which sync options you should pick depends entirely on which side already has data — see the setup scenarios below, and read them before your first sync. The wrong sync direction on the first run can create duplicates.
Install the app
- In your Shopify admin, open Apps in the left menu and go to the App Store.
- Search for php point of sale, open the PHP Point of Sale app listing, and click Add app. (You can also go directly to apps.shopify.com/php-point-of-sale.)
- Shopify shows a confirmation page listing the permissions the app will have (products, customers, orders, inventory, locations, files and publications, read and write). Scroll down and click Install app.
- You are prompted for your POS URL — enter it and click Submit. For a cloud store this is
https://yourstorename.phppointofsale.com. - Shopify connects to your POS and returns you there, where a four-step wizard finishes the setup: Install Shopify app → Connect Billing → Choose Sync Options → Sync.
- On the billing step, click Activate billing – 14 day trial then $[price] per month. Shopify shows the monthly price and the exact date the free trial ends before you approve anything; the charge is billed through your Shopify account. Click to start the free trial.
- You land on the sync options step. Choose the operations for your situation (next section), click Save, then Next, then Sync. The POS tells you the sync is running in the background and that adjustments can be made later in Store Config.
The Shopify Settings section of Store Config afterward shows You are connected to Shopify [yourstore.myshopify.com], plus Reconnect To Shopify, Disconnect From Shopify and Cancel Shopify Billing controls.
Choose sync options for your situation
The wizard (and later, Ecommerce Sync Operations in Store Config) offers five operations for Shopify: Sync inventory changes, Import items into PHP POS, Import orders into PHP POS, Export categories to ecommerce, and Export items to ecommerce. Which to enable depends on the state of your two stores. Note that item import and item export cannot both be enabled at once — each scenario picks one direction.
New POS and new Shopify store (both empty). You will create items in the POS and push them to Shopify. Uncheck Import items into PHP POS and Import orders into PHP POS, leaving checked: Sync inventory changes, Export categories to ecommerce, Export items to ecommerce. Create all future items in the POS (see creating items).
Established Shopify, new POS. Your goal is to pull the Shopify catalog into the empty POS so you never re-key it. Uncheck Export categories to ecommerce and Export items to ecommerce, leaving checked: Sync inventory changes, Import items into PHP POS, Import orders into PHP POS.
Established POS, new Shopify store. You will populate the empty Shopify store from the POS. Uncheck Import items into PHP POS and Import orders into PHP POS, leaving checked: Sync inventory changes, Export categories to ecommerce, Export items to ecommerce.
Established Shopify and established POS. Combining two stores that both already have data is strongly discouraged — avoid it if you possibly can. If it is unavoidable, prepare first:
- Find every product that exists on both sides and make sure the Shopify SKU matches the POS item's UPC/EAN/ISBN or Product ID (whichever your SKU field to sync with setting uses). When the SKU matches, the Shopify data overwrites the POS item; when it does not, a duplicate item is created in the POS.
- Know your quantities: inventory from Shopify overwrites the POS count — the two numbers are not combined.
- Then sync with Export operations unchecked, leaving: Sync inventory changes, Import items into PHP POS, Import orders into PHP POS. Duplicate products merge into the matching POS items and Shopify-only products are added.
Recommended settings after the first sync
After the initial import or export, change the operations so that day-to-day you work only in the POS and changes flow out to Shopify:
- Go to Store Config, search ecommerce.
- In Ecommerce Sync Operations, uncheck Import items into PHP POS and leave checked: Sync inventory changes, Import orders into PHP POS, Export categories to ecommerce, Export items to ecommerce.
- Click Save.
Import orders into PHP POS is optional: check it if you want Shopify orders in your POS sales reports (on the first import Shopify only provides roughly the last 60 days of order history; everything is captured going forward). Leave it unchecked to keep Shopify and POS reporting separate.
From here on, create new products in the POS. To keep an item off the website, uncheck Is Ecommerce Item on the item form. Deleting an item in the POS deletes the product from Shopify as well (an Undelete restores it).
What syncs from Shopify to the POS
Not every Shopify field has a POS home. This is where each mapped field lands on the POS item:
| Shopify product field | POS item field |
|---|---|
| Title | Item Info → Name |
| Description | Item Info → Description and Long Description |
| Images/Media | Images → Upload Images |
| Price | Pricing → Promo Price |
| Compare at Price | Pricing → Selling Price |
| Cost per Item | Pricing → Cost Price (without tax) |
| SKU | Item Info → UPC/EAN/ISBN |
| Barcode | Item Info → Product ID |
| Quantity | Inventory → Current Quantity |
| Weight | Item Info → Weight |
| Variants and Options | Variations → Item Attributes and Item Variations, with per-variation cost, selling and promo prices and quantities |
| Product Type | Item Info → Category |
| Vendor | Item Info → Supplier |
| Tags | Item Info → Tags |
Products that are Drafts in Shopify still import and become normal POS items.
Shopify fields that do not map to the POS stay managed in Shopify: the charge-tax option, track-quantity option, available/incoming stock breakdowns, shipping and physical-product options, customs information (area of origin, HS code), product status, sales channels and apps, scheduled availability, organization and collections. If those need changing, change them in Shopify; everything else should be edited in the POS after the initial sync.
What syncs from the POS to Shopify
| POS item field | Shopify product field |
|---|---|
| Item Info → Long Description | Description |
| Images | Media |
| Pricing → Selling Price | Price |
| Pricing → Cost Price | Cost per Item |
| Item Info → UPC/EAN/ISBN | SKU |
| Item Info → Product ID | Barcode |
| Item Info → Tags | Tags |
| Item Info → Weight | Weight |
| Inventory → Current Quantity | Quantity available |
| Item Info → Category | Product Type |
Every item exported to Shopify is created Active, and anything not marked as a service in the POS becomes a physical product. All other POS fields do not transfer: secondary categories go nowhere in Shopify, series/package options on services do not carry over (describe them in the product description instead), and shipping data like country of origin or harmonization codes must be entered in Shopify itself.
Settings reference
These Store Config settings shape the Shopify sync (shared ones are described fully in how ecommerce sync works):
- Select Platform — must show Shopify. If Shopify is missing from the dropdown, the app was not installed correctly; redo the install from the Shopify App Store.
- Do NOT upload images to E-Commerce — off by default. Stops POS item images from being sent as Shopify product media for all products created or modified going forward; already-uploaded images must be removed in Shopify by hand.
- Only Sync Completed E-Commerce Orders — off by default. Only orders closed in Shopify import into POS reporting.
- Import E-Commerce Orders Suspended — off by default; imports each Shopify order as a suspended sale for review at the register.
- New Items are E-Commerce By Default — on by default: every item created in the POS syncs to Shopify unless you uncheck Is Ecommerce Item on the item.
- Store Location — with multiple locations, which one the online store's inventory is tied to.
- Online Price Tier — to sell online at a different price than in-store, create a price tier (Store Config → search tier → Add tier, name it e.g. "Shopify Online", Save), then return to the ecommerce settings, refresh, and select it here. The tier price you enter on each item's Pricing tab is then what displays on Shopify.
- Shopify Step Size for non integer products — default 1. Shopify counts inventory in whole numbers, so items sold by fractional quantity (weight, length) use this step to translate between POS decimal quantities and Shopify's integer counts.
- Overall price sets price for variants if not set (for shopify) — off by default. When a variation has no price of its own, the item's overall price fills in so the variant still lists correctly.
- Shopify Inventory Policy — set per item on the item's Inventory tab: Not allowed to be sold online if out of stock (the default) or Allowed to be sold online if out of stock.
- Weight units on the item form are limited to Shopify's units — lb, oz, kg, g — while Shopify is the platform.
Categories exported to Shopify become Smart Collections (automated collections) there.
Sync intervals and realtime updates
By default the app syncs between Shopify and the POS about every 15 minutes; a shorter interval is not recommended for performance reasons (cloud customers can contact support about the schedule). On top of the schedule, syncs start automatically when you create an item in the POS, when you edit an item in the POS, and after a bulk import of items or orders.
Realtime webhooks carry individual changes the moment they happen: Shopify product create, update and delete events update the matching POS item, and order create, update, edit and delete events keep imported sales current. Incoming webhooks are processed as background jobs, so a product with many variants does not tie anything up while it saves. Deleting or cancelling an order in Shopify marks the matching POS sale deleted.
You can also run a sync by hand at any time: Store Config → search ecommerce → confirm the checked operations → scroll below E-Commerce Syncing Logs → Sync → Yes. A progress bar shows the run; the syncing logs list each run and clicking a date shows what was synced.
Cancel or disconnect the app
Cancelling is a two-step process, done from the POS:
- Open Store Config and search for shopify settings.
- Click Cancel Shopify Billing and confirm in the popup. Billing stops.
- The screen then offers Activate billing (to resume) or Disconnect From Shopify — click disconnect to break the connection.
- Finally, delete the PHP Point of Sale app from your Shopify store's Apps page to avoid confusion.
If you later reinstall or reconnect, the POS takes you straight to the billing activation step. Reset E-Commerce is separate: it unlinks every synced record without deleting anything on either side — use it only when pointing the POS at a different Shopify store or switching to WooCommerce, and consider contacting support first.
Common questions
How much does the Shopify app cost? It starts with a 14-day free trial; after that a monthly charge is billed through the Shopify App Store. The exact price and the trial end date are shown on the Activate billing button and confirmation page before you approve.
Where do I create new products once connected — Shopify or the POS? The POS. The recommended post-install settings push new POS items and categories to Shopify automatically. Only the Shopify-side-only fields (shipping/customs details, collections, sales channels) are edited in Shopify.
Why did I get duplicate items after syncing two existing stores? A Shopify SKU that matches a POS UPC/EAN/ISBN or Product ID merges into that item (Shopify's data overwrites it); any SKU that matches nothing creates a new item. Align SKUs before syncing two established stores — and expect Shopify's inventory numbers to overwrite, not add to, the POS counts.
Do my old Shopify orders import? The first order import brings in roughly the last 60 days of Shopify order history; from then on all orders are captured as they happen.
Why doesn't a product's price change online when I edit the tier price? The Online Price Tier must be selected in the ecommerce settings first. Only then does the tier price on the item's Pricing tab drive the Shopify price.
Can Shopify keep selling an item that hits zero stock? Per item, yes — set Shopify Inventory Policy on the item's Inventory tab to "Allowed to be sold online if out of stock". The default stops sales at zero.
What happens to Shopify if I delete an item in the POS? The product is deleted from Shopify too. Undeleting the item in the POS restores it.
I sell by weight — how does that work with Shopify's whole-number inventory? Set Shopify Step Size for non integer products. The POS translates its decimal quantities into whole Shopify units using that step.
Comments
0 comments
Please sign in to leave a comment.