Setting up payment terms in B2B

Payment terms define how long a company has to pay for an order. You can set payment terms for each company location. After you set payment terms, B2B customers can view these terms on any orders they place through your online store.

You can also use payment terms when you create a draft order for a B2B customer.

To give you more flexibility with payments, you can set up a deposit requirement as part of your payment terms. This lets you to collect partial payment for an order when it's created, and the rest at a later date. Deposit requirements can be set up on any company location and on draft orders.

Payment term types

You can set up different payment terms for company locations and draft orders.

Review the following table to learn the different payment terms that you can set up for company locations and on draft orders:

Payment term types
Payment termDescriptionCan be set on
No payment termsPayment is due immediately. This is the default setting.Company location and individual draft orders.
Net (period)
  • Payment is due within a specific time period that you select. The available terms are net 7, net 15, net 30, net 45, net 60, and net 90. All terms start from the day the order is placed.
    For example, if you select net 30 terms, then customers need to pay for their orders within 30 days.
  • Company location and individual draft orders.
    Due on fulfillment
  • Payment is due after all items in the order are fulfilled.
  • Company location and individual draft orders.
    Fixed date
  • Payment is due on a specific calendar date in either the past or future.
    For example, payment is due on January 27, 2026.
  • Individual draft orders.

    Set up payment terms for a company location

    You can set up payment terms for a specific company location.

    Steps:

    1. From your Shopify admin, go to Customers > Companies.

    2. Click a company that you want to set up payment terms for.

    3. In the Locations section, click a company location that you want to set up payment terms for.

    4. In the Payment terms section, click the pencil icon.

    5. From the drop-down menu, select a payment term type.

    6. Optional: Set up a deposit for your payment terms:

      1. Select Require deposit on orders created at checkout.
      2. Enter a percentage amount deposit requirement, such as 20%.
    7. Click Save.

    Set up payment terms for a company

    You can set up payment terms for all locations in a company.

    Steps:

    1. From your Shopify admin, go to Customers > Companies.

    2. Click a company that you want to set up payment terms for.

    3. In the Payment terms section, click the pencil icon.

    4. From the drop-down menu, select a payment term type.

    5. Optional: Set up a deposit for your payment terms:

      1. Select Require deposit on orders created at checkout.
      2. Enter a percentage amount deposit requirement, such as 20%.
    6. Click Save.

    Set up payment terms for companies in bulk

    You can set up payment terms for multiple companies at the same time from the Companies page.

    Steps:

    1. From your Shopify admin, go to Customers > Companies.

    2. Use the checkboxes to select the companies that you want to set up payment terms for.

    3. Click Edit payment terms.

    4. From the drop-down menu, select a payment term type.

    5. Optional: Set up a deposit for your payment terms:

      1. Select Require deposit on orders created at checkout.
      2. Enter a percentage amount deposit requirement, such as 20%.
    6. Click Save.

    Collecting payment for orders on payment terms

    Customers don’t have to wait until the payment terms on an order expire to pay for the order. During the payment term period, B2B customers can log in to customer accounts, select an order, and pay for it by clicking Pay now. Customers can do this any time after the order is placed up until the due date. After the terms expire, customers can still make payments but the order displays as Overdue in customer accounts.

    Payments aren’t automatically captured when the payment terms expire. For example, if a B2B customer saves a credit card for an order, then you must manually capture the payment by charging that credit card in your Shopify admin.

    Adding deposits to payment terms for B2B

    If you want to collect partial payment for an order upfront and the rest at a later date, then you can require a percentage deposit as part of the payment term. B2B customers need to pay the deposit amount when they place an order at checkout. Deposits can be paid with a credit card or manual payment method, such as a bank deposit.

    To require a deposit on all orders, you can set up a deposit requirement for all locations in a company or for a specific company location. If you want to collect deposits only on specific orders, then you can also set a deposit requirement on draft orders.

    After a deposit has been captured, the order’s payment status changes to Partially paid in your Shopify admin. If your customer pays a deposit with a manual payment method, then the order status changes to Payment pending until you record the manual payment on the order in your Shopify admin.

    Draft orders and deposits

    You can add a deposit requirement to a draft order that you or your staff create, and then send an invoice to your customer to request payment for the deposit.

    If a company location is set to submit orders for review and has a deposit requirement, then your customers are presented with the deposit amount at checkout, but it’s not captured immediately. The order is submitted as a draft order for you to review. After you confirm the order, you can charge a credit for the deposit, record payment received by manual payment method, or send an invoice to your customer for payment. After payment has been recorded, the order’s payment status changes to Partially paid

    Customer experience for B2B deposits

    Customers can view the deposit amount and the due date for the outstanding balance at checkout, on the thank you page, and when they view the order in customer accounts. If you or your staff create a draft order with a deposit, then the deposit amount is also displayed on the invoice that you send to the customer.

    Update the Draft order invoice email notification for deposits

    If your store uses customized notification templates, then you might need to update your Draft order invoice notification manually to ensure that deposits are displayed in the Draft order invoice notification.

    These changes require familiarity with the code that is used in Shopify's notification templates. If your templates are highly customized and you're not sure how to apply the necessary changes, then contact the developer that made the changes or click Revert to default to restore your template to its original state. Reverting to default removes any customizations you have made, but reverting to default ensures that your templates are the most current version.

    Before you make any changes, back up your template by copying and pasting it into another document, such as Google Docs. After you make changes, click Preview to review your changes and ensure that they function as expected before you click Save.

    Steps:

    1. From your Shopify admin, go to Settings > Notifications.

    2. Click Customer notifications.

    3. In the Order processing section, click Draft order invoice.

    4. Click Edit code.

    5. Locate the section of the code that begins with {% if payment_terms %}, and then replace the section below up to {% endif %} with the following code snippet:

    <tr class="subtotal-line">
      <td class="subtotal-line__title">
        <p>
          <span>Total due today</span>
        </p>
      </td>
      <td class="subtotal-line__value">
          <strong>{{ amount_due_now | money_with_currency }}</strong>
      </td>
    </tr>
    
            <div class="payment-terms">
              {% assign next_payment = payment_terms.next_payment %}
              {% assign due_at_date = next_payment.due_at | date: format: 'date' %}
              {% assign next_amount_due = total_price | minus: amount_due_now %}
    
              {% if payment_terms.type == 'receipt' %}
    
    <tr class="subtotal-line">
      <td class="subtotal-line__title">
        <p>
          <span>Total due on receipt</span>
        </p>
      </td>
      <td class="subtotal-line__value">
          <strong>{{ next_amount_due | money_with_currency }}</strong>
      </td>
    </tr>
    
              {% elsif payment_terms.type == 'fulfillment' %}
    
    <tr class="subtotal-line">
      <td class="subtotal-line__title">
        <p>
          <span>Total due on fulfillment</span>
        </p>
      </td>
      <td class="subtotal-line__value">
          <strong>{{ next_amount_due | money_with_currency }}</strong>
      </td>
    </tr>
    
              {% else %}
    
    <tr class="subtotal-line">
      <td class="subtotal-line__title">
        <p>
          <span>Total due {{ due_at_date }}</span>
        </p>
      </td>
      <td class="subtotal-line__value">
          <strong>{{ next_amount_due | money_with_currency }}</strong>
      </td>
    </tr>
    1. Optional: To preview your changes, click Preview.
    2. Click Save.
    Can’t find the answers you’re looking for? We’re here to help.