Structured Data Guide

Ecommerce Product Condition Structured Data

AI shopping agents use the itemCondition field in JSON-LD as a hard filter for condition-specific queries. A refurbished laptop without RefurbishedCondition in its structured data won't appear in "refurbished laptop" AI recommendations — regardless of how well its title and description match the query.

TL;DR Always set itemCondition on every Offer block. For new products: NewCondition. For refurbished/certified pre-owned: RefurbishedCondition. For used/secondhand: UsedCondition. For open-box, use RefurbishedCondition + a description qualifier. Shopify's default JSON-LD omits this field — set it explicitly in your theme's product JSON-LD snippet.

The schema.org OfferItemCondition Enum

Value Full URL When to use AI agent behavior
NewCondition schema.org/NewCondition Brand new, unused, in original packaging Default for most product queries; appears in all new-product results
RefurbishedCondition schema.org/RefurbishedCondition Professionally restored, tested, cleaned — may include warranty Surfaces for "refurbished", "certified pre-owned", "renewed" queries
UsedCondition schema.org/UsedCondition Previously owned, as-is or lightly used Surfaces for "used", "secondhand", "pre-owned" queries
DamagedCondition schema.org/DamagedCondition Has known defects, damage, or missing components Niche surfacing for "for parts", "cosmetic damage" queries
OldCondition schema.org/OldCondition Vintage, antique, or no longer manufactured Surfaces for vintage/antique category queries

Implementing itemCondition in Shopify JSON-LD

Basic condition from product tag or metafield

Shopify doesn't have a native condition field. The two common approaches are a product tag ("condition:new", "condition:refurbished") or a metafield (product.metafields.custom.condition). Both work well in Liquid:

{%- comment -%}
  Approach 1: Use a product tag in format "condition:value"
  Tag examples: "condition:new", "condition:refurbished", "condition:used"
{%- endcomment -%}
{%- assign condition_url = 'https://schema.org/NewCondition' -%}
{%- for tag in product.tags -%}
  {%- if tag contains 'condition:' -%}
    {%- assign condition_val = tag | remove: 'condition:' | strip | downcase -%}
    {%- if condition_val == 'refurbished' -%}
      {%- assign condition_url = 'https://schema.org/RefurbishedCondition' -%}
    {%- elsif condition_val == 'used' -%}
      {%- assign condition_url = 'https://schema.org/UsedCondition' -%}
    {%- elsif condition_val == 'damaged' -%}
      {%- assign condition_url = 'https://schema.org/DamagedCondition' -%}
    {%- elsif condition_val == 'old' or condition_val == 'vintage' -%}
      {%- assign condition_url = 'https://schema.org/OldCondition' -%}
    {%- endif -%}
    {%- break -%}
  {%- endif -%}
{%- endfor -%}

"itemCondition": {{ condition_url | json }}

Approach 2: Metafield-based condition

{%- comment -%}
  Create a metafield: product.metafields.custom.condition
  with values: "new", "refurbished", "used", "damaged", "vintage"
{%- endcomment -%}
{%- assign condition_meta = product.metafields.custom.condition | downcase -%}
{%- case condition_meta -%}
  {%- when 'refurbished' -%}{%- assign condition_url = 'https://schema.org/RefurbishedCondition' -%}
  {%- when 'used' -%}{%- assign condition_url = 'https://schema.org/UsedCondition' -%}
  {%- when 'damaged' -%}{%- assign condition_url = 'https://schema.org/DamagedCondition' -%}
  {%- when 'vintage', 'old' -%}{%- assign condition_url = 'https://schema.org/OldCondition' -%}
  {%- else -%}{%- assign condition_url = 'https://schema.org/NewCondition' -%}
{%- endcase -%}

"itemCondition": {{ condition_url | json }}

Multi-Condition Catalogs

Stores selling both new and refurbished versions of the same product should create separate Offer blocks — one per condition — rather than using a single Offer with a condition that describes both:

"offers": [
  {
    "@type": "Offer",
    "name": "New",
    "price": "{{ new_price }}",
    "priceCurrency": "USD",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock"
  },
  {
    "@type": "Offer",
    "name": "Certified Refurbished",
    "price": "{{ refurb_price }}",
    "priceCurrency": "USD",
    "itemCondition": "https://schema.org/RefurbishedCondition",
    "availability": "https://schema.org/InStock",
    "description": "Professionally refurbished. 90-day warranty included."
  }
]

This dual-offer pattern lets AI agents recommend the appropriate tier: a "refurbished DSLR" query recommends the RefurbishedCondition Offer, while a "new DSLR" query recommends the NewCondition Offer — from the same product page.

Condition-Specific Description Patterns

AI agents extract condition context from both the structured itemCondition value and the surrounding Offer and product description text. For maximum coverage, include explicit condition language in description fields:

Condition Recommended description language
RefurbishedCondition "Professionally refurbished. Tested to manufacturer specifications. [N]-day warranty. May show light cosmetic wear."
UsedCondition (Good) "Used — Good condition. Functional and fully tested. Normal signs of use. No major damage."
UsedCondition (Fair) "Used — Fair condition. Functional. Shows visible wear including [specific details]. Sold as-is."
Open box (as RefurbishedCondition) "Open box — opened but unused. All original accessories included. Full manufacturer warranty applies."
DamagedCondition "For parts or repair. [Specific defect description]. Does not power on / [issue]. Sold as-is, no returns."

Condition and Return Policy Interaction

AI agents correlate product condition with return policy signals. Refurbished products with no return policy are surfaced less confidently by ChatGPT Shopping and Perplexity Shopping than refurbished products with explicit warranty or return terms. The interaction:

itemCondition MerchantReturnPolicy present? AI agent confidence
NewCondition Yes (30-day return) High
RefurbishedCondition Yes (90-day warranty) High
RefurbishedCondition No return policy specified Medium
UsedCondition Yes (14-day return) Medium
UsedCondition or DamagedCondition No / final sale Lower — note "final sale" in description

Product Condition Structured Data Checklist

# Check Priority
1 itemCondition field is present on every Offer block Critical
2 Refurbished/used products use the correct schema.org URL (not a plain text string like "used") Critical
3 Multi-condition products have separate Offer blocks per condition with distinct prices High
4 Condition context in Offer description matches the itemCondition value High
5 Refurbished products have associated MerchantReturnPolicy or warranty description High
6 Open-box products identified as RefurbishedCondition + "open box" qualifier in description Medium
7 DamagedCondition products include specific defect description to prevent misleading recommendations Medium
8 Condition stored in consistent metafield or tag format for scalable Liquid output Medium

Related Resources

Frequently Asked Questions

What schema.org values are valid for product condition?

schema.org defines five OfferItemCondition values: NewCondition (brand new), RefurbishedCondition (professionally restored), UsedCondition (previously owned), DamagedCondition (has known defects), and OldCondition (no longer manufactured). Always use the full URL format: https://schema.org/NewCondition, etc.

Do AI shopping agents filter by product condition?

Yes, directly. AI shopping agents use itemCondition as a hard filter for condition-specific queries like "refurbished MacBook" or "used camera." Missing itemCondition defaults to NewCondition in most agent interpretations — incorrect for used/refurbished sellers and causes those products to be excluded from condition-specific searches.

How should I handle open-box condition in Shopify JSON-LD?

schema.org does not have an official OpenBoxCondition type. Use RefurbishedCondition if the item has been professionally inspected, or NewCondition with a qualifier in the Offer description: "Open box — tested, unused, full warranty applies." AI agents that parse offer descriptions can surface the "open box" qualifier even when the structured type is RefurbishedCondition.

Does product condition in JSON-LD affect Google Shopping listings?

Yes. Google Shopping's Product data specification requires itemCondition for non-new products. Missing condition data on used or refurbished products causes "Missing or invalid value [condition]" errors in Google Merchant Center and can result in disapproved listings. Setting it correctly also helps Google's AI shopping features properly categorize your listings in condition-filtered searches.

Audit Product Condition Across Your Catalog

CatalogScan checks every Offer block for missing or incorrect itemCondition values — including refurbished products incorrectly labeled as NewCondition and used products with no condition signal at all.

Scan your store free