# Fake orders. Real shipping.

Bots place cash-on-delivery orders with nothing paid up front. Label the session behind each order, hold the bot ones before they ship, and confirm the rest your way.

For Shopify shops that offer cash on delivery.

Status: Available with Expose

## Every COD order ships before anyone pays.

A COD order costs nothing to place. You pack it and ship it, and when nobody pays at the door it comes back to origin. You pay shipping both ways, plus handling, for a sale that never existed.

Expose labels the session and writes the label to the cart, and Shopify carries it onto the order as _da_class. A Shopify Flow workflow can then hold fulfilment for bot orders. Checkout is never blocked; nothing changes until your workflow or your team acts.

## Where 10,000 COD orders went

- COD orders: 10,000
- From automated sessions: 900
- Returned to origin: 850
- Spent on bot returns: ₹1,53,000 (Saved only when your workflow holds them before they ship.)

Illustrative example. 9% from automated sessions; 850 of those returned to origin; ₹180 per return, shipping both ways plus handling. Average order ₹1,299. Hypothetical.

## The same month, with the label on each order.

| | Reported | With evidence |
|---|---|---|
| Return to origin (RTO) rate | 28% | 21% |
| Orders from automated sessions | 0% | 9% |
| Bot orders returned | 0 | 850 |

Illustrative example.

## Your numbers

Spent = orders × share automated × share returned × cost per return.

## One COD order, before it ships.

- Order: #1047 · ₹1,299 · COD
- _da_class: bot
- Flow: Order created → hold fulfillment
- Outcome: Held for review

Nothing is packed until someone looks. An order an agent placed for a real buyer is labelled agent, so it skips the hold and goes to your confirmation step.

## How it fits

1. **Add the snippet.** Paste it into your Shopify theme. Carts get _da_class, _da_score and _da_agent.
2. **Let it reach the order.** Shopify copies cart attributes onto the order, where Flow can read them.
3. **Build the workflow.** Order created, _da_class is bot: hold fulfillment and tag the order for review.
4. **Review the holds.** Release real orders. Cancel the rest. Your call.

## What your team can do

- **Hold bot orders.** Fulfilment waits until someone has looked.
- **Confirm agent orders.** An agent may be buying for a real person. Confirm before you ship, your way.
- **Measure real RTO.** Compare returns on orders labelled human and bot.

## Before you start

### Does this block cash on delivery?

No. Checkout is never blocked. You decide what happens next: hold, confirm or ship.

### What about agents ordering for a real person?

They are labelled agent, not bot, so a bot hold skips them. Confirm before you ship; don’t cancel.

### Which platforms?

Shopify, with the theme snippet and Shopify Flow. On your own checkout, send a token with the order and verify it with @doubleagent-so/node; tokens need a public key.

### Does a bot label prove fraud?

No. It is evidence about the session, and cart attributes can be set from the browser. Treat it as a reason to review. A missing label means the script did not run, not bot.

[Install Expose](https://doubleagent.so/docs/shopify/)

- [Shopify guide](https://doubleagent.so/docs/shopify/)
- [Double Agent for e-commerce](https://doubleagent.so/for/ecommerce/)
- [Chargebacks and card testing](https://doubleagent.so/use-cases/chargebacks-card-testing/)
