---
title: "Update customer metafield when webhook received"
description: "A ready-made Shopify Flow workflow. When a loyalty, CRM or points system calls your webhook with an email address and a number, store it on the customer in the metafield custom.loyalty_points. Show it in the customer account, in emails or in Flow."
canonical: "https://docs.workflow-webhooks.app/template-update-customer-metafield"
---

# Update customer metafield when webhook received

When a loyalty, CRM or points system calls your webhook with an email address and a number, store it on the customer in the metafield custom.loyalty_points. Show it in the customer account, in emails or in Flow.

One trigger from Workflow Webhooks and Shopify's built-in actions, no other app needed.

![The workflow in Shopify Flow: Update customer metafield when webhook received](https://cdn-dev.eu.codecreationlabs.cloud/crm-tool/uploads/SjJ78gKLnLlocopCui3Cs62dJbGZ7F1n/ff06a087416dacd5.jpg)
*The complete workflow as it looks in Shopify Flow.*

## What it needs

A webhook in Workflow Webhooks with this payload mapping. See [Payload mapping and Flow variables](https://docs.workflow-webhooks.app/payload-mapping.md).

| Field | What to map to it |
| --- | --- |
| `fieldOne` | The customer's email address |
| `fieldTwo` | The points balance as a whole number, for example `250` |

A call to the webhook then looks like this:

```bash
curl -X POST https://<your webhook URL> \
  -H "Content-Type: application/json" \
  -d '{"email": "jane.doe@example.com", "points": 250}'
```

> [!WARNING]
> **More than one webhook?**
> The Webhook Trigger fires for every webhook in your store. If you have more than one, add a condition on `webhookId` **Equal to** this webhook's id right after the trigger.

## Get the workflow

1. Download the `.flow` file attached at the bottom of this page.
2. In your Shopify admin open **Flow**, click **Import** and choose the file.
3. Check the steps, then click **Turn on workflow**.

The file is an export from Shopify Flow itself. Do not edit it by hand; change the workflow in Flow after importing it.

## How it works

1. **Webhook Trigger** starts the workflow each time your webhook URL is called and hands it the mapped fields.
2. **Get customer data** looks up the customer with the query `email:{{fieldOne}}` and keeps at most one result.
3. **For each** runs once for the customer it found, and not at all when no customer matches.
4. **Update customer metafield** writes `{{fieldTwo}}` to `custom.loyalty_points` as an integer.

## Make it yours

- Change the namespace and key to a metafield you already use, for example `loyalty.tier` with type single line text.
- Add **Add customer tags** after the metafield step to mark customers above a points threshold.

> [!NOTE]
> **Good to know**
> If fieldTwo is not a whole number, Shopify rejects the value and Flow marks the step as failed. Create a metafield definition for custom.loyalty_points in Settings if you want to see the value in the customer page.

## Next steps

- [Create your first webhook](https://docs.workflow-webhooks.app/getting-started.md) - create the webhook this workflow listens to.
- [Workflow templates](https://docs.workflow-webhooks.app/workflow-templates.md) - all templates.
- [History and troubleshooting](https://docs.workflow-webhooks.app/history-and-troubleshooting.md) - check that the webhook reached Flow.
