Products and services
Everything you sell lives in one area, in the CRM section of the menu. A product is a thing with a shelf, a service is time with a duration, a package is a bundle sold as one line. Every offer, sale, booking and feed reads from here — so the catalogue is where a price is decided once, and the last place a wrong number should survive.
The menu names what you actually sell. A clinic with only services sees a single Services entry and never meets the word "stock"; a shop sees Products; a workspace that sells both gets one entry each, and a third for Packages once it has any. They are doors into the same area — the list shows the columns that kind needs (a duration for a service, a shelf count for a product) and "New" starts with that kind already chosen. Before you have added anything, the entry reads Products & services.
Reading the catalogue needs any of crm.view, catalog.manage or
deals.manage; changing it needs catalog.manage.
Three ways to keep a catalogue
You can run the catalogue on its own, mirror it from a connected system, or do both — and the choice is per workspace, made once, on the integration's Data ownership card:
| You chose | What it means |
|---|---|
| Kept in the store / CRM | Their record is the truth. ConnectWiz mirrors it, shows it, sells from it, and does not let you change its content here — the editor says managed in WooCommerce and points you there. You still decide what is ours: channel visibility, translations, tax defaults, groups, relations and your own photos. |
| Kept here | ConnectWiz is the truth. The import button refuses, so nobody's rows appear in your list by accident. |
| Both | Edited on either side. A change here is pushed to the store when the store's Update products switch is on; a change in the store arrives through its webhook. |
| Not decided | Behaves as it always did: editable here, importable from there. |
Whatever you chose, a row that came from a provider shows a source card at the top of its editor: the provider, its id over there, a link to it, and whether edits made here travel back.
What an import from a connected CRM brings
The names, groups and tax rates — and, where the CRM publishes them, prices and service durations. Three rules decide what lands:
- A price you set is never overwritten. The CRM's price and duration are copied only into a field that is still empty here. Correct a price once and every later import leaves it alone.
- A zero in the CRM arrives as no price. A clinic often leaves one of its two prices at zero because it never typed it. Imported as 0, that item would be offered for free the next time somebody picks it; imported empty, an offer that uses it asks for a price instead.
- The card price is not used as the price. When the CRM keeps a separate price for card payments, the ordinary price is the one that comes across. Card prices are not a rule of anything — for some services they are higher, for others lower — so one is never quietly substituted for the other.
Passive at the source is passive here. An item the store or CRM marks passive, archived or no longer lists comes in (or goes) inactive, so the assistant and offers stop proposing it; when the source makes it active again, the next import switches it back on. An item you switched off here stays off — an import never overrules your decision.
The whole catalogue is read on every import. If a catalogue is ever longer than one import can take, the import stops early, says so, and switches nothing off: an item it did not reach is not an item the clinic stopped selling.
A row, in full
The editor has sections; each saves on its own.
- Basics — kind, name, code (SKU), description, group and extra groups, unit ("piece", "hour", "ml"), tags, active.
- Pricing & tax — the price and its currency; the list price it is discounted from, with an optional sale window; the cost price (never shown to a customer); the tax rate, or the group's; whether this price includes tax, or the workspace default applies. Other prices: one row per currency and, when a country pays differently, per country. ConnectWiz holds no exchange rate — a currency you did not price has no price, and every surface says so rather than converting.
- Images — upload, order, pick the primary one, add alt text per language. Pictures from a connected store appear with their badge; you can reorder or hide them here, and a re-import brings them back.
- Variants — for products: name the axes (Size: S, M, L · Colour: red) and generate every combination. Each variant has its own SKU, barcode, picture and, when it differs, its own price and list price; a variant with no price of its own sells at the product's.
- Relations — what this row is sold with. A package lists its contents; anything can have add-ons (required or optional, at their own price or an override) and also sold with rows (upsell, cross-sell, accessory).
- Service — duration, who may perform it and with what, and the service variants that decide what a booking consumes.
- Identity & shipping — brand, GTIN/EAN barcode, manufacturer part number, condition, Google product category, weight, dimensions and the product's own page address. Shopping feeds refuse a row without most of these; the feed preview names the missing one.
- Translations — name and description per language, used by the widget, the assistant and any feed that asks for that language.
- Visibility — hide the row from the Google feed, the Meta feed, the widget, the assistant or the public API, one switch each.
Deleting an item deactivates it: every offer that ever named it still resolves. A deactivated row can be brought back.
Groups
Products & services → Groups is the category tree — up to five levels. A group can carry a default tax rate and a colour. Filtering the list by a group includes its children. A group with items or sub-groups cannot be deleted until you say where they go.
Working on many rows
Select rows in the list for activate / deactivate, move to group, hide from / show on a channel, or adjust price by a percentage. A price change skips rows a provider owns and rows with no price, and tells you how many it skipped.
Export CSV gives one row per item and one per variant, ready for Excel
(Turkish decimals such as 1.250,50 are understood on the way back).
Import CSV matches by id, then by SKU, then creates; only the columns you
included are touched, an empty cell leaves the value alone, and rows that could
not be read are listed by number while the rest land.
Shopping feeds — Google, WhatsApp, Instagram, Facebook
Products & services → Feeds publishes the catalogue as an address Google Merchant Center and Meta Commerce Manager fetch on their own schedule. One format serves both. Create a feed, choose its currency, country and language, optionally limit it to some groups or kinds, and paste the address:
- Google Merchant Center — Products → Feeds → Add feed → Scheduled fetch.
- Meta Commerce Manager — Catalogue → Data sources → Data feed → Scheduled feed. The same Meta catalogue serves WhatsApp, Instagram and Facebook, so your assistant can send product cards from it.
Preview tells you how many rows will be listed and why the others will not — no picture, no price in this currency, no page address, hidden. A product with variants is listed once per variant, grouped under the product, with size and colour where you named them. If the address ever ends up somewhere it should not, rotate it: the old one stops answering at once.
Workspace defaults
Settings → Company holds the default currency, the country, and whether prices are entered tax-included (the default, as in Turkish retail). New rows start from these; a workspace that sells in one currency never sees a currency field again.