> For the complete documentation index, see [llms.txt](https://help.dollarlabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.dollarlabs.io/dollarlabs-b2b-custom-pricing/wholesale-forms/approvals-and-automations.md).

# Approvals & automations

Every submission lands in a queue with a status of **Pending**, **Approved** or **Rejected**. What makes approval useful is what you can attach to it: creating the Shopify customer and tagging them, which is what unlocks their pricing.

## Reviewing submissions

Open a form and choose **View submissions**.

The list shows each submission with its status. Open one to see every answer, with uploaded files rendered inline — PDFs and images display in the admin, so you can check a reseller certificate without downloading it.

From there, **approve** or **reject**. You can record a **reason**, which is stored with the submission as an audit trail and is available to your email templates. You can also action several submissions at once from the list.

{% hint style="info" %}
Statuses are **pending**, **approved** and **rejected**. Approving or rejecting stamps the time of the decision, so you have a record of who was reviewed and when.
{% endhint %}

## Automatic customer creation & tagging

This is the feature that turns an application queue into a working wholesale pipeline.

Each form has automations configured **separately for approve and for reject**:

<table><thead><tr><th width="230">Automation</th><th>What it does</th></tr></thead><tbody><tr><td><strong>Create customer</strong></td><td>Looks the applicant up by email. If no Shopify customer exists, creates one using the name and email from the submission.</td></tr><tr><td><strong>Add tags</strong></td><td>Adds the tags you list to that customer's Shopify record.</td></tr></tbody></table>

Tags are entered as a comma-separated list.

### Why this is the important bit

Your [price list columns are customer tags](/dollarlabs-b2b-custom-pricing/getting-started/customer-tags-and-columns.md). A customer sees wholesale pricing because they carry the tag your column is named after.

So this automation closes the loop:

```
Buyer applies  →  You approve  →  Customer created and tagged "Wholesale"
                                            ↓
                          Their tag matches the "Wholesale" column
                                            ↓
                            They sign in and see wholesale prices
```

Without it, approval is just a status change and someone still has to tag the customer by hand.

### Setting it up

1. Open the form and go to its automations.
2. On the **approve** side, turn on **Create customer**.
3. In **Add tags**, enter the tag exactly as your price list column is spelled — `Wholesale`, not `wholesale`.
4. Save, and submit a test application end to end.

{% hint style="danger" %}
**Tags are case-sensitive, in both places.** A form applying `wholesale` against a price list column named `Wholesale` produces an approved customer who still sees retail prices — and nothing in either screen looks wrong. Copy and paste the tag between the two.
{% endhint %}

### How it behaves in practice

* **Lookup by email first.** An existing customer is matched, not duplicated. If creation fails because the email is taken, we fall back to the existing customer and tag them.
* **Safe to re-run.** Tags already present are left alone, so re-approving does not duplicate anything.
* **Approve and reject are independent.** You might tag `Wholesale` on approve and `application-declined` on reject, for follow-up marketing.
* **The email must be usable.** Creation and lookup both depend on the [primary field](/dollarlabs-b2b-custom-pricing/wholesale-forms/build-your-form.md#the-primary-field) being an email field.

### Routing applicants to different pricing

Because tags map to price list columns, running two forms gives you two pricing tiers with no manual work:

| Form                    | Applies on approval | Price list column |
| ----------------------- | ------------------- | ----------------- |
| Trade application       | `Wholesale`         | `Wholesale`       |
| Distributor application | `Distributor`       | `Distributor`     |

Or apply several tags at once — `Wholesale, EU` — so one approval both sets pricing and marks a segment you use elsewhere.

## Doing more with Shopify Flow

The built-in automation covers customer creation and tagging. For anything beyond that, we publish three **Shopify Flow triggers**:

<table><thead><tr><th width="220">Trigger</th><th>Fires when</th><th>Data available</th></tr></thead><tbody><tr><td><strong>Form Submitted</strong></td><td>A buyer submits an application</td><td>Customer Email, Form Name, Form ID, Submitted At</td></tr><tr><td><strong>Form Approved</strong></td><td>You approve a submission</td><td>Customer Email, Reason, Status, Approved At</td></tr><tr><td><strong>Form Rejected</strong></td><td>You reject a submission</td><td>Customer Email, Reason, Status, Rejected At</td></tr></tbody></table>

In Shopify Flow, create a workflow, choose one of these as the trigger, and build whatever you need:

* Notify your sales team in Slack or by email when an application arrives
* Add the customer to a Shopify segment or a marketing list
* Create a B2B company and location for the new account
* Send a rejection follow-up after a delay
* Escalate applications that have been pending too long

{% hint style="info" %}
Use the built-in automation for **creating and tagging the customer** — it is simpler and it is the step pricing depends on. Use Flow for everything that happens *around* that decision. They run happily together.
{% endhint %}

## Notification emails

Applicants can be emailed when they submit, and when you approve or reject them. Those templates live in the app's notification settings, alongside the reason you recorded on the decision.

## Testing the whole loop

Before you announce the form, run it once for real:

1. Submit an application from your storefront with an email you control.
2. Confirm it appears as **pending**.
3. Approve it.
4. Open **Customers** in Shopify admin and confirm the customer exists **and carries the tag**.
5. Sign in as that customer on your storefront and confirm wholesale prices appear.

Step 4 is where tag typos surface. Step 5 is where price list problems surface. Doing both tells you which half to fix.

## Common problems

**Approved, but the customer still sees retail prices.**\
The tag applied does not match the price list column exactly. Compare them character by character, including case.

**No customer was created.**\
**Create customer** is off for the approve leg, or the primary field is not an email field, or the submitted email was invalid.

**The customer already existed and nothing seemed to happen.**\
That is expected — they were matched rather than created. Check their Shopify record for the tag; it should be there.

**A Flow workflow is not running.**\
Confirm the workflow is turned on in Shopify Flow, and that you used one of our three triggers rather than a Shopify customer trigger.
