Shopify is in pilot activation. If the card says Coming soon, your
workspace has not been enabled yet. The setup below applies after an Olympus
administrator enables the integration.
Before you start
You need:- Owner or Admin access in Olympus.
- Permission to create and configure a custom app for the Shopify store.
- The store’s permanent
your-store.myshopify.comdomain.
Create the custom app
1
Open the Shopify Dev Dashboard
Create an app for the store from the Shopify Dev Dashboard.
Keep the dashboard open while you finish the Olympus connection.
2
Set the redirect URL
Add the OAuth callback shown by your Olympus environment:The URL must match exactly, including the
https scheme and path.3
Grant read access
Start with
read_products. Commerce sync also needs read_orders, read_customers,
read_inventory, read_returns, and read_marketing_events. Stores that approve
read_all_orders can backfill more than Shopify’s ordinary 60-day order window. Olympus never
requests Shopify write access.4
Enter the store credentials in Olympus
In Settings > Integrations > Commerce, open Shopify. Enter the permanent store domain,
client ID, and client secret, then choose Prepare connection. Olympus encrypts the
credentials and shows the three privacy webhook URLs for this connection.
5
Add the privacy webhooks
Copy the generated URL into each required compliance topic in Shopify:
- Customer data request:
customers/data_request - Customer data erasure:
customers/redact - Shop data erasure:
shop/redact
6
Approve access in Shopify
Choose Continue to Shopify, review the requested read-only scope, and approve the app. The
first catalog import starts in the background after OAuth completes.
Work with imported products
Open Offers > Products to see Shopify source badges and current sync state. Select one or more Shopify products and choose Use in offer. Olympus can create a draft or add the products to an existing Offer with catalog-grounded pricing, delivery, and line items; you still write or approve the promise and positioning. Fields supplied by Shopify are locked in Olympus. Change those values in Shopify, then choose Refresh Shopify from the Products page. User-authored Offer copy is never overwritten by sync.Check status and refresh
The integration status reports connection state, granted scope names, API version, the last accepted webhook time, import progress, and safe issue aggregates. It never exposes the app secret, access token, OAuth code, webhook HMAC, customer identifiers, or raw webhook payloads. Catalog reads and status are also available to bearer-authenticated MCP clients. Catalog refresh and product-to-Offer mapping remain approval-gated inside Olympus.Commerce reporting
After commerce scopes are approved, Olympus syncs customers before orders, then keeps paid orders, edits, cancellations, and refunds current through signed webhooks. Purchases appear on Connect contacts, while Measure > Store shows net revenue, AOV, repeat rate, customer LTV, cohorts, blended ROAS, MER, and channel attribution. The Store page and Agent/MCP commerce reads return aggregates only; they do not return customer rows, names, emails, phone numbers, addresses, raw journeys, or webhook payloads. The first backfill covers 60 days unless Shopify grantsread_all_orders. Backfill is safe to resume
after an interruption, and a newer webhook observation wins over an older bulk snapshot.
Shopify revenue can be sent to Meta Conversions API only after an administrator enables the
setting, records consent, and chooses a connected default pixel. The setting is off by default.
Reporting limits
- Store revenue is net of recorded refunds. It is not a profit report.
- Cost of goods is reported as unavailable until Shopify inventory costs are synced; Olympus does not invent margin.
- Revenue attribution uses last touch. Cohorts and acquisition-channel LTV use first touch.
- Without an
oly_linkor a unique UTM match, revenue remains in an unmatched or direct bucket. - Orders without a resolvable customer identity contribute to revenue totals but not customer LTV or repeat-rate denominators.
Disconnect
Disconnecting stops new catalog imports and webhook processing. Imported products remain in Olympus as detached records so existing Offers and historical work do not break. Reconnect the same store to reattach those product identities and resume updates.Troubleshooting
- OAuth returns to the wrong page: Check that the redirect URL matches the callback above exactly.
- The store domain is rejected: Use the permanent lowercase
.myshopify.comdomain, not a custom storefront domain. - Products do not appear: Confirm
read_productsis granted, then start a refresh from the Products page. - A product cannot be edited: Shopify-sourced fields are intentionally read-only. Edit the product in Shopify and refresh.
- The integration is degraded: Test the connection from Settings. A rejected token requires reconnecting the app.
Pilot activation checklist
Shopify stays locked until every item below is observed on the pilot store. Automated tests do not replace these provider and account observations.- Complete OAuth with the real custom app and confirm the returned store matches the requested
permanent
.myshopify.comdomain. - Confirm imported product and variant counts match Shopify Admin.
- Process one test purchase and verify one contact, one Store opportunity, one purchase, one Meta Purchase delivery, and the expected Measure fact row.
- Refund that purchase and verify one immutable revision reduces net revenue without creating a duplicate purchase or conversion.
- Reject a delivery with a tampered HMAC and accept a replayed delivery only once.
- Send Shopify Dev Dashboard test deliveries for
customers/data_request,customers/redact, andshop/redact; verify each reaches its terminal handled state. - Run a customer-redact drill and confirm customer identity and raw match data are removed while deidentified purchase totals stay unchanged.
- Compare a hand-calculated Shopify customer cohort with Measure > Store.
- Run all Shopify SQL contracts against a reset local database.
- Review the status response and logs for credentials, raw payloads, customer identifiers, and personal data; none may appear.
Activation evidence
Do not set the activation evidence date or unlock the catalog until every row records an observed
result. The current evidence date is intentionally unset.
For Shopify’s platform details, see authentication and access tokens, Admin API scopes, and webhook subscriptions.