Optimization Guide

Shopify B2B Net Payment Terms Schema — Net-30/60/90, Invoice Billing & paymentTerms Markup

AI procurement agents handling B2B sourcing queries like "wholesale office supplies supplier net-30 terms" or "distributor accepting purchase orders net-60" need machine-readable payment term signals — and Shopify's default JSON-LD outputs zero payment method or terms information. Payment terms are one of the top three filter criteria B2B buyers apply when evaluating suppliers, alongside pricing and minimum order quantities. Without structured paymentTerms and acceptedPaymentMethod markup, your Shopify store is invisible to any AI procurement workflow that filters on payment conditions.

TL;DR Add acceptedPaymentMethod: "https://schema.org/ByInvoice" on B2B Offer objects to signal invoiced payment. Add paymentTerms: "Net 30" (or "Net 60", "Net 90", "2/10 Net 30") as a string property on the same Offer. For store-level payment signals, add paymentAccepted on the Organization entity. Use a potentialAction of type ApplyAction on the Organization to link to the trade credit application form. Gate net-terms Offers behind customer tag authentication.

The Payment Terms Gap in Shopify Default JSON-LD

Shopify's default product JSON-LD focuses on the retail transaction layer: product name, price, availability, and a handful of variant properties. It does not output any payment method or terms information — this entire dimension of the B2B buying decision is absent from your store's machine-readable surface.

For B2B procurement workflows, payment terms are often a hard filter, not a preference. A procurement manager with a company purchasing policy requiring net-30 minimum will exclude any supplier who cannot confirm payment terms before committing. AI procurement agents increasingly implement this as a literal filter: "show me office supplies suppliers with net-30 or better payment terms, MOQ under 50 units." Without structured data, your store fails this filter even if you do offer net-30 terms.

Schema.org payment properties for B2B

Property Applied to B2B use Example value
acceptedPaymentMethod Offer Payment channel for this specific offer https://schema.org/ByInvoice
paymentTerms Offer Payment timing conditions (net days, early pay discount) "Net 30", "2/10 Net 30"
paymentAccepted Organization / LocalBusiness All payment methods the business accepts (store level) "Invoice, Credit Card, ACH, Check"
potentialAction (ApplyAction) Organization Links to trade account / net terms application URL to trade account application form
eligibleCustomerType Offer Restricts invoiced offer to B2B buyers https://schema.org/BusinessAudience
description Offer Plain-text payment terms for AI extraction fallback "Net 30 available to approved accounts…"

acceptedPaymentMethod: ByInvoice and the Full PaymentMethod Vocabulary

Schema.org defines PaymentMethod as a controlled vocabulary enumeration. The relevant values for B2B commerce are:

PaymentMethod URL Meaning B2B use case
https://schema.org/ByInvoice Payment via invoice after delivery — net terms Net-30/60/90 trade accounts; the primary B2B payment signal
https://schema.org/ByCreditCard Payment via credit/debit card Card-on-file for B2B accounts; corporate card buyers
https://schema.org/ByBankTransferInAdvance Bank wire transfer before shipment International B2B orders; first-order risk mitigation
https://schema.org/COD Cash on delivery New accounts before credit approval; cash-preferred buyers
https://schema.org/Check Payment by physical check US B2B buyers on traditional accounts payable workflows

For a store offering multiple payment options, acceptedPaymentMethod accepts an array: "acceptedPaymentMethod": ["https://schema.org/ByInvoice", "https://schema.org/ByCreditCard", "https://schema.org/Check"]. Output the full array on the B2B Offer to give AI agents the complete picture of payment flexibility.

paymentTerms: Standard B2B Payment Term Strings

The paymentTerms property is a free-text string, but AI procurement agents trained on B2B commerce are calibrated to recognize standard payment term notation. Use these canonical forms:

Standard notation Meaning AI query this matches
Net 30 Full payment due 30 days after invoice date "suppliers with net-30 terms," "net 30 payment"
Net 60 Full payment due 60 days after invoice date "net-60 wholesale supplier," "60-day payment terms"
Net 90 Full payment due 90 days after invoice date "net-90 distributor," "extended payment terms"
2/10 Net 30 2% discount if paid within 10 days; full amount due in 30 "suppliers with early pay discount," "2/10 net 30"
1/15 Net 30 1% discount if paid within 15 days; full amount due in 30 "early payment discount," "prompt pay discount"
EOM 30 Payment due 30 days after end of month of invoice "end-of-month terms," "EOM payment"
COD Cash or check on delivery — no credit extended "cash on delivery," "no net terms required"
Prepaid Full payment required before shipment "prepay supplier," "payment in advance"
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Premium Kraft Paper Bags — 10×5×13 — White — Pack of 250",
  "description": "White kraft paper bags with twisted paper handles. 10×5×13 inches. Pack of 250 units. FDA food-safe. Suitable for retail packaging and gift wrapping.",
  "sku": "KRAFT-BAG-WH-1013-250",
  "brand": { "@type": "Brand", "name": "PackRight Supplies" },
  "offers": [
    {
      "@type": "Offer",
      "name": "Retail Price — Single Pack",
      "price": "49.99",
      "priceCurrency": "USD",
      "availability": "https://schema.org/InStock",
      "eligibleCustomerType": "https://schema.org/EndUserAudience",
      "acceptedPaymentMethod": ["https://schema.org/ByCreditCard"],
      "url": "https://example.com/products/kraft-bags-250pk"
    },
    {
      "@type": "Offer",
      "name": "Wholesale — Case of 10 Packs (2,500 units) — Net 30",
      "price": "399.99",
      "priceCurrency": "USD",
      "availability": "https://schema.org/InStock",
      "eligibleCustomerType": "https://schema.org/BusinessAudience",
      "valueAddedTaxIncluded": false,
      "acceptedPaymentMethod": [
        "https://schema.org/ByInvoice",
        "https://schema.org/ByCreditCard",
        "https://schema.org/Check"
      ],
      "paymentTerms": "Net 30",
      "description": "Net 30 payment terms available to approved trade accounts. New accounts begin with COD or card; net-30 terms extended after first 3 orders. Apply for a trade account at example.com/trade.",
      "eligibleQuantity": {
        "@type": "QuantitativeValue",
        "minValue": 10,
        "unitCode": "C62",
        "unitText": "packs"
      },
      "deliveryLeadTime": {
        "@type": "QuantitativeValue",
        "minValue": 2,
        "maxValue": 5,
        "unitCode": "DAY",
        "unitText": "business days"
      },
      "url": "https://example.com/wholesale/kraft-bags"
    }
  ]
}
</script>

Organization-Level Payment Signals

In addition to Offer-level signals, publish payment information on the seller Organization entity. This serves two purposes: (1) voice assistants and AI agents answering "does [company name] accept net terms?" can find the answer without crawling individual product pages; (2) AI procurement tools that evaluate supplier profiles aggregate payment capabilities from Organization-level data.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "PackRight Supplies LLC",
  "url": "https://example.com",
  "legalName": "PackRight Supplies LLC",
  "taxID": "47-1234567",
  "paymentAccepted": "Invoice (Net 30, Net 60 for approved accounts), Credit Card (Visa, Mastercard, Amex), ACH Bank Transfer, Business Check",
  "description": "Wholesale packaging supplier. Net-30 and net-60 payment terms available to approved trade accounts. New accounts: COD or card. Apply online for trade credit.",
  "potentialAction": [
    {
      "@type": "ApplyAction",
      "name": "Apply for Trade Account — Net Payment Terms",
      "description": "Apply for a PackRight trade account to access net-30 or net-60 invoice payment terms, volume pricing, and dedicated account management.",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://example.com/trade-account/apply",
        "actionPlatform": "https://schema.org/DesktopWebPlatform"
      }
    }
  ],
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "200 Warehouse Drive",
    "addressLocality": "Memphis",
    "addressRegion": "TN",
    "postalCode": "38101",
    "addressCountry": "US"
  }
}

The paymentAccepted string on Organization is intentionally human-readable, including the specific card networks and account approval conditions. AI agents extract this as a comprehensive payment capability description. The potentialAction of type ApplyAction is the key signal for "how do I get net terms?" — AI agents surface this link when buyers ask how to access invoiced payment.

Tiered Net Terms: Progressive Credit Based on Order History

Many B2B suppliers extend progressively better payment terms as buyer relationships mature — starting with COD or card for new accounts, advancing to net-30, then net-60 after established order history. This tiered structure is best represented with multiple Offer objects gated by customer account status.

{% comment %} b2b-payment-terms.liquid — progressive net terms schema, Shopify customer tag gated {% endcomment %}
{% assign is_net30_eligible  = false %}
{% assign is_net60_eligible  = false %}
{% if customer %}
  {% for tag in customer.tags %}
    {% if tag == 'net-30-approved' or tag == 'net-60-approved' %}{% assign is_net30_eligible = true %}{% endif %}
    {% if tag == 'net-60-approved' %}{% assign is_net60_eligible = true %}{% endif %}
  {% endfor %}
{% endif %}

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "offers": [
    {
      "@type": "Offer",
      "name": "Standard Retail — Card Payment",
      "price": {{ product.selected_or_first_available_variant.price | money_without_currency | json }},
      "priceCurrency": {{ cart.currency.iso_code | json }},
      "eligibleCustomerType": "https://schema.org/EndUserAudience",
      "acceptedPaymentMethod": ["https://schema.org/ByCreditCard"],
      "availability": {% if product.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %}
    }
    {% if is_net30_eligible %}
    ,{
      "@type": "Offer",
      "name": "Wholesale — Net 30 Invoice",
      "price": {{ product.metafields.wholesale.net30_price | default: product.selected_or_first_available_variant.price | money_without_currency | json }},
      "priceCurrency": {{ cart.currency.iso_code | json }},
      "eligibleCustomerType": "https://schema.org/BusinessAudience",
      "acceptedPaymentMethod": ["https://schema.org/ByInvoice", "https://schema.org/ByCreditCard"],
      "paymentTerms": {% if is_net60_eligible %}"Net 60"{% else %}"Net 30"{% endif %},
      "valueAddedTaxIncluded": false,
      "availability": {% if product.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %}
    }
    {% endif %}
  ]
}
</script>

		

Customer tags net-30-approved and net-60-approved gate the invoiced Offer behind account approval status. This prevents unauthenticated visitors from seeing net terms pricing in page source while ensuring approved B2B accounts get the full structured payment terms in their JSON-LD context.

5 Common Net Payment Terms Schema Mistakes

# Mistake Impact Fix
1 No acceptedPaymentMethod or paymentTerms on any Offer AI procurement agents filtering for "suppliers with net-30 terms" cannot match your store even if you do offer net terms — the absence of structured data is treated as "payment terms unknown" and the store is excluded from filtered results Add acceptedPaymentMethod: "https://schema.org/ByInvoice" and paymentTerms: "Net 30" to every B2B Offer for accounts that have net terms approved
2 Using non-standard paymentTerms strings ("thirty days," "invoice net 30," "30 day terms") AI agents are calibrated to recognize canonical payment term notation. Non-standard variants may be parsed correctly by some agents but fail others — particularly domain-specific procurement AI trained on standardized B2B contracts Use canonical notation: "Net 30", "Net 60", "Net 90", "2/10 Net 30", "COD". These are the industry-standard strings in accounts payable systems and B2B procurement platforms
3 Publishing net-terms Offers without customer tag gating Net pricing and invoiced payment terms in public JSON-LD expose your wholesale pricing structure to competitors and violate typical wholesale account agreements that require seller approval before extending credit Gate ByInvoice and paymentTerms Offers behind Shopify customer tag authentication — output only for logged-in customers with the appropriate net-terms tag
4 Missing potentialAction on Organization for trade account application AI agents answering "how do I get net-30 terms from this supplier?" have no machine-readable path to the application process. This is a conversion bottleneck for AI-driven B2B lead generation Add an ApplyAction potentialAction on the Organization entity pointing to your trade credit application URL
5 Omitting early-pay discount terms (2/10 Net 30) Buyers with favorable cash positions actively seek suppliers offering early-pay discounts — it's a financing signal. Omitting "2/10 Net 30" from paymentTerms means you miss queries for suppliers offering prompt-pay incentives Include the full discount notation in paymentTerms if you offer it: "2/10 Net 30" for 2% discount if paid within 10 days

Frequently Asked Questions

What schema.org property signals net-30 or net-60 payment terms?

Use paymentTerms on the Offer with a standardized string: "Net 30", "Net 60", "Net 90", or "2/10 Net 30". Pair with acceptedPaymentMethod: "https://schema.org/ByInvoice" and eligibleCustomerType: "https://schema.org/BusinessAudience" for a complete B2B payment terms signal. For volume pricing and MOQ on the same B2B offer, see Shopify Wholesale & B2B Pricing Schema.

What is the difference between acceptedPaymentMethod and paymentTerms?

acceptedPaymentMethod specifies how payment is made (ByInvoice, ByCreditCard, Check). paymentTerms specifies when (Net 30, Net 60, 2/10 Net 30). AI procurement agents need both: the channel and the timing. For store-level payment signals, also add paymentAccepted to the Organization entity with all accepted methods listed as a human-readable string.

How do I signal that I offer trade credit on my Shopify store?

Add a potentialAction of type ApplyAction on your Organization entity, pointing to your trade account application form. Set the action name to "Apply for Trade Credit Account." This allows AI procurement agents to surface your application URL when buyers search for "suppliers offering net terms." See E-commerce Seller Organization Schema for the full Organization entity structure.

Should paymentAccepted go on the Offer or on the Organization?

Use both at different levels: paymentAccepted on the Organization for store-level payment capabilities (used by voice assistants and supplier profile tools). acceptedPaymentMethod on individual Offer objects for transaction-specific payment methods. The Offer-level signal is more important for procurement agent filtering.

How does ByInvoice differ from other PaymentMethod values?

ByInvoice specifically signals post-delivery invoiced payment — the buyer receives an invoice after delivery and pays within the agreed net period. This is distinct from ByBankTransferInAdvance (wire before shipment), ByCreditCard (card charge at checkout), and COD (cash/check on delivery). For B2B net terms specifically — where the seller extends trade credit — ByInvoice is the correct and canonical PaymentMethod value. For B2B member-exclusive pricing signals, see Shopify Member-Exclusive Product Schema.

Are your net payment terms invisible to AI procurement agents?

CatalogScan audits your Shopify store's structured data and identifies missing acceptedPaymentMethod, absent paymentTerms strings, and incomplete Organization-level payment signals — ensuring your B2B payment capabilities surface in AI procurement queries.

Run Free Scan

Related Resources