Connecting Shopify to Attribi
Connect your Shopify store to send paid orders and checkout starts to your ad platforms as closed-won and qualified conversions — no app-store install, no theme code.
Attribi reads two things from your Shopify store: paid orders (which become closed-won conversions carrying real revenue) and checkout starts (the mid-funnel signal that tells Google and Meta someone was close to buying). Both are pushed to your connected ad platforms so their bidding optimises on actual furniture revenue rather than clicks.
No code on your theme is required either way.
⚠️ Read this first — which path applies to you
On 1 January 2026 Shopify stopped allowing new custom apps to be created from the Shopify admin. Existing custom apps keep working, but the Settings → Apps → Develop apps route is no longer available for new ones.
| Your situation | What to do |
|---|---|
| You already have an Attribi custom app installed | The steps below still apply — nothing changes for you. |
| You are connecting Shopify for the first time | ⛔ Do not follow the steps below — you will not find the screen they describe. Contact us and we will send you a one-click install link instead. |
We are replacing this entire flow with a single "Connect Shopify" button, so that connecting takes one click and you never have to create anything or copy a secret. Until that ships, first-time connections are handled by us directly — it takes a couple of minutes and needs nothing from your developers.
What you'll need
(Applies only to stores with an existing custom app — see the notice above.)
A Shopify account with permission to create apps (Store owner, or staff with the "Apps and channels" permission).
Step 1 — Create a custom app in Shopify
- In your Shopify admin, go to Settings → Apps and sales channels → Develop apps. (If you see a "Allow custom app development" prompt, accept it — this is Shopify's one-time confirmation for the store.)
- Click Create an app, name it
Attribi, and create it. - Open Configuration → Admin API integration → Configure, and grant exactly one
scope:
read_orders— described in Shopify's list as "View or manage orders, transactions, fulfillments, and abandoned checkouts" Abandoned checkouts are included in that scope, which is why there is nothing separate to tick for them. (If you go looking for aread_checkoutsscope you will not find one — Shopify folded it intoread_orders.) Attribi never needs write access to your store. If a scope list asks for more, you're on the wrong screen — this one is all we use.
- Save, then click Install app.
Step 2 — Copy the two credentials
From the app's API credentials tab:
| Field | Where it is | Looks like |
|---|---|---|
| Admin API access token | Revealed once, right after install | shpat_… |
| API secret key | Same page, under "Client credentials" | a long hex string |
⚠️ The access token is shown only once. If you navigate away before copying it, you'll need to uninstall and reinstall the app to get a new one.
Step 3 — Connect in Attribi
- Go to Connections in Attribi and find Shopify under Data Sources.
- Click Connect and paste three values:
- Shop domain —
your-store.myshopify.com(your permanent Shopify domain, not your custom storefront domain likewww.yourstore.com) - Admin API access token
- API secret key
- Shop domain —
- Save.
Attribi validates the token, then registers four webhook subscriptions on your store
(orders/paid, checkouts/create, checkouts/update, app/uninstalled). The tile
shows how many were registered. Reconnecting is safe — we detect existing subscriptions
instead of adding duplicates.
checkouts/create and checkouts/update both feed the same Qualified signal below.
Shopify fires checkouts/create the instant a checkout starts — usually before the
shopper has typed an email — so on its own it rarely carries anything we can match. The
email typically arrives moments later on a checkouts/update delivery, which is why we
subscribe to both.
What happens after connecting
| In your store | In Attribi | Sent to your ad platforms |
|---|---|---|
| Shopper starts checkout (with an email) | Lead marked Qualified | Qualified conversion, no value |
| Order is paid | Lead marked Closed Won | Purchase conversion with the order total and currency |
Matching is by email in this version. A checkout or order without an email address can't be tied to a shopper, so it's skipped rather than guessed at.
Two honest limitations
- Repeat purchases. Each order fires its own conversion to your ad platforms with its own value — that part is correct. But a customer's lead record in Attribi shows the most recent order value, not a lifetime total. Per-order history is stored and will surface in reporting.
- Checkout pages aren't tracked by the Attribi script. Shopify doesn't allow custom scripts on checkout for most plans. That's fine — orders reach us by webhook from Shopify's servers, so we don't need a script there. It does mean the on-site journey ends at checkout entry.
Do I still need the tracking script?
Yes, and they do different jobs:
- The Attribi script on your storefront captures the journey — which ad, search, or post brought the shopper in, across multiple visits.
- The Shopify connection captures the outcome — what they bought and for how much.
Without the script, we know an order happened but not which ad earned it. Without the connection, we know the journey but have to be told the revenue manually. Together they close the loop. See the install guidance on your Connections page for the script.
Disconnecting
Click Disconnect on the Shopify tile. Attribi removes its webhook subscriptions from your store, then drops the connection. You can also uninstall the custom app in Shopify directly — Attribi notices and marks the connection as needing attention rather than silently reporting healthy.
Troubleshooting
| What you see | What it means |
|---|---|
| "Invalid API key or access token" | The token was mistyped, or it was rotated/reinstalled in Shopify. Reinstall the app and paste the fresh token. |
| "Could not reach the store" | The shop domain is wrong (use the .myshopify.com one) or the store is password-protected/frozen. |
| Tile says App uninstalled in Shopify | The custom app was removed on the Shopify side. Reconnect to resume — no data is lost, but nothing is ingesting meanwhile. |
| Tile says Connection setup did not finish | A rare case where webhooks registered but credentials didn't save. Disconnect and reconnect; the leftover subscriptions are cleaned up. |
| Orders arrive but no conversions in Google/Meta | Check those platforms are connected on the same Connections page and have a conversion action mapped for Closed Won. |
Still stuck? Email hello@attribi.com with your shop domain and roughly when the order was placed.