# Send orders to Excel with Power Automate

> Add a row to an Excel table in OneDrive for every paid BCL order, using a BCL automation and a Power Automate flow.
>
> Source: https://docs.bcl.my/excel-power-automate/

BCL has no built-in Microsoft connector, but you can still log every paid order in an Excel workbook. A BCL automation sends each order to a Power Automate flow, and the flow adds a row to a table in your OneDrive. It takes about 15 minutes to set up.

## Before you start

You need three things:

- A Microsoft 365 work or school account with OneDrive and Excel for the web.
- A Power Automate Premium licence or trial. The **When an HTTP request is received** trigger is a Premium feature, so the free Power Automate that comes with Microsoft 365 is not enough. You can start a free 90-day trial while you build the flow.
- A BCL admin login, so you can create automations.

## Prepare the Excel workbook

The flow writes into an Excel table, not a plain range. Set up the workbook first:

1. In OneDrive, create a folder (for example **BCL Demo**) and a new Excel workbook in it.
2. Type these headers in row 1:

   | Column | What the flow puts there |
   | --- | --- |
   | Order Number | The BCL order number |
   | Payment Date | Date and time of the payment |
   | Customer | Customer name |
   | Email | Customer email |
   | Phone | Customer phone number |
   | Form | The form the customer paid on |
   | Items | Items and quantities, for example 2x House Blend 250g |
   | Amount | Amount paid, as a number |
   | Payment Method | For example FPX or DuitNow QR |
   | Status | Payment status |

3. Select the headers and click **Home** → **Format As Table**. Tick **My table has headers**.

Excel keeps one empty row under the headers of a new table. After the first order arrives, you can delete that empty row.

## Create the flow in Power Automate

The flow gives you a web address that BCL posts each order to:

1. Go to [make.powerautomate.com](https://make.powerautomate.com), click **Create** → **Instant cloud flow**, and name the flow.
2. Choose **When an HTTP request is received** and click **Create**.

   *(Screenshot: The Build an instant cloud flow dialog with When an HTTP request is received selected and the Create button highlighted)*

3. Click the trigger. In **Who can trigger the flow?**, choose **Anyone**. BCL does not sign in to Microsoft, so the default **Any user in my tenant** blocks it.

   *(Screenshot: The Who can trigger the flow? list with Anyone highlighted)*

4. Click **Use sample payload to generate schema**, paste this sample and click **Done**:

   ```json
   {
     "order_number": "BC-00123",
     "payment_date": "2026-09-27 14:05:11",
     "name": "Nurul Aina",
     "email": "nurul.aina@example.com",
     "phone": "60133456789",
     "form_title": "Kopi Kampung Coffee Beans",
     "items": "2x House Blend 250g",
     "amount": "70.00",
     "payment_method": "FPX",
     "status": "Successful"
   }
   ```

   *(Screenshot: The sample JSON payload pasted into the schema dialog)*

5. Click **+** under the trigger, search for **Add a row into a table** and pick the **Excel Online (Business)** action. Sign in if Power Automate asks you to create a connection.

   *(Screenshot: The Add an action panel with Add a row into a table highlighted)*

6. Set **Location** to **OneDrive for Business**, **Document Library** to **OneDrive**, pick your workbook in **File** and your table in **Table**.

   *(Screenshot: The Add a row into a table action with Location, Document Library, File and Table filled in)*

7. Under **Advanced parameters**, click **Show all**. Click in each column and pick the matching value with the lightning icon: **order_number** for Order Number, **name** for Customer, **form_title** for Form, and so on.

   *(Screenshot: Each Excel column filled with a value from the HTTP trigger)*

8. Click **Save**. If the flow checker says the owner needs a Power Automate Premium licence, click **Test**, then **free 90-day trial** in the warning, and **Start trial**. The trial asks for no card. Save the flow again after the trial starts.

   *(Screenshot: The Start your free 90-day trial dialog with the Start trial button highlighted)*

9. Click the trigger again and copy the **HTTP URL**. Power Automate only creates it after the first save.

   *(Screenshot: The HTTP URL field of the trigger, with the address masked, and its copy button)*

Check on the flow's details page that the flow is **On**. If it shows **Off**, click **Turn on**.

## Send paid orders from BCL

Next, create a BCL automation that posts each paid order to the flow:

1. In the sidebar, click **Automations**, then **New Automation**. Name it, for example Orders to Excel, and click **Create**.

   *(Screenshot: The Automations page with Automations in the sidebar and the New Automation button highlighted)*

2. Click **Add Node** and choose the **Payment Successful** trigger. Leave **Payment Source Type** on **All Sources** to log every form, or pick one form. Click **Save Trigger**.
3. Click **Add Node** again and choose **HTTP Request**.

   *(Screenshot: The workflow with the Payment Successful trigger connected to the Send to Excel HTTP Request action)*

4. Double-click the new node. Give it an **Action Name**, keep **Method** on **POST**, and paste the flow's address into **Request URL**.
5. Open the **Body** tab, choose **Raw JSON** and paste this body. Each `{variable}` is replaced with the order's value:

   ```json
   {
     "order_number": "{order_number}",
     "payment_date": "{payment_date}",
     "name": "{name}",
     "email": "{email}",
     "phone": "{phone}",
     "form_title": "{form_title}",
     "items": "{items_summary}",
     "amount": "{amount_value}",
     "payment_method": "{payment_method}",
     "status": "{payment_status}"
   }
   ```

   *(Screenshot: The HTTP Request Action Settings with the Request URL and the Raw JSON body highlighted)*

6. Click **Save HTTP Request**, then **Update Automation**.

To check the link, click **Send Test Request** in the **HTTP Request** action, or make a test payment on one of your forms. A new row appears in your Excel table within a few seconds.

*(Screenshot: The Excel table with a new row for order LINK-05845, highlighted)*

## Automation or form webhook?

A payment form's own webhook can also call a Power Automate flow. An automation is usually the easier choice:

| | Automation with HTTP Request | Form webhook |
| --- | --- | --- |
| Where you set it | Once, under **Automations** | On each form, under **Advanced** → **Webhook Settings** |
| Which sales | All sources (payment, event and booking forms, QR Terminal) or one form | Only that form |
| What BCL sends | Only the fields you list, with your own names | The full payload, nested under `data`, with items as a list |
| In the flow | One flat schema, one **Add a row into a table** | A nested schema, and **Apply to each** for item rows |

Use the form webhook when you need every field BCL has, such as custom fields and the full item list. See [Payment form webhook payload](/webhook-payment-form/).

## Tips

A few habits keep the link reliable:

- **Keep the flow address private.** Anyone with the **HTTP URL** can add rows to your workbook. Do not paste it in chats or screenshots. If it leaks, turn the flow off and build a new one, which gets a new address.
- **Match the Excel columns before you rename them.** If you rename or delete a column in the table, open the flow and pick the table again, or the flow fails.
- **Use the order number to spot duplicates.** If an order appears twice, sort the table by **Order Number** and remove the extra row.
- **Want charts too?** Point Power BI at the same workbook. See [Analyse your BCL sales in Power BI](/power-bi/).

## Common issues

### How can my own spreadsheet know when a payment comes in?

Create an automation with the Payment Successful trigger and an HTTP Request action that posts the order to your Power Automate flow. The flow adds one row to your Excel table for each paid order.

### Power Automate says my flow needs a Premium licence. Why?

The When an HTTP request is received trigger is a Premium feature. Start the free 90-day trial from the flow's licensing warning, or ask your Microsoft 365 admin for a Power Automate Premium licence.

### My flow receives nothing. How do I test it?

Open the HTTP Request action in your BCL automation and click Send Test Request, then check the flow's run history in Power Automate. Make sure Who can trigger the flow? is set to Anyone and the flow is turned on.
