Skip to content
Log in

Product suppliers

On this page

A supplier is an Account with the Is Supplier checkbox selected. Linking a supplier to a product records what you pay for that product, the quantities you have to buy it in, and what it costs you once it reaches your warehouse.

Use this process when you want to compare sourcing options for the same product, calculate margin from real cost data, or give your buying team the numbers they need to reorder.

:::warning Purchase price and landed cost are buy-side commercial data. Neither field syncs to your website, so they cannot be rendered on a storefront page or in a customer-facing account area, and you should not try to expose them by another route. See Cost data cannot reach the storefront. :::

Before you start

  • Create an Account for each supplier, with Is Supplier selected. See Add a supplier list to POS.
  • Create the products you want to link suppliers to.

How supplier data is structured

Two records hold supplier information, and they do different jobs.

  • Account — the supplier company itself, its contacts, and its address. The Is Supplier checkbox makes it a supplier, and Supplier Notes holds internal notes that only POS staff see.
  • Supplier Account (s_c__Product_Supplier__c) — one record per product-and-supplier pair. This is where the commercial terms live.

Because Supplier Account is a join record, one product can have many suppliers and one supplier can supply many products. That is what makes second-sourcing and price comparison possible.

  1. Go to the Supplier Accounts list.
  2. Click New.
  3. In the Account field, select the supplier.
  4. In the Product field, select the product this supplier provides.
  5. Enter the commercial terms in the fields described below.
  6. Click Save.

The product now shows this supplier in its Suppliers related list.

The packaged Account layout has no matching related list, so to see every product one supplier provides, either add the related list to your Account layout or report over Supplier Accounts grouped by Account.

Supplier Account fields

Field API name What it records
Account s_c__Account_Id__c The supplier Account. Required.
Product s_c__Product_Id__c The product being supplied.
Purchase Price s_c__Purchase_Price__c The unit cost price of this item from this supplier. This is the price on the supplier’s invoice, before freight and other charges.
Landed Cost s_c__Landed_Cost__c The total cost per unit including shipping and other costs, blended across all previous orders from this supplier.
Minimum Order Quantity s_c__Minimum_Order_Quantity__c The smallest quantity this supplier will accept on an order.
Units Of Measure s_c__Units_Of_Measure__c The quantity multiple you have to order in. A value of 50 means you order in multiples of 50.
Supplier Phone s_c__Supplier_Phone__c The supplier’s phone number, pulled through from the Account. Read-only.

For the full field list, see the Supplier Account object reference.

Purchase price and landed cost are different numbers

Purchase Price is what the supplier charges per unit. Landed Cost is what the unit actually costs you once freight, duty, and handling are included.

Landed Cost is a blended figure, averaged across all your previous orders from that supplier, rather than the cost of the most recent shipment. A single expensive air-freighted order raises it, and it comes back down as cheaper sea-freighted orders arrive. Treat it as a running average for margin and valuation, and use the invoice figure when you are checking one specific shipment.

:::warning StoreConnect does not calculate, blend, or update either field. Both are values you enter and maintain, so the blended figure is only as current as you keep it. There is no freight or duty field to feed it from either, which means you have to work the blend out yourself and enter the result. Maintain it on a schedule, or push it in with a Flow or an integration from your accounting system. :::

Example: a pan with freight and duty included

A supplier invoices $12.00 per unit for a cast iron pan, and freight, duty, and handling across your order history have averaged $3.40 per unit:

  • Purchase Price12.00
  • Landed Cost15.40

Minimum order quantity and order multiples work together

Minimum Order Quantity is a floor. Units Of Measure is a step. A supplier with a minimum of 100 and a unit of measure of 50 will accept 100, 150, or 200 units, but not 120.

Both fields describe what you have to buy. Neither is enforced on customer orders, and there is no equivalent minimum quantity for customers buying from your store.

Ways to use supplier data

Compare sourcing options

Create a Supplier Account record for each supplier that can provide a product, then compare their Landed Cost rather than their Purchase Price. A supplier with a higher invoice price but local warehousing is often cheaper delivered, and only landed cost shows that.

Where you have a preferred and a backup supplier, record both. When the preferred supplier is out of stock, your buying team already has the alternative and its terms.

Track margin

Margin needs a cost figure and a sell figure, and StoreConnect stores both. Three separate fields hold a cost, and they are not interchangeable:

Field Where it lives What it is for
Cost Price (s_c__Cost_Price__c) Product The product’s own cost, used for reporting. Inventory valuation is derived from it, so this is the one to keep accurate.
Purchase Price and Landed Cost Supplier Account What one supplier charges you. A buying reference you maintain per supplier, not a valuation input.
Unit Cost (s_c__Unit_Cost__c) Manual Stock Adjustment Item What stock was valued at on one receipt, stamped at the time. Your cost history.

For sell price, use the Unit Price on the Price Book Entry for the product. See Price books.

Cost and sell price sit on different objects, so the margin calculation belongs on the Price Book Entry, which can reach the product’s cost through its relationship. A Formula field returning Currency with UnitPrice - Product2.s_c__Cost_Price__c gives you margin per entry, and reporting on that field grouped by product shows where margin is thin.

Products with no Cost Price produce a blank margin rather than a full-price one, which is the safe behavior. Treat those rows as a data-quality list rather than a result.

To see margin by supplier, report over Supplier Accounts with Landed Cost as a column. The supplier link lives on the Product Supplier record rather than on the price book entry, so that is a second report rather than a grouping on the first.

Landed cost is the better basis for this than purchase price. Margin calculated on the invoice price alone ignores freight, and freight is where margin on low-value, high-bulk products usually disappears.

When a supplier changes prices

Suppliers raise prices, add fuel surcharges, and change freight terms. Nothing updates the cost fields for you, so a price change is always a deliberate edit.

  1. Open the Supplier Account record for that product and supplier.
  2. Update Purchase Price to the new invoice price.
  3. Recalculate Landed Cost and enter the new figure, or leave it until the next shipment arrives and you know the real freight cost.
  4. Check the sell price still gives you the margin you need. See Price books.

Where a supplier raises prices across a whole range, update the records in bulk with Data Loader rather than one at a time. The Supplier Account object (s_c__Product_Supplier__c) is an ordinary custom object, so a filtered export, an edit in a spreadsheet, and a re-import is the fastest route.

Keep the old figure if you need the history. These fields hold only the current value, so where you need to see what a product cost you over time, the receipt records are the audit trail: each Manual Stock Adjustment Item stamps its own Unit Cost. See Receive stock from a supplier.

Consignment stock

Consignment means holding a supplier’s stock and paying only for what you sell. StoreConnect has no consignment flag, but the existing records model it well enough to run on, provided you separate consigned stock on the right axis.

Separate it by stock location, not by supplier. A Stock Level is unique per product and stock location, and it carries no supplier field, so location is the only axis you can actually segregate stock and its valuation on. Supplier does not work as the dividing line for two reasons:

  • A product can have many Supplier Account records, so “the supplier of this stock” is ambiguous for anything you dual-source.
  • The same product can be both consigned and owned outright, and one stock level cannot represent both.

Use one stock location per consignor. That leaves the supplier as the naming and reporting axis while location does the segregation work.

  1. Create a Stock Location for the consignor, named so it is obvious whose stock it holds. See Stock locations.
  2. Create the product and a Supplier Account record for the consigning supplier.
  3. Set Purchase Price to the amount you owe the supplier per unit sold, and Landed Cost to that amount plus any freight you absorb.
  4. Receive the consigned stock into that location, so the receipt carries the supplier and the unit cost. See Receive stock from a supplier.
  5. Report on sales of those products, and on the receipts into that location, to work out what to remit each period.

:::warning Stock locations take part in fulfillment, and three settings decide whether a new one starts filling online orders. They sit on three different records, which is easy to get wrong:

  • Online Fulfillment Options on the Stock Location, which sets the delivery types it serves.
  • Fulfill Online Orders on each Stock Level, which is what actually decides whether that product at that location can serve the web store.
  • Priority on the Store Stock Location, the record linking the location to a store, which decides the order locations are drawn from.

Set all three deliberately when you add a consignment location, or consigned stock may start filling orders you intended to fill from stock you own. See Manage stock levels. :::

The distinction consignment needs and StoreConnect does not model directly is ownership: consigned stock appears in your inventory valuation alongside stock you own. Separating it by location is what lets you subtract it again, so decide the location structure before you receive the first consignment.

Serialized items are held as Asset records, and the Asset object has no supplier field. Where you need to know which supplier a specific serial number came from, add the field yourself. Because StoreConnect runs on Salesforce, this is ordinary configuration rather than a product change.

  1. In Salesforce Setup, open Object Manager and select Asset.
  2. Create a new field of type Lookup Relationship to Account, named Supplier.
  3. Add a lookup filter on the field so it only offers supplier accounts: Is Supplier (s_c__Supplier__c) equals True. This stops staff picking a customer by mistake.
  4. Add the field to the Asset page layout.
  5. Populate it as you receive each unit.

Reports, list views, and roll-ups work on the new field straight away, so you can report warranty claims or fleet cost by supplier with no further setup.

To read the field on a POS device, name it in a POS Layout Field, POS Layout Filter, or the layout’s Sort, then create a Custom Data Mapping with Object API Name Asset and Field API Name Supplier__c, and resync. A read-only mapping is enough unless the POS needs to write the value back. See POS layouts and Custom data fields in Liquid.

:::note There is no Asset drop in Liquid, so you cannot read the field as asset.supplier in a theme template. Asset does sync to the site database, so query it instead. Test the query in your own org before you build a page on it, since what a query returns depends on your sync configuration. See Liquid query. :::

Cost a rental fleet

Rental products are held as Asset records with serial numbers, and each rental charges per term unit for the number of terms booked. See Configure rental products.

Out of the box the supplier link for a rental item sits on the product rather than the individual unit. Create a Supplier Account record for the rental product, and its Landed Cost gives you the delivered cost of one unit of the fleet. Compare that against the rental revenue the product earns to work out how long a unit takes to pay for itself, and which lines are worth restocking.

Where you need the acquisition cost of one specific serial number, record it when you receive the unit. The Unit Cost on a manual stock adjustment item captures what that receipt cost. See Receive stock from a supplier. To track which supplier each individual unit came from, add a supplier field to the Asset object. See Link a supplier to an individual asset.

Rentals and special orders both appear in the Pickups section of the POS register, and the suppliers list is useful next to it: when a customer returns a rental asset damaged, staff need the supplier’s contact details to arrange a repair or replacement.

Read supplier data in Liquid

The Supplier Account object is queryable from a template, but the commercial terms are not. Only some of its columns sync to the site database, so a query returns the join and nothing you pay.

```liquid

{%- query ‘s_c__Product_Supplier__c’ as links, s_c__product_id__c: product.id %}

{%- for link in links %} {%- query ‘account’ as accounts, sfid: link.s_c__account_id__c %} {%- for a in accounts %}{{ a.name }}{%- endfor %} {%- endfor %} ```

The join record’s own name is an auto-number like SupplierAccount-000001, not the supplier’s name, which is why the second query is needed. Cache the result if you render it on a product page.

These are the fields a template can read:

Field Notes
sfid The record id
name The record name, an auto-number such as SupplierAccount-000001
s_c__sc_id__c StoreConnect external id
s_c__account_id__c The supplier Account
s_c__product_id__c The product
custom_data Any fields you expose with a Custom Data Mapping
createddate, lastmodifieddate, systemmodstamp Record timestamps

There is no ProductSupplier drop, so rows come back as generic records rather than with named attributes. Use this to show which supplier or brand provides a product, where that is useful to customers.

Cost data cannot reach the storefront

Purchase Price, Landed Cost, Minimum Order Quantity, Units Of Measure, and Supplier Phone do not sync to the site database. No column exists for them, so no query and no drop can return them. This is a property of the sync schema rather than a convention you could work around, and you should not try to route around it by copying those values onto a product with a custom data mapping.

:::note The StoreConnect administrator and sync permission sets grant field-level access to the cost fields in Salesforce, and the package sends them in its outbound sync payload. Neither is evidence that the values reach your website: with no destination column on the site side, they land nowhere. Do not read the permission set as a sign the data is exposed. :::

Two supplier-related values are available to themes, and both are safe to display:

Liquid Salesforce field Notes
product.supplier_code Product2.s_c__Supplier_Code__c The supplier’s own code for the product. Useful for parts lookups.
account.supplier_notes Account.s_c__Supplier_Notes__c Internal notes, intended for POS staff. Exposed on the Account drop, so keep them free of anything you would not show a customer.

Where you want to give business customers sourcing information, use signals that carry no cost data: stock availability, backorder status, and lead times. See Backorders and Quote requests.

Once you have supplier records in place, your product records show where each item comes from and what it costs you, and you can reorder against real terms rather than from memory.

Was this article helpful?

Was this article helpful?