Skip to main content
Click “Copy Page” to copy this use case as markdown.

Problem

Users tend to shop at whichever merchant is most convenient without realizing the same product is available for less at another retailer. Neither large retailers nor delivery platforms are uniformly cheaper - price differences depend on the specific product, and the gap can be significant. Without SKU-level visibility into what was purchased and where, there is no practical way to surface these comparisons.

Solution

Use SKU-level transaction data from Knot’s Sync Transactions endpoint to build a cross-merchant price index across your user base. After each purchase, check whether the same product is available at a lower price at another merchant. Surface the savings opportunity as a proactive tip.
iPhone lock screen showing a push notification: Save $4.50 on Tide PODS - You paid $24.99 at Target. The same pack is $20.49 on Amazon.
This turns passive spending data into actionable savings guidance, without requiring the user to comparison shop on their own.

Flow

Implementation

1

Sync transaction data

When a user switches their card at a merchant or links their merchant account, Knot begins collecting transaction data. Listen for the NEW_TRANSACTIONS_AVAILABLE webhook event, then call Sync Transactions to pull the user’s transactions.Key fields
FieldPurpose
products[].nameProduct display name, used as the cross-merchant matching key.
products[].external_idMerchant-specific product identifier.
products[].price.unit_pricePrice paid at this merchant.
products[].categoryKnot-provided category, used to validate matches are comparable.
products[].subcategoryKnot-provided subcategory for narrower match validation.
products[].image_urlProduct image for the comparison card.
merchant.idIdentifies which merchant this price is from.
merchant.nameRetailer display name for the UI.
datetimePurchase timestamp.
external_user_idIdentifies the user in your system.
order_statusFilter to completed orders only.
Only include transactions with order_status of COMPLETED, DELIVERED, PICKED_UP, SHIPPED, BILLED, or ORDERED. Filter out CANCELLED, REFUNDED, and FAILED.
2

Build the cross-merchant price index

As products are synced, maintain a shared price index keyed by product name and merchant. Use products[].name combined with products[].subcategory (or products[].category as fallback) to identify the same product at different merchants.
FOR each product in new_transaction.products:
    upsert into price_index:
        key: (normalized_name, subcategory, merchant_id)
        fields: (name, unit_price, image_url, merchant_name)
This index is populated by data across all your users. A user who has only connected one merchant can still receive alerts about prices at other merchants, because other users’ transactions contribute to the index.
3

Detect cross-merchant savings

On each incoming transaction, check whether any product in the order appears in the price index at a lower price at a different merchant.
FOR each product in new_transaction.products:

    cheaper_options = query price_index WHERE
        normalized_name == normalize(product.name)
        AND subcategory == product.subcategory  // fall back to category if null
        AND merchant_id != new_transaction.merchant.id
        AND unit_price  <  product.price.unit_price

    IF cheaper_options is not empty:
        best = option with lowest unit_price
        savings = product.price.unit_price - best.unit_price
        savings_pct = savings / product.price.unit_price

        IF savings >= MIN_SAVINGS AND savings_pct >= MIN_SAVINGS_PCT:
            queue comparison for external_user_id
Configuration decisions for your team:
ParameterSuggested DefaultConsiderations
MIN_SAVINGS$1.00Cross-merchant switches have more friction than same-merchant swaps. A higher floor keeps alerts worth acting on.
MIN_SAVINGS_PCT10%Avoids surfacing marginal differences on high-priced items.
Max comparisons per order2One or two clear wins is more actionable than a long list.
Alert frequencyOnce per product per userRe-evaluate when a meaningful price change is detected (e.g., gap widens by $1+).
Price freshness30 daysDiscard index entries older than 30 days. Prices shift and stale data leads to false alerts.
Trigger timing options:
  • Real-time (preferred): Run the check on each incoming transaction. Alerts surface while the purchase is fresh in the user’s mind.
  • Weekly digest: Aggregate all cross-merchant savings opportunities from the past week and present a cumulative summary. Lower friction for users who prefer fewer notifications.
  • Hybrid: Real-time for savings above $2 per item; weekly digest for smaller gaps.
4

Surface the comparison

When a cheaper price is found, notify the user with the product, what they paid, where it is cheaper, and the savings amount.
iPhone lock screen showing a push notification: Save $4.50 on Tide PODS - You paid $24.99 at Target. The same pack is $20.49 on Amazon.
Deep-link the notification to a screen where the user can view the full comparison and navigate to the product at the cheaper merchant.

Expansion Path

  • Merchant recommendations: If a user consistently overpays at one merchant relative to another on a set of products they buy regularly, surface a merchant-level recommendation rather than per-product alerts. “Most of what you buy at Walmart is cheaper on Amazon” is a more compelling insight than individual item comparisons.
  • Weekly savings digest: Aggregate all cross-merchant comparisons from the week into a single card showing total potential savings. This keeps the feature visible for users who prefer a lower notification volume.