Introduction
Food and Beverage (F&B) businesses typically sell through a POS system, delivery platforms, or a mix of both — and however the sale happens, it eventually needs to land in Bukku as a proper accounting entry. This guide covers the different ways to record sales in Bukku, and how to report sales by revenue stream or outlet.
Sales Recording Methods
Depending on how your business operates, sales can be recorded in Bukku automatically through a POS integration, or manually if you don't use a POS system. F&B businesses typically use one of the following methods:
StoreHub Integration
Bukku offers a direct integration with StoreHub. Once activated, sales orders recorded in StoreHub sync to Bukku automatically, reducing manual data entry.
Refer to our StoreHub Integration article collection for more information.
FeedMe Integration
FeedMe also supports integration with Bukku, managed and maintained by the FeedMe team.
Contact FeedMe directly for setup assistance, or refer to their API documentation for technical details.
Open API Integration
For businesses using other POS systems, Bukku's Open API can be used to build a custom integration so sales data transfers in automatically.
Refer to developers.bukku.my for documentation, or contact our developer team at dev@bukku.my with any questions.
Manual Recording
Sales are entered directly into Bukku based on POS-generated reports or manual sales records, either as individual transactions or as a summary total, depending on the level of detail you need.
For businesses with high transaction volumes, creating a separate invoice for every individual sale is generally not practical. Instead, you can record daily, weekly, or monthly sales summaries in Bukku, provided detailed supporting records are maintained through POS-generated sales reports or manual cash sales books. This keeps accounting records efficient while retaining sufficient detail for reference and audit purposes. See two examples under Recording Sales in Practice below.
If your business needs transaction-level detail inside Bukku rather than a summary total, sales can instead be brought in via Batch Import using files exported from your POS. Refer to: Batch Creating and Importing Sales Invoices.
Recording Sales in Practice
The two examples below walk through the most common manual recording scenarios — summarising daily sales collected across different payment methods, and recording sales made through delivery platforms.
Example 1: Manual Sales Summary Recording
This example shows how to record a daily sales summary split by payment method.
Situation: ABC Café operates a single outlet with no POS system and doesn't sell through delivery platforms — just walk-in customers paying by cash, QR, or card at the counter. Since there's no POS or platform integration, daily sales are recorded manually as a summary at the end of each day, split by the payment methods actually collected.
Step 1: Set Up Payment Methods
Control Panel > Payment Methods
Map each payment method to the correct account:
Cash → 1000-00 Cash on Hand (received immediately)
QR Payment → 1000-01 Bank Account (settles instantly)
Credit Card → 1003 Undeposited Funds (settles a few days later — parked here until it actually lands in the bank)
This is a one-time setup.
Refer to: Setting Up and Using Payment Methods
Step 2: Create the Sales Invoice
Sales > Invoices > +New
2.1 Fill in the Invoice Details
Set Payment Mode to Cash Sales, and select the Cash Sales contact in the Customer field, since this is a summary invoice that isn't billed to a specific customer.
Example: ABC Café's total daily sales for 1 October 2026 amounted to RM1,500, coded to your Sales Income account.
2.2 Split the Payment Received by Payment Method
Instead of leaving the Payment Received section as one row, click + Payment to add a row per payment method collected during the day.
Example: RM1,500 collected via RM600 cash, RM500 QR payment, RM400 credit card:
📌 The Deposit To account fills in automatically based on the mapping set up in Step 1, so you only need to select the Payment Method and enter the amount.
Double Entry:
Debit Cash on Hand RM600
Debit Bank Account RM500
Debit Undeposited Funds RM400
Credit Sales Income RM1,500
Once saved, the invoice is marked Paid, and each amount goes straight into its account in one step.
Step 3: Clear Undeposited Funds When the Card Settlement Arrives
Bank > Money In > +New
Credit card amounts don't reach your bank on the same day. When the settlement lands (usually 1 to 3 business days later), record it as Money In to move the amount from Undeposited Funds to your Bank Account, so both balances stay accurate.
Example: On 3 October 2026, RM392 is credited to the bank after the card provider deducts an RM8 processing fee from the RM400 card sales.
Item line: Account set to Undeposited Funds, with the full card sales amount
Payment Received: Deposit To set to your Bank Account, with the same full amount under Amount
Fee Amount: the processing fee deducted by the card provider, with Fee Account set to Bank Charges
Double Entry:
Debit Bank Account RM392
Debit Bank Charges RM8
Credit Undeposited Funds RM400
After this, the RM400 in Undeposited Funds from 1 October is cleared, and your bank balance matches the bank statement.
Example 2: Recording Sales via Delivery Platforms
For businesses selling through delivery platforms (GrabFood, foodpanda, ShopeeFood), each platform can be set up as its own contact. This way, gross sales, commission, and net payout are tracked separately, instead of only the net amount landing in the bank.
Step 1: Set Up the Platform as a Contact
Contacts > +New
Create one contact for each delivery platform you sell through (e.g. GrabFood, foodpanda, ShopeeFood), so sales and payouts are tracked separately per platform.
Entity Type: General Public
Legal Name: the platform name, e.g. GrabFood
Registration No. Type: None
Type: Customer
📌 Why General Public? The actual buyers are the individual customers ordering through GrabFood, not GrabFood itself, so the contact is set as General Public with no registration details. GrabFood also issues e-Invoices to these customers on your behalf, so invoices under this contact are for your own bookkeeping only.
Step 2: Set Up a Commission Expense Account
Accounting > Chart of Accounts > +New
Create an expense account to track platform commission separately, e.g. Platform Commission, so it appears as its own line in the Profit & Loss.
Step 3: Record the Sale
Sales > Invoices > +New
Issue an invoice to the platform contact for the gross sales amount, with Payment Mode set to Credit Sales, since the platform hasn't paid out yet.
Example: GrabFood sales are recorded as a weekly summary. Sales for 1 – 7 October 2026 amounted to RM1,000.
Double Entry:
Debit Accounts Receivable RM1,000
Credit Sales Income RM1,000
Once saved, the invoice appears in your invoice list with an outstanding balance and a Coming Due status until GrabFood releases the payout.
Step 4: Record the Payout and Commission
Sales > Payments > +New
Enter the full invoice amount under Amount, and the platform's commission under Fee Amount, with Fee Account set to Platform Commission. Then, under Invoice Payments, select the GrabFood invoice (IV-10009) to apply the payment.
Example: GrabFood charged 20% commission (RM200) and paid out RM800.
Double Entry:
Debit Bank Account RM800
Debit Platform Commission RM200
Credit Accounts Receivable RM1,000
Once saved, the invoice is marked Paid, with the RM800 payout recorded in your bank account and the RM200 commission recorded as an expense.
Separating Revenue Streams with Sub-Accounts
By default, all sales are recorded under one Sales Income account. To see each sales channel as its own line in your Profit & Loss, you can set up sub-accounts under Sales Income.
Situation: ABC Café sells through its POS at the counter, as well as on GrabFood and foodpanda. The owner wants the Profit & Loss to show how much comes from each channel.
Step 1: Create Sub-Accounts Under Sales Income
Accounting > Chart of Accounts > +New
Create a parent income account (e.g. 5000 Sales Income) with a sub-account for each revenue stream, such as:
5000-00 POS Sales
5000-01 GrabFood Sales
5000-02 foodpanda Sales
For step-by-step instructions on creating parent and sub-accounts, refer to Structuring Your Chart of Accounts with Parent and Sub-Accounts.
Step 2: Use the Sub-Account When Recording Sales
Sales > Invoices > +New
When creating the invoice, select the relevant sub-account on the item line instead of the main Sales Income account. For example:
Daily sales summary invoice → 5000-00 POS Sales
GrabFood weekly sales invoice → 5000-01 GrabFood Sales
Result in Profit & Loss
Each sub-account appears as its own line under Sales Income, so you can see how much each revenue stream contributes to total sales at a glance.
Reporting by Branch or Outlet with Tags
If your business has more than one branch or outlet, you can use tags to track each location's sales and expenses separately, without creating extra accounts.
Situation: ABC Café now operates two outlets, in Bangsar and Cheras. Both outlets use the same accounts, but the owner wants to compare sales and expenses for each outlet.
Step 1: Create a Tag Group and Tags
Control Panel > Tags
Create a tag group for outlets, then add one tag for each outlet:
Tag Group: Outlet
Tags: Bangsar, Cheras
Step 2: Tag Each Transaction
Sales > Invoices > +New
In the General Info section, select the outlet under Tags. Do the same when recording expenses if you want to see each outlet's full profitability, not only its sales.
Step 3: View the Profit & Loss by Outlet
Reports > All Reports > Profit & Loss
In the Comparison field, select the Outlet tag group, then generate the report. Each outlet appears as its own column next to the overall total, so you can compare them side by side.
In this example, Bangsar brought in RM3,500 and Cheras RM2,100, out of RM5,600 total sales.
📌 Using both together: Sub-accounts and tags work on the same transaction. In the screenshot above, the Bangsar outlet's GrabFood sales (RM800) are recorded under the GrabFood Sales sub-account and tagged Bangsar, so the Profit & Loss shows sales by channel and by outlet in one report.
For full details on setting up tags and on filtering or comparing reports by tag, refer to Setting Up and Using the Tagging Function.



























