Meerkats AI

Shopify

Connect your Shopify store so Meerkats has your orders, customers, products, inventory and payouts: the sales truth every ad number is checked against.

Shopify is the sales source for most stores on Meerkats. Once connected, Meerkats imports every order with its line items, discounts, refunds and attribution (UTMs and click IDs), your customers, products and variants with cost and stock per location, discounts, abandoned checkouts, fulfilments and Shopify Payments payouts.

This is what lets Meerkats show corrected ROAS (revenue from real orders matched to clicks), gross margin (needs cost per item), new vs returning customers, cohorts and days of cover. The Integrations page marks a sales source as Required because without one, revenue, orders and margin tiles in Cockpit stay empty.

How it connectsSign in and approve
ReadsOrders, Order attribution, Refunds and transactions, Payouts, Customers, Products and variants, Discounts, Abandoned checkouts, Fulfilments, Inventory movements, Web pixel events
Can changeCreate a product, variant or collection (for example a bundle); Change a price or compare-at price; Create or end a discount; Adjust stock at a location; Fix tracking (pixel or UTM setup)
RefreshOn your plan's schedule, plus Resync anytime

Before you start#

  • A Shopify store where you are the Store owner or a staff member with permission to install apps.
  • Cost per item filled in on your variants, if you want gross margin and contribution margin.
  • If you use a custom checkout or headless storefront, check that UTM parameters and click IDs (gclid, fbclid, ttclid) survive to the order. Shopify's standard checkout keeps them.

Permissions#

Shopify asks you to approve these permissions. Each one is listed with why Meerkats needs it.

PermissionWhy Meerkats needs it
read_orders, read_all_ordersRead every order, including orders older than 60 days, for history and cohorts
read_customersRead customers, marketing consent and order counts (contact details can be hashed)
read_products, read_inventoryRead products, variants, cost per item and stock per location
read_discounts, read_price_rulesRead discount codes and automatic discounts
read_checkoutsRead abandoned checkouts
read_fulfillments, read_shippingRead fulfilment and delivery events
read_shopify_payments_payoutsRead payouts, fees and balance transactions (what reconciles to the bank)
read_marketing_events, read_reportsRead marketing activity and storefront analytics
write_products, write_inventory, write_discounts, write_price_rulesCreate or change products, collections, stock and discounts when you approve a change
Meerkats never sees your password. You sign in on Shopify’s own page, and Shopify gives Meerkats a token you can revoke at any time from your Shopify account.

Connect#

1. Connect Shopify#

  1. Open Integrations

    In the sidebar, select Integrations. Shopify is listed first, marked Required.

  2. Select Connect

    Enter your store's myshopify.com address when asked.

  3. Install the Meerkats app

    Shopify shows the permissions above. Select Install. You return to Meerkats with the store connected.

2. Run the first sync#

  1. Resync

    Go to Data Hub › Bronze Layer, pick Shopify and select Resync. The first sync imports all orders, so a store with years of history can take a while. Sync History shows progress.

  2. Check Cockpit

    Once orders land, Cockpit fills in Orders, Ad-reported revenue and, with cost per item, Gross margin. The tile note COGS not synced from Shopify yet disappears.

  3. Install the web pixel (optional)

    Meerkats adds a Shopify web pixel during install so sessions, product views, add-to-carts and checkouts feed conversion rate. If you declined it, open Settings › Customer events in Shopify and turn the Meerkats pixel on.

What syncs#

ShopifyIn Meerkats
OrdersOrder, created and processed time, line items with variant, quantity, price and discounts, customer, sales channel, payment and fulfilment status, cancellations, tags
Order attributionLanding page, referrer, UTM source, medium, campaign, content and term, and click IDs (gclid, fbclid, ttclid): the basis of corrected ROAS
Refunds and transactionsRefund lines, amounts and reasons (kept separate from cancellations); per-order payments with gateway, kind, fees
PayoutsShopify Payments payouts and balance transactions: charges, fees, adjustments
CustomersCustomer, first order date, marketing consent, tags, order count, total spent, default address region
Products and variantsTitle, SKU, price, compare-at price, cost per item, stock per location, status, collections, tags
DiscountsPrice rules and codes: type, value, what they apply to, usage limits, active dates
Abandoned checkoutsCheckout, time, line items, landing page, referrer, whether it completed
FulfilmentsCarrier, tracking, shipped and delivered times per order
Inventory movementsStock changes per location with reason
Web pixel eventsPage views, product views, add to cart, checkout started and completed, with session UTMs and device

Raw data lands in Data Hub › Bronze Layer. Modelled tables, with metrics defined once, are in Data Hub › Gold Layer. Every number in a report or an agent’s answer comes from a query on these tables, never from the model’s own arithmetic.

Metrics you get#

The metrics people ask for most, named as Shopify names them. The full list, with each definition, is in the metric catalog.

Gross salesNet salesOrdersAverage order valueNew vs returning customersRefundsDiscountsGross marginSessionsConversion rateRepeat rateLTVDays of cover

How often it syncs#

Meerkats syncs on your plan's schedule: daily on Free, hourly on the $49 plan, every 30 minutes on $149 and every 15 minutes on $399. You can run a sync at any time with Resync in Data Hub › Bronze Layer.

  • Orders are dated by their processed time in the store's time zone. Cross-platform revenue uses order date, not the ad platform's attribution date.
  • Corrected ROAS needs the click ID or UTMs on the order. Orders without either count as revenue but aren't attributed to a platform.
  • Shopify's own Analytics replaced "Returns" with "Sales reversals" in March 2026. Meerkats keeps refunds and cancellations as separate streams, so both views are possible.

What Meerkats can change#

In every connected tool, Meerkats can create, read, update and delete records, within the permissions you grant and the permissions the tool allows. These are the changes it proposes for Shopify, and the limit that applies to each.

ChangeLimit
Create a product, variant or collection (for example a bundle)Proposed for approval, with the full spec shown first
Change a price or compare-at priceProposed with the margin impact shown; never automatic
Create or end a discountProposed for approval
Adjust stock at a locationProposed for approval
Fix tracking (pixel or UTM setup)Staged as a task for your store's owner or developer

How every change is governed

Every change starts as a proposal in your Inbox. Nothing changes in the connected tool until a person approves it, unless you set that rule to act on its own.

Before it runs an approved change, Meerkats re-reads the live value. If the value moved since the proposal, it asks again instead of acting on stale data.

Meerkats stores the value it replaced, so every change can be undone from Agents run history.

Anything Meerkats creates starts paused. Switching it on is a second, separate approval.

Example automations#

Type any of these on the New automation page (Automation Agents › + New Agent).

  • “Email me every morning with yesterday's orders, refunds and new customers”
  • “Alert me on Slack when any product with active ad spend drops below 5 days of cover”
  • “Send a weekly report of discount codes by orders and net sales”

Troubleshooting#

Revenue tiles still say No data

Open Data Hub › Bronze Layer › Shopify and check the sync chip. If it says Never synced, select Resync. If Sync History shows a failed run, the store may have removed the app; select Connect on Shopify to reinstall.

Gross margin is empty

Gross margin needs Cost per item on each variant in Shopify. Fill it in under the product's variant and it flows through on the next sync.

Orders from ads show as unattributed

Check that your ad URLs carry UTMs or that auto-tagging is on, and that your theme or checkout keeps the parameters through to the order. Headless storefronts often drop them.

Numbers differ from Shopify Analytics

Shopify Analytics counts by order date in the store time zone and nets refunds on the refund date. Meerkats does the same by default; make sure you're comparing the same date range and that refunds are shown the same way.

I have more than one store

Connect each store in its own workspace, or in the same workspace if you want them added up in cross-platform reports.

Last updated October 1, 2026