All articles

Integrations

Custom Website

Push inventory to a client-operated website (e.g. WordPress / WooCommerce) via a JewelTrak-built module. The module owns the format, transport, fields, and lookups; you manage credentials, lists, and per-item content. JewelTrak owns the data; the website's plugin owns the storefront.

Custom Website

A Custom Website integration pushes your inventory to a website that your own web developer operates — typically a WordPress / WooCommerce storefront. Unlike Shopify or eBay (named platforms with a fixed API), a custom website is bespoke, so JewelTrak builds a website module for it: a self-contained unit that knows the exact CSV format, transport (FTP + webhook), per-item fields, and lookup lists that your site expects.

A client selling through Shopify uses the Shopify integration, not this one. Custom Website is specifically for a site your developer maintains where JewelTrak delivers a data file and the site’s plugin imports it. A tenant can have both — they’re separate integration cards.

How a Custom Website gets set up

Setup is a JewelTrak task, done once per client during onboarding:

  1. JewelTrak builds your website module to match your developer’s CSV spec and import endpoints.
  2. An admin binds the module to your organization (Admin → org → Online Channels → Custom Website → pick the module → Bind & install). Binding also installs the module’s own tables and lookup lists into your tenant.
  3. The admin enables the Website channel. Until a module is bound, the toggle stays Locked — there’s nothing to render a card from, so the channel can’t be turned on.

Once the channel is enabled, the Custom Website card appears under Settings → Integrations, the Website sub-tab appears on inventory detail pages, and the bulk listings page is available under Online → Listings.

The integration card — credentials & config

Settings → Integrations → Custom Website is where you enter the credentials the module needs and manage its configuration. What appears here is declared by your module. For a two-site setup (a public retail site plus a dealer/members site) you’ll see two credential groups side by side — for example:

  • Jewelry World (the public retail site) — FTP host, user, password, and the webhook URLs the plugin listens on.
  • Jewelry Reserve (the dealer-gated site) — its own FTP + webhook values.

Both sets of credentials are required — the module always delivers to both sites. You get these values from your web developer. JewelTrak doesn’t host the site, so it can’t validate them up front; if a push hits an authentication problem, JewelTrak stops and prompts you to fix the affected credentials rather than silently skipping items.

Passwords are stored encrypted and only used at push time. To change a password, type the new one over the dots and save; leaving a password field blank keeps the existing value.

Use the Manage lookup lists button in the upper right to jump to the list editor (below).

Managing audited customers (memo hold)

Some clients need items that are on memo to a specific customer to come off the public site while they’re out — but stay on the dealer site — and automatically return to the public site when the memo comes back.

You control which customers this applies to yourself, with the Audited customers picker on the card config. Search for and add any customers whose memos should be audited; remove them when the arrangement ends. No code change or support ticket is needed — the list is yours to manage.

How it works once a customer is on the list:

  • Memo issued to an audited customer → the item is pulled from the public site, kept on the dealer site, and flagged JR Only.
  • Memo returned → the item is re-pushed to the public site automatically.

If the Audited customers list is empty, the feature is simply off. This behavior is specific to modules that declare it (Jewelry World does); other website modules won’t show the picker unless built with it.

The lookup-list editor

Settings → Integrations → Custom Website → Manage lookup lists manages the dropdown values that appear on the per-item panel:

  • Main categories — top-level pickable values (with a Jewelry / Watches filter).
  • Subcategories — grouped under a main category; drives the cascading multi-checkbox list on the panel.
  • Stones — stone types pickable per item.
  • Other options — free-form picks (e.g. Estate, Antique, Limited).
  • Other metals — non-gold metals (Platinum, Palladium, Silver, etc.) beyond the standard gold purities (9K–24K).

Adding a value makes it pickable on every item. Renaming isn’t exposed — pipe-delimited references in per-item settings would silently break. To rename, add the new value, repoint the affected items, then delete the old value. Lists start empty after a fresh module install; populate them here before configuring items.

The per-item panel

Every supported jewelry item has a Website sub-tab under Sales Channels on its detail page. It’s laid out in three cards — Storefront content, Categorization, and Metal:

  • Item title — the short label under the main photo. Use AI to generate one in proper case (e.g. “18K Ladies’ Designer Diamond Necklace”).
  • Description — the verbose product description. Use AI to draft a marketing-style description from the item’s spec fields.
  • Main category + subcategories — drives storefront navigation.
  • Stones, options, gold purity, gold colors, other metals — multi-selects that get pipe-joined into the CSV. (Platinum is an Other metal, not a gold purity.)

The panel has its own Push to sites and Remove from sites buttons for acting on the single item you’re viewing. Remove from sites only appears once the item is actually listed. Push to sites saves your panel edits automatically before pushing — you don’t need to click Save first (Save is still there for storing a draft without pushing).

A website record is created the first time you Save or Push a panel. If one was created by mistake — for an item you never want online — use Delete website record to remove it entirely; the item then drops out of the bulk selection list and the inventory item itself is untouched. (Delete is only available once the item is not listed on either site — Remove it from the sites first so a live listing can’t be left orphaned.)

An item must be ready before it can be pushed. It’s ready only when it is in stock or on memo and has all of: a main category, an item title, a description, at least one image, and all three prices (Price 1, 2, and 3) set to a non-zero value. A status pill in the header shows Ready to push or Incomplete for push at a glance. If you click Push to sites before it’s ready, the panel highlights the missing title/description/main category inline (validated as you’ve typed them — no need to save first), and lists anything missing from the General tab (prices, an image, stock) in a banner with a one-click link to jump there. (These are the same prerequisites the bulk listings page uses to decide which items can be added.)

The bulk listings page

Online → Listings → Website is where you add/remove items in bulk. Select rows with the checkboxes, then use the buttons in the top right:

  • Add to sites — publishes the selected items to both sites now. Only items that are ready (in stock/on memo, with a title, description, main category, image, and all three prices) are sent; incomplete ones are skipped and flagged so they show under the Has push error filter (“Added 7 · 3 skipped”).
  • Remove from sites — removes the selected items from both sites now. (You can Add them again later — it re-publishes.)

Use Show selected only to review everything you’ve checked across all pages before acting. Add always delivers to both sites; the “keep it off the public site but on the dealer site” case is handled automatically by the audited-customer memo hold above, not a manual button.

Each row shows status badges:

  • JW — listed on the public site (green) or not (—).
  • JR — listed on the dealer site (green) or not (—).
  • JR Only badge — the item is currently held to the dealer site only (on memo to an audited customer).
  • Last push — when the most recent push ran and whether it succeeded.

Filter by listing state (Currently listed / Not listed / Has push error) and availability (In stock or On memo / Sold only / …) — e.g. Sold only + Currently listed surfaces sold items still on the sites so you can Remove them.

Auto-removal when an item sells out

When an item’s quantity on hand reaches zero — sold on an invoice, scrapped, or returned to a vendor — JewelTrak automatically removes it from both sites, the same way it does for Shopify and RapNet. Items currently out on memo are left to the memo hold above and are not auto-removed. JewelTrak never auto-re-lists an in-stock item; re-listing is always a deliberate push.

Image hosting

Images stay on JewelTrak’s CDN. The CSV emits absolute Cloudflare URLs, and the site’s plugin downloads them at import time. There is no image sync — JewelTrak remains the single source of truth for product photos. If a plugin can’t accept absolute image URLs, that’s a plugin-side update for your developer; copying every image to the client’s bucket would double storage cost and create freshness drift, so JewelTrak doesn’t offer it.

Troubleshooting a failed push

Errors surface in two places:

  1. Push response banner at the top of the bulk listings page — the immediate error from FTP or the webhook.
  2. Last push column on each row — the per-item status if a partial failure occurred.

Common causes:

  • Missing credentials — JewelTrak prompts you to enter them on the card before attempting any push (no partial run).
  • FTP password rotated / wrong — the host accepts the connection but rejects the login; JewelTrak aborts and prompts you to update the password. Fix it on the Custom Website card.
  • FTP host wrong or down — the error names the host. Verify with your developer.
  • Webhook 404 — the import URL is wrong or the plugin’s action name changed. Get the current URL from your developer.
  • Webhook 200 but products not visible — the CSV reached the plugin but a column mismatch made it skip rows. Send your developer the most recent CSV so they can audit their plugin’s column expectations.

JewelTrak has done its job once the CSV arrives at the FTP target and the webhook returns success. Beyond that, your web developer is the right escalation — they own the plugin that reads the file.