Revenue Recognition
Recognize revenue when you ship,
not when you capture payment.
ASC 606 / IFRS 15 compliant revenue recognition that happens automatically as you ship orders. No separate accounting software, no manual journal entries, no month-end reconciliation.
Customer stories
Trusted by finance teams at scaling brands.
“With Fulfil, our revenue recognition is basically automated.”
“The Fulfil team have been great partners, critical to our growth, and will continue to be critical to our growth into the future.”

“Fulfil is the way to go for us. If you're D2C, and you want control, you want omnichannel, you need to check out Fulfil.”
Why Revenue Recognition in Fulfil vs. Separate Accounting Software
For DTC brands: spreadsheets break as you scale. QuickBooks can't handle complex revenue recognition. NetSuite works but requires expensive setup and consultants. Fulfil handles revenue recognition as part of your operations, not a separate accounting exercise.
| Feature | Manual Spreadsheets | QuickBooks | NetSuite | Fulfil ERP |
|---|---|---|---|---|
| Revenue recognition | Manual journal entries for every order | Basic accrual, limited automation | Rev rec module, but expensive and complex setup | ✓ Automated GL posting as orders ship |
| Partial shipments | Prone to errors and timing issues | Can't handle partial shipments well | Requires consultant to configure | ✓ Handles partial shipments, backorders, returns automatically |
| Audit trail | No audit trail | Limited audit documentation | Full audit trail, but clunky interface | ✓ Complete audit trail from order to GL posting |
| Integration | Separate from operations | Requires integration or manual entry | Disconnected from actual shipments | ✓ Built into operations, shipment triggers revenue |
| Monthly effort | Hours of manual work monthly | Still requires manual reconciliation | Works, but painful to use | ✓ Zero manual work, happens automatically |
Revenue Recognition That Happens Automatically, Not at Month-End
No manual journal entries. No spreadsheet reconciliation. When warehouse staff mark shipments "Done," Fulfil recognizes revenue automatically with proper ASC 606 accounting. Finance teams see revenue in real-time, not weeks later during close.
ASC 606 / IFRS 15 compliant
Follow the 5-step revenue recognition framework automatically. Built for modern commerce with deferred revenue, performance obligations, and transaction price allocation.
Audit-ready journal entries
Every transaction creates a complete audit trail. See debit and credit entries from payment capture through shipment to settlement, all in real-time.
Real-time revenue visibility
No more waiting until month-end to know your revenue. Track recognized revenue, deferred revenue, and COGS in real-time as orders ship.
From Payment to Revenue: A Real Example
Customer orders a custom leather bag on Shopify for $89 + $8.99 shipping + $8.24 sales tax = $106.23 total.
Customer pays at checkout
Stripe captures $106.23. Fulfil records as Stripe Gateway (asset) and reduces A/R
Warehouse ships bag
Inventory moves to "Shipped Not Invoiced" clearing account at cost ($32)
Shipment marked "Done"
Revenue recognized ($97.99), COGS recognized ($32), Sales tax recorded as liability ($8.24)
Stripe settles to your bank
Cash received ($103.24), Processing fees expensed ($2.99), Stripe Gateway cleared to $0
All four steps happen automatically. No manual journal entries. Complete audit trail.
Order Receipt
Step 1: Payment Capture
When the customer completes checkout, payment is captured by the gateway (Stripe) and recorded as a deposit. This creates an asset (payment held by Stripe) and reduces accounts receivable.
| Account | Debit | Credit |
|---|---|---|
| 101 - Stripe Gateway | $ | — |
| 120 - Accounts Receivable | — | $ |
Note: This entry records the payment at checkout. The Stripe Gateway account is an asset representing funds held by Stripe before settlement.
Step 2: Ship Inventory
When items are shipped to the customer, inventory moves from your warehouse to a clearing account. This tracks that goods have left the warehouse but haven't been invoiced yet. Fulfil uses perpetual inventory accounting.
| Account | Debit | Credit |
|---|---|---|
| 121 - Inventory Shipped (Not Invoiced) | $ | — |
| 140 - Inventory | — | $ |
Note: This entry moves inventory at cost from your warehouse. Account 121 is a clearing account that will be relieved when revenue is recognized in Step 3.
Step 3: Recognize Revenue
When the shipment is marked "Done", revenue is recognized. This is when control of the goods transfers to the customer per ASC 606. COGS is recognized simultaneously, matching expenses with revenue.
| Account | Debit | Credit |
|---|---|---|
| 120 - Accounts Receivable | $ | — |
| 401 - Discounts | $ | — |
| 400 - Sales Revenue | — | $ |
| 220 - Sales Tax Payable | — | $ |
| 500 - Cost of Goods Sold | $ | — |
| 121 - Inventory Shipped (Not Invoiced) | — | $ |
Revenue Recognized! This invoice is automatically generated when shipment is marked done. Sales tax is recorded as a liability (pass-through to tax authorities). COGS is matched to revenue per the matching principle.
Step 4: Bank Settlement
When Stripe transfers funds to your bank account, they deduct processing fees. This settlement reconciles the gateway clearing account and records the payment processor fees as an expense.
| Account | Debit | Credit |
|---|---|---|
| 100 - Bank Account (Checking) | $ | — |
| 610 - Payment Processing Fees | $ | — |
| 101 - Stripe Gateway | — | $ |
Note: This entry records the actual cash received in your bank account. Processing fees are expensed when incurred. The Stripe Gateway clearing account is now zero.
Complete Audit Trail
All four steps happen automatically in Fulfil as you process orders. Every transaction creates a complete journal entry with proper debits and credits, giving auditors and finance teams full visibility from order to cash.
Recognize on shipment
Revenue recognized automatically when control transfers, no manual entries
Track unshipped orders
Deferred revenue tracked separately until performance obligations fulfilled
Partial shipments
Revenue allocated proportionally as each line item ships
Real-time reporting
See recognized vs. deferred revenue any time, no waiting for month-end
Handle Pre-Orders and Backorders Without Spreadsheets
The problem:
You launch a new product on Shopify with pre-orders. 500 customers pay $89 each ($44,500 total). But you won't receive inventory for 6 weeks. Where does that $44,500 go on your books?
The wrong way:
Record it all as revenue immediately. Your P&L looks great, but you haven't earned it yet (you still owe customers the product). This violates ASC 606.
The Fulfil way:
Day 1: Capture $44,500 in payments, record as Deferred Revenue (liability)
Week 6: Receive 500 units from supplier
Week 6-8: Ship 100 units/week, recognize $8,900 revenue per week as units ship
Week 8: All units shipped, full $44,500 recognized, Deferred Revenue back to $0
Your balance sheet stays accurate. Your P&L shows revenue when earned (when shipped), not when paid. All automatic, no manual journal entries or spreadsheet tracking.
Returns Reverse Revenue Automatically
Original sale:
Customer bought $89 bag, you recognized $89 revenue and $32 COGS
Customer returns 30 days later:
• Fulfil automatically creates credit note
• Reverses revenue: Credit Sales Revenue $89
• Reverses COGS: Debit COGS $32, Credit Inventory $32
• Refunds customer via Stripe
• Inventory returns to stock at $32 cost
Restocking fee scenario: You charge 15% restocking fee ($13.35)
• Customer gets refund of $75.65
• You keep $13.35 as restocking revenue
• Revenue net impact: -$89 (original) + $13.35 (restocking) = -$75.65
All automatic. No manual calculation of which revenue to reverse or how much COGS to adjust.
Automatic reversal
Revenue and COGS reversed when return is processed, no manual entries
Inventory restored
Returned goods flow back to inventory with proper valuation
Restocking fees
Partial refunds and restocking fees properly accounted
Exchange handling
Exchanges create new orders with proper revenue recognition
One System from Order to Cash
Fulfil includes a complete general ledger. No QuickBooks or NetSuite required. Every operational transaction automatically creates proper journal entries in real-time.
Revenue recognition when orders ship
Automated GL posting as shipments complete. Revenue matches when control transfers to customers.
COGS matching when revenue recognizes
Cost of goods sold posted automatically with revenue. Matching principle handled correctly.
Payment processor fees when settlements occur
Stripe and PayPal fees expensed when they're incurred. Settlement reconciliation automatic.
Sales tax as pass-through liability
Sales tax recorded correctly as liability, not revenue. Remittance tracking built in.
Multi-currency and multi-entity support
Revenue recognized in transaction currency. Each legal entity has separate books with consolidation.
Real-time P&L and balance sheet
Finance teams see accurate financials at any moment, not just after month-end close.
The result: Finance teams see accurate financials at any moment, not just after month-end close. Your accountant spends days closing books, not weeks reconciling spreadsheets.
How Fulfil Follows ASC 606 Automatically
ASC 606 requires 5 steps to recognize revenue. Fulfil handles all of them automatically.
Identify Contract
Customer completes Shopify checkout, pays via Stripe = binding contract
Performance Obligations
Products, shipping, gift wrapping = separate obligations you must fulfill
Transaction Price
Order total minus sales tax (which is pass-through, not revenue)
Allocate Price
Each line item gets its portion of the transaction price
Recognize Revenue
When you ship and mark "Done," control transfers to customer = revenue recognized
You just ship orders. Fulfil handles the accounting automatically while staying ASC 606 compliant.
How DTC brands use revenue recognition in Fulfil.
Pre-order campaign
Beauty brand launches with a 30-day pre-order. Captures $250K before inventory arrives. Fulfil tracks all $250K as deferred revenue. As units ship over 2 weeks, revenue recognizes automatically ($125K per week).
Made-to-order manufacturing
Jewelry brand makes custom pieces to order. Customer pays $500 upfront, production takes 3 weeks. Payment sits as deferred revenue. When the custom ring ships, revenue recognizes automatically.
Subscription box
Subscription brand bills customers on the 1st, ships boxes on the 15th. From the 1st to 15th, all payments are deferred revenue. On the 15th, as boxes ship, revenue recognizes. Returns automatically reverse.
Multi-warehouse split shipment
Order has 3 items: 2 ship from East Coast on Monday, 1 ships from West Coast on Wednesday. Fulfil recognizes revenue proportionally: 2/3 on Monday, 1/3 on Wednesday. Customer gets one invoice.
FAQ
Frequently asked questions.
When is revenue recognized in Fulfil?
How does Fulfil handle deferred revenue?
What happens to revenue when customers return products?
Do I need QuickBooks or NetSuite with Fulfil?
Is Fulfil's revenue recognition auditor-approved?
What if we ship in multiple boxes over multiple days?
How does Fulfil handle gift cards or store credit?
What about subscription revenue or memberships?
Can Fulfil handle multiple currencies?
How does revenue recognition work for wholesale customers with net terms?
See revenue recognition
in action.
See how Fulfil automates revenue recognition from order to financial statements.