Bring in customers from Shopify
Connect your Shopify store and its customers arrive as contacts, with their country, order count and lifetime value to group by — and an order can start a survey a few days later.
On this page
Connect your Shopify store and Polzy reads its customers on a schedule. They arrive as contacts: they answer surveys, never sign in and use no seat. Their country, number of orders, lifetime value and sign-up date come along, so you can compare results by them. Add Shopify webhooks as well, and a fulfilled, paid, cancelled or refunded order can start a survey — a few days after delivery, for example.
People sync is on Team and up, and only workspace admins can connect a source. Starting surveys from orders also needs the Integrations page, which comes with Business. Polzy only reads from Shopify: it never changes a customer or an order.
Before you start
You need:
- To be an admin of the Polzy workspace, on Team or higher, with People sync switched on under Settings → General → What this workspace does.
- Your store's own address ending in
.myshopify.com— not a custom domain such asshop.acme.com. - An Admin API access token that does not expire, with the
read_customersandread_ordersscopes. It starts withshpat_. - The fields you want to group results by in your workspace, such as Country, Order count and Lifetime value. A workspace made for customers usually has them already.
A workspace syncs from one source at a time. If another source is connected, disconnect it first.
Get an access token
Shopify issues the token through an app on your store. Which one you use matters, because Polzy keeps the token you give it and cannot renew it:
- A custom app made in your Shopify admin. Its token never expires, which is what Polzy needs. Shopify stopped letting stores create these on 1 January 2026, but an existing one keeps working. In your Shopify admin, open Apps → Develop apps, choose the app, and check under API credentials that it has the
read_customersandread_ordersscopes. Shopify shows the token once, when the app is installed; if you no longer have it, uninstalling and reinstalling the app makes a new one. - An app made in Shopify's Dev Dashboard. This is how new custom apps are made. The quick way to get a token for one — the client credentials grant — gives a token that expires after 24 hours, so Polzy's sync would stop working the next day. Use it only if your developer can obtain an offline token that does not expire.
See Shopify: Custom apps and Shopify: Admin-created custom apps.
Connect Shopify in Polzy
- Open Contacts → Sync & fields.
- Under Available sources, find Shopify and choose Connect. A panel opens with three steps: Connection, Sync settings and Field mapping.
- Enter your Store domain, such as
acme.myshopify.com, and paste the Admin API access token. Leave Webhook signing secret empty unless you set up order webhooks (below). - Choose Test connection. Connected to followed by your store's name means the token works.
- Choose Next, check the sync settings (see below), and choose Next again.
- On Field mapping, keep the default mapping or switch on Custom field mapping (see below), then choose Connect.
The token is stored encrypted and is only used to read from your store. Polzy checks it again when you choose Connect: if Shopify refuses it, nothing is saved.
Sync settings
| Setting | What it does | Default |
|---|---|---|
| Only customers who accept marketing | Imports only customers who agreed to email or SMS marketing. Recommended: surveying customers who declined marketing may go against their consent. | Off |
| Minimum orders | Skips customers with fewer orders than this. At 1, customers who never ordered are left out. | 1 |
Shopify syncs every hour. Customers with neither an email address nor a phone number are always skipped.
Map the fields
The default mapping fills:
| Polzy field | From Shopify |
|---|---|
| Email, phone number | email, phone |
| First name, last name | first_name, last_name |
| Country | default_address.country |
| Lifetime value | total_spent |
| Order count | orders_count |
| Sign-up date | created_at |
Country, lifetime value, order count and sign-up date are kept only if your workspace has those fields. To change the mapping, switch on Custom field mapping. Each row then has a source to fill in — pick one of Shopify's fields, such as tags or default_address.city, or type the path of any other — and an If empty, use value, written when Shopify has nothing for that customer. A value Shopify does send is never overwritten.
To compare results by a field, make it a List field and switch on Groups beside it in the Field mapping table, on Sync & fields. Values from Shopify are matched to the field's options.
Preview and run the first sync
- On Sync & fields, choose Preview a sync under Sync history. Polzy works out what a sync would add and update, without changing anything, and opens the log where the result appears as Preview.
- Check the preview, then choose Sync Now. The result appears in Sync history.
Customers are matched by their Shopify ID, and then by email address, so a contact you had already added by hand or by CSV is updated rather than added twice.
Start surveys from orders
Shopify can tell Polzy when an order is fulfilled (orders/fulfilled), paid (orders/paid) or cancelled (orders/cancelled), and when a refund is made (refunds/create). A campaign set to start When an event happens can then send a survey to that customer, after the delay you choose, and a workflow can react to the same event. The order's products come along, so answers can be compared by product.
- In Polzy, open Integrations, then Shopify, and copy the address under Receiving. It is made for your connection and ends in
/shopify. - In your Shopify admin, open Settings → Notifications → Webhooks and choose Create webhook.
- Choose the Event — for example, order fulfillment — choose JSON as the Format, paste the address as the URL, and save. Repeat for each event you want.
- Copy the key Shopify signs your webhooks with, shown on the Webhooks page.
- In Polzy, open Contacts → Sync & fields, choose Settings, paste the key into Webhook signing secret, and choose Save on the last step.
Polzy refuses a webhook it cannot verify with that key, so orders do nothing until it is saved. If an app on your store creates the webhooks instead, they are signed with that app's API secret key: paste that one. When an order arrives for a campaign waiting on it, its customer is matched or added as a contact first. See Shopify: Creating webhooks, and Campaigns for the campaign side.
Troubleshooting
| What you see | Why | What to do |
|---|---|---|
| Store domain should look like your-store.myshopify.com | You entered a custom domain or a full web address. | Enter only your store's .myshopify.com domain. |
| Shopify rejected the token. Check it has read_customers scope. | The token is wrong, has expired, or lacks the scope. | Check the app's scopes and paste a token that does not expire. |
| Store not found. Check the .myshopify.com domain. | No store answers at that domain. | Copy the domain from your Shopify admin. |
| The sync works for a day, then fails | The token came from the client credentials grant and expired after 24 hours. | Use a token that does not expire — see Get an access token. |
| Orders never start a survey | No Webhook signing secret is saved, it is not the key Shopify signs with, or no active campaign waits for that event. | Paste the key from the Webhooks page, and check the campaign's trigger. |
| N contacts were not imported: the plan’s contacts limit is reached. | Your plan's contacts are used up. | Raise Minimum orders or switch on Only customers who accept marketing, or change plan. |
Good to know
- Contacts, not members. Customers never sign in, get no invitation and use no seat. They count towards your plan's contacts — 10,000 on Team, 50,000 on Business. A sync that would go over imports the customers who fit, stops there and tells admins — see Usage and limits.
- Up to 50,000 customers a sync. A store larger than that is read up to that point.
- Deleted customers stay. A customer deleted in Shopify is not removed or deactivated in Polzy; delete the contact under Contacts if you need to.
- Disconnect or remove. Under Settings, Disconnect stops syncing and keeps the settings and history, so you can reconnect later; Remove deletes the connection. Either way, the contacts already imported stay in Polzy.
- Need a hand? The connect panel's Ask Polzy link explains where each value lives in Shopify.
Useful links
- Shopify: Custom apps — custom apps today, and the ones made before 2026.
- Shopify: Admin-created custom apps — where an existing app's token and scopes are.
- Shopify: Creating webhooks — order webhooks in your Shopify admin.
- People and contacts — fields, groups and contacts.
Related articles
Signed-in members can ask Polzy or message the team from Support. How fast we reply depends on your plan.