Data catalog

Every tool the dashboard can connect to through its own API, with the field names that come in (from API research, each with a status) and the dashboard metrics they feed.

DC1Tools

52

Each with its own official API

DC2Documented fields

616

Field names from API research, see Status per field

DC3Categories

11

Shop to hospitality

DC4Verified against docs

21%

11 of 52 tools verified against live docs; 32 from knowledge, 9 uncertain

DC5Browse the tools

Filter by category, verification or access. The search box also looks inside field names, entities and metrics.

52 of 52 tools

DC6Shopify: data that comes in

Select any card above to switch tool. 31 fields documented.

VerifiedWebshop platformAccess: App reviewOpen API docs
API
Admin GraphQL API + ShopifyQL + Bulk Operations
Authentication
OAuth 2.0 access token (X-Shopify-Access-Token), per shop
Access and approval
Custom app on own store needs no review; public app needs review. read_all_orders for orders older than 60 days; protected customer data level 1/2 for PII; read_reports for ShopifyQL.
Connection effort
MediumOAuth per shop and cost-based rate limits; read_all_orders and PII scopes need approval for public apps.

Derived dashboard metrics

  • Gross / net revenue
  • AOV
  • Refund rate
  • Cancellation rate
  • New vs returning
  • Repeat rate and LTV
  • Revenue by UTM source
  • Abandoned checkout rate
  • Sessions and conversion rate (ShopifyQL)

Feeds dashboard pages

  • /ecommerceE-commerce
  • /revenueRevenue
  • /retentionRetention
  • /paid-mediaPaid media

Fields (31)

EntityFieldFeeds metricStatus
Orderid, name, createdAt, processedAtTime series, order countVerified
OrdertotalPriceSetGross revenueVerified
OrdercurrentTotalPriceSetNet revenueVerified
OrdersubtotalPriceSet / currentSubtotalPriceSetProduct revenueVerified
OrdertotalDiscountsSet / currentTotalDiscountsSetDiscount amount, discount rateVerified
OrdertotalTaxSet / currentTotalTaxSetTax, ex-tax revenueVerified
OrdertotalShippingPriceSetShipping revenueVerified
OrdertotalRefundedSetRefund amount, refund rateVerified
OrdernetPaymentSetCash-basis netVerified
OrdercurrencyCode, presentmentCurrencyCodeMulti-currency normalisationVerified
OrdersourceNameRevenue per sales channelVerified
OrderchannelInformation { channelId, channelDefinition { handle, channelName } }Revenue per channelVerified
OrdercustomerJourneySummary { firstVisit, lastVisit, daysToConversion, momentsCount, ready }First / last touch attributionVerified
CustomerVisitlandingPage, referrerUrl, source, sourceType, occurredAt, referralCodeLanding page, referrerVerified
CustomerVisitutmParameters { source, medium, campaign, content, term }Revenue by UTM source / campaignVerified
OrdercancelledAt, cancelReasonCancellation rateVerified
OrderdisplayFinancialStatus, displayFulfillmentStatusFunnel, fulfilment rateVerified
OrdertestFilter out test dataVerified
Ordercustomer { id, numberOfOrders, amountSpent, createdAt }New vs returning, LTVVerified
OrderdiscountCodes, discountApplicationsDiscount usage per codeVerified
OrdershippingAddress { countryCode, provinceCode, city }Revenue per countryVerified
LineItemquantity, sku, title, originalUnitPriceSet, discountedUnitPriceSet, totalDiscountSetUnits per order, top productsVerified
LineItemvariant.inventoryItem.unitCostGross marginUncertain
RefundtotalRefundedSet, createdAt, refundLineItems { quantity, subtotalSet, restockType }Refund rate per product and monthVerified
OrderTransactionkind, status, amountSet, gateway, processedAtPayment mix, feesVerified
CustomernumberOfOrders, amountSpent, createdAt, lastOrder, tagsLTV, repeat rateVerified
AbandonedCheckoutabandonedCheckoutUrl, lineItems, subtotalPriceSet, totalPriceSet, discountCodes, createdAtAbandoned checkout rate, recoveryVerified
InventoryLevelquantities(names: [available, on_hand])Stock-outs, days of coverVerified
SubscriptionContractstatus, lines, nextBillingDate, billingPolicyMRR, churnVerified
ShopifyQLFROM sales SHOW total_sales, net_sales, orders, average_order_valueNet sales, AOVVerified
ShopifyQLFROM sessions SHOW sessions, conversion_rateSessions, conversion rateUncertain

Notes and limitations

  • Orders default to the last 60 days unless read_all_orders is approved.
  • customerJourneySummary is only filled for Online Store orders; headless or server-side orders can return ready=false. Pass UTMs as cart attributes as a workaround.
  • Sessions, bounce and conversion are not per order; use ShopifyQL (read_reports) or the GA4 API.
  • GraphQL cost-based rate limit (max 1000 points per query); use Bulk Operations for volume and webhooks plus a reconciliation poll.
  • COGS only exists when the merchant fills in unitCost. Ad spend is not in Shopify.

DC7Unified data model

Where each normalised dashboard field comes from in every tool. A dash means the tool does not provide it.

Normalised orders, order lines and refunds across webshop platforms. Amounts as decimal plus currency; mark tax-inclusive amounts explicitly.

Normalised fieldShopifyMagentoWooCommerceBigCommerceShopware 6SquarespaceWix
order_idOrder.id (GID), nameentity_id, increment_idid, numberidid, orderNumberid, orderNumberid, number
created_atcreatedAtcreated_atdate_created_gmtdate_createdorderDateTimecreatedOnpurchasedDate / createdDate
gross (incl. tax)totalPriceSet.shopMoneygrand_total (base_grand_total)totaltotal_inc_taxamountTotalgrandTotalpriceSummary.total
subtotalsubtotalPriceSetsubtotalsum of line_items.subtotalsubtotal_ex_taxpositionPricesubtotalpriceSummary.subtotal
discountstotalDiscountsSetdiscount_amount (abs)discount_totaldiscount_amount + coupon_discountorder_line_item type=promotiondiscountTotalpriceSummary.discount
taxtotalTaxSettax_amounttotal_taxtotal_taxprice.calculatedTaxestaxTotalpriceSummary.tax
shippingtotalShippingPriceSetshipping_amountshipping_totalshipping_cost_ex_taxshippingTotalshippingTotalpriceSummary.shipping
refunds (total)totalRefundedSettotal_refundedsum of refunds[].total (negative)refunded_amountorder_transaction refund state (uncertain)refundedTotalbalanceSummary.refunded
net (after refunds)currentTotalPriceSetgrand_total - total_refundedtotal + sum(refunds.total)total_inc_tax - refunded_amountamountTotal - refundgrandTotal - refundedTotalbalanceSummary.paid - refunded
currencycurrencyCode / presentmentCurrencyCodeorder_currency_code / base_currency_codecurrencycurrency_codecurrency.isoCode + currencyFactorgrandTotal.currencycurrency
statusdisplayFinancialStatus, displayFulfillmentStatusstate, statusstatusstatus_idstateMachineState.technicalNamefulfillmentStatus, paymentStatestatus, paymentStatus
is_cancelledcancelledAt != nullstate = canceledstatus in (cancelled, failed)status_id = 5state cancelledfulfillmentStatus = CANCELEDstatus = CANCELED
customer_idcustomer.id (null = guest)customer_id (customer_is_guest)customer_id (0 = guest)customer_id (0 = guest)orderCustomer.customerId- (email)buyerInfo.contactId
customer_emailemail (PII-limited)customer_emailbilling.emailbilling_address.emailorderCustomer.emailcustomerEmailbuyerInfo.email
channelsourceName, channelInformationstore_id (store view)created_viachannel_id, order_sourcesalesChannelIdchannelchannelInfo.type
utm_source / medium / campaigncustomerJourneySummary.lastVisit.utmParameters- (GA4 or extension)meta_data._wc_order_attribution_utm_*-campaignCode, affiliateCode (limited)-- (attributionSource only)
referrerlastVisit.referrerUrl-_wc_order_attribution_referrer----
landing_pagelastVisit.landingPage-_wc_order_attribution_session_entry----
discount_codesdiscountCodescoupon_codecoupon_lines[].code/orders/{id}/couponspromotion line items payloaddiscountLines[].promoCodevia activities (uncertain)
shipping_countryshippingAddress.countryCodeshipping_assignments[].shipping.address.country_idshipping.countryshipping addresses country_iso2order_delivery.shippingOrderAddress.countryshippingAddress.countryCoderecipientInfo.address.country
line: skuLineItem.skuitems[].skuline_items[].skuproducts[].skupayload.productNumberlineItems[].skuphysicalProperties.sku
line: qtyquantityqty_orderedquantityquantityquantityquantityquantity
line: unit priceoriginalUnitPriceSetpricepricebase_priceunitPriceunitPricePaidprice / priceBeforeDiscounts
line: qty_refundedrefundLineItems.quantityqty_refundedrefunds[].line_items[].quantityrefund items[]limitedlimitedrefundQuantity
line: cogsvariant.inventoryItem.unitCostbase_cost- (plugin)cost_price_ex_taxproduct.purchasePrices--
abandoned checkoutabandonedCheckouts query/carts/search (is_active)- (plugin)Abandoned Carts API / webhookcart table / plugin-Abandoned Checkouts API
sessions / conversionShopifyQL sessionsGA4GA4GA4GA4GA4Wix Analytics API / GA4
realtime pushORDERS_CREATE etc.Adobe I/O Events / observerorder.created / updatedstore/order/createdapp webhooks / floworder.createOrderApproved / OrderUpdated

Source: _plan/research (section Gemeenschappelijk datamodel) per category

DC8Which client uses which source

29 of 52 catalog tools are in use by at least one demo client. Stacks come from the client portfolio.

ToolMaison VeloursAtelier Linen Co.Fleur de Sel ParisHôtel Lumière Paris
ConnectedNot usedNot usedNot used
Not usedConnectedNot usedNot used
Not usedNot usedConnectedNot used
ConnectedConnectedNot usedNot used
Not usedNot usedConnectedNot used
ConnectedConnectedNot usedNot used
Not usedConnectedNot usedNot used
Not usedNot usedConnectedNot used
ConnectedNot usedConnectedNot used
Not usedConnectedNot usedConnected
Not usedNot usedConnectedNot used
ConnectedConnectedNot usedConnected
Not usedNot usedConnectedConnected
Not usedConnectedNot usedNot used
ConnectedConnectedNot usedNot used
ConnectedConnectedConnectedConnected
ConnectedConnectedConnectedConnected
Not usedNot usedConnectedNot used
ConnectedNot usedConnectedNot used
ConnectedConnectedConnectedConnected
ConnectedNot usedNot usedNot used
Not usedConnectedConnectedNot used
Not usedNot usedConnectedNot used
ConnectedNot usedNot usedNot used
Not usedConnectedConnectedNot used
ConnectedNot usedNot usedNot used
Not usedConnectedConnectedConnected
Not usedNot usedNot usedConnected
Not usedNot usedNot usedConnected
Sources per client1314159

Source: src/lib/clients.ts CLIENTS (webshop, marketplaces, email, crm, affiliate, ads, other)

DC9Connection effort

A rough estimate per tool based on authentication, approval and rate limits.

ToolEffortReason
MediumOAuth per shop and cost-based rate limits; read_all_orders and PII scopes need approval for public apps.
MediumNo review, but auth and rate limits differ per installation and attribution must come from GA4.
EasyKey and secret per site, no review; only hosting limits and missing sessions and abandoned carts need workarounds.
EasySimple API account with scopes; limits per plan and no attribution in the order.
MediumEasy auth, but refunds and attribution are thin and field names must be checked per installation.
MediumPlan requirement and a thin API without refund lines, UTM or sessions.
MediumRich order object, but premium plan and thin attribution and traffic data.
HardRole approvals (Brand Analytics, PII), async reports, strict token buckets and a separate Ads auth.
HardSeparate application and approval, profile-scoped tokens, async reports with 31-day windows.
HardRequest signing, app review, region-dependent endpoints and unclear analytics availability.
EasySelf-service client credentials; only async exports and a separate ads credential to handle.
HardContract-only access and no traffic, ads or financial data.
MediumOAuth with PKCE, commercial access for multiple shops and no traffic or ads data.
MediumKeyset and scopes are manageable, but daily limits and restricted Finances access need care.
MediumEasy auth, but very tight reporting rate limits force a caching layer.
EasyAPI key and simple REST; monthly growth only and revenue needs a connected store.
EasySingle API key and a ready-made attribution endpoint.
MediumEasy auth, but only 55 report calls per day, so everything must be cached.
HardNo reporting API: aggregation from webhooks or SFTP feeds, and revenue is not available.
HardDocs largely unreachable, endpoints and revenue fields unconfirmed.
MediumEasy private app token, but attribution depends on plan and needs custom logic on properties.
EasyPersonal token and one endpoint; UTM depends on form setup.
EasyToken auth and a small, clear data model.
EasyAPI key and one endpoint; UTM needs hidden fields.
EasyKey and secret per site, no review.
HardApp review and business verification for client accounts, BUC rate limiting, versioned API and attribution quirks.
HardDeveloper token and access levels via an MCC, GAQL segment compatibility rules and two-query joins.
HardApp review, per-event metric names that are partly unverified and per-level metric limits.
MediumTrial-to-Standard access upgrade and default attribution that must be aligned.
HardMDP approval, versioned headers with a sunset date and hard response limits.
MediumAsync reports and a developer token, but clear OAuth and no review.
EasyFree, service account auth and a well-documented schema; only quotas and sampling to watch.
EasyFree and a single endpoint; row limits and a 2 to 3 day delay.
EasyBasic auth with account SID and token; real work is the partner-type mapping.
EasyPersonal API token; watch the 31-day window and 20 calls per minute.
MediumGraphQL with 31-day windows and clicks in a separate product.
HardAccount-manager gated access and unverified status and new-customer fields.
EasyKey and secret, but a small and partly unverified model.
EasyKey pair and Shopify-native data.
HardAccount-manager access and a fully unverified field list.
HardPlan-gated API with unverified fields.
HardAccess on request and all fields unverified.
EasySingle token and a small clean model; MRR is a simple derivation.
EasyKey and secret; small data model.
EasyKey based and a small model.
EasyPublic API key covers the read use case.
EasyRead-only key, stable and well-documented API.
MediumFeature must be enabled and the 31-day window forces chunked syncs.
HardPartner-gated access and unverified field names.
HardNo open API: partner approval or manual exports.
MediumToken per property and the partner programme for production integrations.
MediumOAuth app per integration; model is simple.