> 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

Review applications and apply the customer tags that select wholesale pricing.

Submissions have a status of **Pending**, **Approved** or **Rejected**. You can configure approval to add the customer’s pricing tag. The customer account may already exist before approval.

## Reviewing submissions

Open **Wholesale Forms** and select the count in the form's **Submissions** column. The **Form Submissions** page for that form opens.

The list shows each submission with its status. Open one with **View** 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.

On a pending submission, choose **Approve** or **Reject**. The dialog has:

* **Reason** — stored with the submission as an audit trail and available to your email templates.
* **Tags to apply** — prefilled from the form's automation. Edit them to change the tags for this buyer only.
* **Skip Shopify Flow for this decision** — your Flow workflows do not run for this decision.

You can also approve or reject several submissions at once from the list.

<figure><img src="https://2844543096-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcVBfwy7Yj4tU8TsxkHEr%2Fuploads%2Fgit-blob-b0d02935e7fed6c2701fab2bbfc955f25b865257%2Fsubmission-approve-modal-annotated.png?alt=media" alt="Approve 1 submission dialog with a Reason box, Tags to apply showing wholesale, and the Skip Shopify Flow for this decision checkbox."><figcaption><p>Approving a submission: add a reason, check the tags, and choose whether Flow runs.</p></figcaption></figure>

{% hint style="info" %}
**Approve** and **Reject** appear only on pending submissions. To change a decision, open the submission with **View** and choose the other action there. Its tags are updated to match.
{% endhint %}

{% 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

In the form editor, open the **Automations** chip. Configure **Tags to add** separately under **When a submission is approved** and **When a submission is rejected**. Press Enter or a comma after each tag.

The app matches the customer by email and creates a customer when needed. There is no **Create customer** switch in the current editor. A customer record alone does not grant trade pricing.

**Skip customers who already have tags** leaves existing tagged customers without the new automation tags. Use it only if you want to preserve their existing tagging policy; any existing customer tag can cause the addition to be skipped.

### How tags connect approval to pricing

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.

With the approval pricing tag configured:

![Application review, approval pricing tag, then buyer sign-in](https://2844543096-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcVBfwy7Yj4tU8TsxkHEr%2Fuploads%2Fgit-blob-9d647b234035c43ea1dcc8a14b7145136d8519d8%2Fapplication-to-trade-pricing.svg?alt=media)

Configure the pricing tag on approval. A customer may already exist before approval; access depends on the matching pricing tag.

Without a matching pricing tag, approval alone does not select the wholesale price column.

### Setting it up

1. Open the form and choose the **Automations** chip.
2. Find **When a submission is approved**.
3. In **Tags to add**, enter the tag spelled like your price list column, for example `wholesale`.
4. Save, and submit a test application end to end.

<figure><img src="https://2844543096-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FcVBfwy7Yj4tU8TsxkHEr%2Fuploads%2Fgit-blob-e664eaa5b55ef3a46e0b241c50648cd5e5b05387%2Fform-automations-approval-tag-annotated.png?alt=media" alt="Automations panel with the tag wholesale added under When a submission is approved, and the Skip customers who already have tags checkbox unticked." width="696"><figcaption><p>Add your price list column's tag under When a submission is approved.</p></figcaption></figure>

{% hint style="warning" %}
**Check the tag shows as a chip.** The grey `wholesale` inside an empty **Tags to add** box is only an example. Type your tag and press Enter or a comma; if no chip appears, approval adds no tag and the buyer keeps retail prices.
{% endhint %}

{% hint style="danger" %}
**The form's tag must be spelled like your price list column.** Capital letters don't matter, but spaces, plurals and typos do: `Wholesaler` or `whole sale` does not match a `Wholesale` column, so the approved customer keeps retail prices. 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.
* **Changing a decision updates its tags.** Tags recorded as applied by the previous decision are removed when the new decision no longer includes them. Tags managed separately are preserved; check the customer after reversing a decision.
* **The account email must be usable.** Check the [selected account Email field](/dollarlabs-b2b-custom-pricing/wholesale-forms/build-your-form.md#the-primary-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 reference, 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 reference, Customer Email, Reason, Status, Approved At</td></tr><tr><td><strong>Form Rejected</strong></td><td>You reject a submission</td><td>Customer reference, 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. Both can run for the same application.
{% endhint %}

## Notification emails

{% hint style="info" %}
**Who gets which email.** A new submission emails **your store** (the address set for form emails in **Notifications**, otherwise your store's contact email), not the applicant. Approval and rejection email the **applicant**. All three are on by default. You can edit the templates under **Notifications**, which appears in the app menu on plans that include Quotes.
{% endhint %}

## Test an application

Before publishing the form:

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.

If the tag is missing or misspelled, check the approval automation. If the tag is correct but the price is wrong, check the price list.

## Common problems

**Approved, but the customer still sees retail prices.**\
The tag applied does not match the price list column exactly. Compare the spelling letter by letter; capital letters don't matter.

**No customer was created.**\
Check the selected account Email field and submitted address, then check whether customer synchronization completed.

**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.
