> ## Documentation Index
> Fetch the complete documentation index at: https://www.twicecommerce.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# How to create and publish a listing

> Build a listing from an empty form to something a customer can buy — the fields that matter, connecting stock, pricing, publishing, and checking it on the storefront.

<Card title="Open in TWICE Admin" icon="external-link" href="https://admin.twicecommerce.com/catalog/listings" horizontal>
  catalog/listings
</Card>

A listing is the offer a customer sees and buys. It is not the stock — the units live in Inventory, and the listing points at them.

Creating one is a form. Making it *sellable* is four separate decisions that live on four different tabs, and a listing missing any one of them looks finished in the admin and does nothing on the storefront. This guide is those four in order, and the check at the end that tells you whether you got them all.

## Prerequisites

<Warning>
  **Required permissions:** listing create and manage rights. All four system roles hold them.
</Warning>

<Info>
  **Have ready before you start:**

  * **The stock it sells** — registered, at the right location, with something consistent to match on. A listing with nothing behind it cannot be booked. See [Register stock items](/docs/guides/inventory/register-stock-items).
  * **How it is priced** — by duration, as a flat sale, on a shared rate card.
  * **Where it is sold** — which channels and which locations.
</Info>

## The Walkthrough

<Steps>
  <Step title="Create it and fill in the General tab">
    From **Catalog > Listings**, create a listing. The **General** tab is what the customer reads:

    | Field             | What it is for                                                            |
    | ----------------- | ------------------------------------------------------------------------- |
    | **Title**         | What customers see. This is the storefront name                           |
    | **Internal name** | What your staff see when it differs from the customer-facing title        |
    | **Category**      | Where it sits in the taxonomy                                             |
    | **Description**   | The main body copy                                                        |
    | **Media**         | Images. Used stock in particular sells on these                           |
    | **Sections**      | Extra content blocks, each a **Heading** and **Content**, reorderable     |
    | **Tax rates**     | Which rate applies. *No tax rates defined* means you have none set up yet |

    Leave **Status** on **Draft** while you work. Nothing below is visible to customers until you change it, and switching to **Public** with the rest unfinished is how a broken listing reaches the storefront.
  </Step>

  <Step title="Connect the stock that fulfils it">
    On the **Fulfilment** tab, turn **Inventory Tracking** on and write a rule that matches the units this listing sells.

    Check the rule's live **matches in inventory** count before moving on. Zero means the listing can never be booked, and it is far cheaper to find that here than from a customer.

    If the listing has no physical unit behind it — delivery, insurance, a service fee — leave Inventory Tracking off instead, and it will show **Unlimited availability**.

    Read more: [Listing Fulfillment tab](/docs/catalog/listings/fulfillment)
  </Step>

  <Step title="Price it">
    On the **Pricing** tab, set what it costs. Duration-based pricing for rentals, a flat price for a sale, or a shared price table if several listings use the same rate card.

    A listing with no price is not sellable, and this is the tab people skip when they are in a hurry to publish.

    Read more: [Price tables](/docs/concepts/catalog/price-tables)
  </Step>

  <Step title="Publish it">
    The **Publishing** tab has three cards, and they narrow the audience in different ways:

    * **Sales channels** — where it can be sold. **Admin** lets staff create orders with it; **Online store** puts it on the storefront. A listing on neither shows the alert *This listing isn't sold on any sales channel* and is unreachable everywhere.
    * **Store locations** — which locations show this listing in their catalog. A listing available at no location is available to nobody.
    * **Customer tags** — which customer groups it is available to. Leave it open unless you are deliberately restricting.

    Then set **Status** to **Public** on the General tab. Status is account-wide: it governs the listing everywhere, and it is not a per-location control — that is Store locations.
  </Step>

  <Step title="Check it on the storefront">
    Two ways, and they answer different questions.

    **Open preview** shows the listing page in a drawer inside the admin. It is preview-only — the booking action is disabled — and a banner notes the styling may differ from your storefront theme. Good for checking copy, images, and pricing quickly.

    **Open in storefront** opens the real thing. That is the one that proves publishing worked, because a listing that is not properly published will not be there at all.

    Do the second before you call it done.
  </Step>
</Steps>

## How do I know it worked?

* **The listing opens in the storefront** at the location you sell from — not just in preview.
* **It shows a price**, and the price is the one you set.
* **It can be added to a booking** for real dates.
* **The Fulfilment tab's match count is non-zero** and the stock behind it is at the right location.

If it is missing from the storefront, work down the pitfalls — it is almost always one of the four decisions above, left undone.

## Troubleshooting / Common Pitfalls

<AccordionGroup>
  <Accordion title="The listing is not on the storefront at all">
    **Four things to check, in this order** — they are the four decisions, and the answer is nearly always one of them:

    1. **Status** is still **Draft** rather than **Public**.
    2. **Sales channels** does not include Online store. The alert on that card says so outright.
    3. **Store locations** does not include the location you are looking at.
    4. **Customer tags** restrict it to a group you are not in.

    Preview will happily render a listing that fails 2, 3, or 4, which is why it is not the check that counts.
  </Accordion>

  <Accordion title="It is on the storefront but cannot be booked">
    **Cause:** publishing succeeded and fulfilment did not. The listing is visible, and nothing is behind it.

    **What to do:** check the Fulfilment tab's match count. Zero means the rule matches no stock. If it matches units, work through [Check availability](/docs/guides/inventory/check-availability) — the location may not offer the right fulfilment for the purchase type.
  </Accordion>

  <Accordion title="It shows at one location but not another">
    **Expected — that is what Store locations is for.** Status governs the listing everywhere; Store locations decides where it appears.

    **What to do:** add the missing location on the Publishing tab. If it is already there, the location may not offer the right fulfilment for this purchase type, which refuses the listing while the stock sits visible.
  </Accordion>

  <Accordion title="Preview looks wrong compared with the live storefront">
    **Expected.** The preview banner says so: the styling may differ from your storefront theme. Preview is for copy, images and pricing, not for judging the design.

    **What to do:** use **Open in storefront** for anything visual.
  </Accordion>

  <Accordion title="Staff can add it to orders but customers cannot see it">
    **Cause:** the listing is on the **Admin** sales channel but not **Online store**. That is a legitimate setup — staff-only listings are a real thing — but it catches people who expected publishing to mean both.

    **What to do:** enable Online store on the Sales channels card if customers should see it.
  </Accordion>

  <Accordion title="The title on the storefront is not the one my staff use">
    **Working as designed.** **Title** is customer-facing; **Internal name** is what staff see. If they have drifted apart, that is the two fields doing their job.

    **What to do:** set both deliberately. Internal name earns its keep when the customer-facing title is marketing copy that nobody in the warehouse would recognise.
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Listing Fulfillment tab" icon="table-list" href="/docs/catalog/listings/fulfillment">
    Binding the listing to the stock that fulfils it.
  </Card>

  <Card title="Price tables" icon="table-cells" href="/docs/concepts/catalog/price-tables">
    Shared rate cards across several listings.
  </Card>

  <Card title="Listings" icon="list" href="/docs/concepts/catalog/listings">
    What a listing is in the data model.
  </Card>

  <Card title="Check availability" icon="calendar-check" href="/docs/guides/inventory/check-availability">
    When it is published but still cannot be booked.
  </Card>
</CardGroup>
