links.arjun.tv/docs/end-user/best-practices/ecommerce

E-Commerce and Retail

Best practices for online stores, DTC brands, and retail marketers using 10x to improve campaign velocity, conversion attribution, and revenue capture.

Business problems

  1. Slow campaign launches — Every promotion needs a new link, tracking setup, and QA cycle.
  2. Broken attribution — Clicks happen on one channel, conversions on another, and the data never connects.
  3. One-size-fits-all landing pages — Every visitor sees the same page regardless of geography, device, or intent.
  4. Cart abandonment — Visitors leave checkout with no automated recovery path.
  5. Manual geo-pricing — International traffic lands on wrong-currency pages, killing conversion.

Feature-to-problem map

Problem10x featureGuide
Slow launchesCampaign with PRODUCT_SALE goal + linked slugCampaign Funnel Workflow
Broken attributionctx token + idempotent conversionsContext Token Lifecycle
Same page for all visitorsRouting rules with countryIn, deviceIn, segmentInSmart Link Personalization
Cart abandonmentChain signals + lifecycle rulesChain Signals and Prefetch
Manual geo-pricingCountry-based routing rules with priority orderingAdvanced Link Controls

Recommended workflows

1. Launch a promotion in under 5 minutes

Create a campaign with an embedded primary link in a single API call:

POST /v2/handles/{handle}/campaigns
{
  "campaignId": "summer-sale",
  "goalType": "PRODUCT_SALE",
  "status": "ACTIVE",
  "primaryLink": {
    "slug": "summer",
    "destinationUrl": "https://store.example.com/summer-sale",
    "title": "Summer Sale 2026",
    "enabled": true
  }
}

This creates the campaign, provisions the short link, and starts tracking immediately. Share https://{handle}.10x.in/summer in any channel.

Validate the pipeline end-to-end with a test conversion:

POST /v2/handles/{handle}/campaigns/summer-sale/test-conversion
{
  "value": 49.99,
  "currency": "USD"
}

Check campaign health to confirm all tracking is wired:

GET /v2/handles/{handle}/campaigns/summer-sale/health

A READY readiness status means the campaign is fully operational.

2. Route visitors by country for geo-pricing

Add routing rules to your link so each region sees the right pricing page:

PUT /v2/handles/{handle}/links/summer
{
  "destinationUrl": "https://store.example.com/summer-sale",
  "routingRules": [
    {
      "priority": 10,
      "destinationUrl": "https://store.example.com/summer-sale?region=na",
      "conditions": { "countryIn": ["US", "CA"] }
    },
    {
      "priority": 20,
      "destinationUrl": "https://store.example.com/summer-sale?region=eu",
      "conditions": { "countryIn": ["DE", "FR", "GB", "IT", "ES"] }
    },
    {
      "priority": 30,
      "destinationUrl": "https://store.example.com/summer-sale?region=apac",
      "conditions": { "countryIn": ["JP", "AU", "SG", "IN"] }
    }
  ]
}

The base destinationUrl acts as the global fallback. Rules are evaluated by priority (lower number = higher priority). Preview the routing decision before publishing:

POST /v2/handles/{handle}/links/summer/route-preview
{ "country": "DE", "device": "MOBILE" }

3. Recover abandoned carts with chain signals

When a visitor adds to cart but leaves, your site posts a signal:

POST /v2/public/chain/signals
{
  "handle": "yourstore",
  "sessionId": "sig_yourstore_1740500000000_abc123",
  "eventType": "cart_abandon",
  "signals": [
    { "signalKey": "cart_value", "signalValue": "89.99", "confidence": 1.0 },
    { "signalKey": "product_category", "signalValue": "shoes", "confidence": 0.9 }
  ]
}

A chain rule triggers a recovery action when the visitor returns:

{
  "ruleId": "cart-recovery",
  "enabled": true,
  "priority": 100,
  "triggerEvent": "page_view",
  "chainConditions": {
    "require": [
      { "signalKey": "cart_value", "operator": "exists" }
    ],
    "exclude": [
      { "signalKey": "purchase_complete", "operator": "exists" }
    ],
    "maxChainAgeMinutes": 1440
  },
  "action": {
    "type": "show_banner",
    "template": "You left {{cart_value}} in your cart. Complete your order for 10% off."
  }
}

The rule fires only if the visitor has a cart signal but no purchase signal within the last 24 hours.

4. Track conversions with clean attribution

On your checkout success page, submit the conversion using the ctx token from the redirect:

POST /v2/public/conversions
{
  "ctx": "<token from redirect query param>",
  "eventType": "purchase",
  "value": 89.99,
  "currency": "USD",
  "idempotencyKey": "order-12345"
}

The idempotencyKey ensures duplicate submissions (retries, double-clicks) are safely ignored. The ctx token connects the conversion back to the original click, campaign, and routing rule.

Key metrics to track

MetricWhere to find itWhat it tells you
Conversion rateGET /v2/handles/{handle}/analytics?funnel=true&campaignId={id}Clicks-to-conversions efficiency
Revenue by campaignSame funnel endpoint, revenue fieldTotal attributed revenue
Geo performanceGET /v2/handles/{handle}/analytics?groupBy=country&campaignId={id}Which regions convert best
Segment breakdownGET /v2/handles/{handle}/analytics?groupBy=segment&campaignId={id}High-intent vs. window-shoppers
Confidence scoreFunnel response confidence field (0-100)Data quality for decision-making

Common mistakes

  1. Skipping the test conversion. Always run POST .../test-conversion before sharing the link. It validates the entire pipeline end-to-end.
  2. Not setting an idempotency key. Without one, retried requests can double-count conversions. Use your order ID.
  3. Overlapping routing rules with the same priority. When two rules share a priority, evaluation order is not guaranteed. Space priorities by 10 (10, 20, 30).
  4. Ignoring bot traffic in metrics. Use qualifiedClicks (clicks minus bot clicks) instead of raw clicks for conversion rate calculations.
  5. Letting the ctx token expire. The default TTL is 15 minutes. If your checkout flow takes longer, ensure the ctx is captured on the landing page, not at checkout completion.

Related: