On this page

Bookkeep now offers **Per-Fulfillment Revenue Recognition for Shopify**, giving merchants greater flexibility in how and when revenue is recognized.

This new feature allows revenue to be recognized **as individual fulfillments are completed**, rather than waiting for the entire order to reach a Fulfilled status.

## How It Works

The Ecommerce Journal Entry Mapping

For entities that recognize revenue upon fulfillment, the **Gross Sales, Discounts, Returns, Gift Cards Issued, and Shipping Income** lines in this journal entry should be mapped to a **deferred revenue account**. This is because the Ecommerce journal entry works together with the **Fulfillment Revenue Recognition** entry (described below) to ensure revenue is recognized correctly.

Additionally, the **same deferred revenue account** used in the Fulfillment Revenue Recognition entry should also be used in the Ecommerce entry to maintain consistency.

### Previous (Order-Based) Method

Under the traditional order-based model:

- Revenue is not recognized until the **entire order** reaches a status of **Fulfilled**
- Partial shipments do not trigger partial revenue recognition
- All line items are recognized together once the order is fully fulfilled

This approach works well for businesses that only want revenue recognized once the full order lifecycle is complete.

## New: Per-Fulfillment Revenue Recognition

With this new feature enabled:

- Revenue is recognized **each time a fulfillment is completed**
- Only the **line items included in that specific fulfillment** are recognized
- Revenue is recorded incrementally as shipments occur

### Example:

If an order contains 5 items and:

- 2 items are fulfilled today
- 3 items are fulfilled next week

Revenue will be recognized in two stages, aligned with the actual fulfillment timing.

## Handling Cancellations and Returns

Under this new flow:

- If a fulfillment that was previously recognized is **cancelled**
- Or if fulfilled items are **returned**

The reversal occurs **independently of the overall order’s fulfillment status**.

This ensures revenue and reversals are accurately aligned with operational activity — not just order status.

## Non-Physical Items

Items not tied to a specific fulfillment (such as **digital goods or shipping income**) will continue to be recognized when the **order reaches Fulfilled status**.

This maintains appropriate handling for products that do not follow a physical fulfillment workflow.

## Important Note on Historical Data

Bookkeep does **not advise or allow running historical data** for the **fulfillment-based revenue recognition journal entry**.

This limitation is due to constraints in Shopify’s data model that make historical fulfillment recognition unreliable:

- Shopify does **not expose historical timestamps** for when an order first reached a _fulfilled_ status.
- Shopify also does **not provide timestamps or events** indicating when fulfillment status reverts back to _unfulfilled_ or _partially fulfilled_ due to order edits or cancelled fulfillments.

Because fulfillment status can change retroactively — and Shopify does not provide a complete historical audit trail of those changes — attempting to backfill fulfillment-based revenue recognition can result in **inaccurate or misleading accounting data**.

For this reason, fulfillment-based revenue recognition in Bookkeep is designed to run **prospectively only**, beginning from the point it is enabled, ensuring accuracy and consistency going forward.

## How to Enable Per-Fulfillment Recognition

This feature is managed from the **My Apps** tab on the Connections page.

1. Locate the Shopify fulfillment revenue recognition journal entry.
2. Click **Map** on the right. This will open a modal window.
3. At the top of the modal, you’ll see **Recognition Method** with two options:
   - **Order Level** – Recognizes all revenue once the order reaches _Fulfilled_ status.
   - **Fulfillment Level** – Recognizes revenue as each fulfillment is created. Any remaining items not tied to a fulfillment are recognized when the order reaches _Fulfilled_ status.

Select the method that best aligns with your accounting preferences and save your changes.

## Why Use Per-Fulfillment Recognition?

Per-fulfillment recognition may be beneficial if:

- You ship orders in multiple batches
- You operate across multiple warehouses
- You want revenue timing aligned with shipment activity
- You need more precise matching of revenue and cost of goods sold
- You want operational and financial reporting aligned in real time

## Flexible Revenue Recognition for Growing Shopify Businesses

Bookkeep’s new per-fulfillment recognition option gives Shopify merchants the flexibility to:

- Recognize revenue as it is earned
- Improve financial accuracy for partial shipments
- Maintain proper handling of cancellations and returns
- Adapt revenue workflows without requiring custom development

By choosing the recognition method that best fits your business, you can ensure your accounting reflects how your operations truly function.
