All Articles
Agency Partnerships

The Blueprint for White-Label E-commerce Reselling: Delivering Shopify and WooCommerce Setup to Clients

Stores are easy to sell and easy to break. Here is the delivery blueprint, payment checklist and webhook code for reselling Shopify and WooCommerce builds.

INDOTREX Team29 October 202610 min read
ShopifyWooCommerceWhite-LabeleCommerceWebhooks
Illustration of shopping cart, storefront and price tag icons for white-label eCommerce
Share
On This Page+

E-commerce is the easiest white-label service to sell and the easiest to get wrong. Every client wants a store. Few want to understand payment gateways, tax rules or shipping tables.

If you resell Shopify and WooCommerce builds, you are selling trust. A broken checkout on launch day costs your client money and costs you the account.

This blueprint covers how to scope, deliver and support white-label stores, including the integration code that tends to break first.

Shopify or WooCommerce: Choose Per Client

Don't pick a platform for your agency. Pick it for each client's business.

FactorShopifyWooCommerce
Time to launchFastModerate
HostingIncludedYou or the client manage it
Custom logicVia apps and FunctionsFull control via code
Transaction costPlatform fee plus gatewayGateway only
Maintenance loadLowHigher, needs updates and security
Best forD2C brands, fast launchesContent-heavy stores, complex rules
Subscription and B2BAvailable through appsAvailable through plugins

A simple rule: if the client wants speed and low maintenance, start with Shopify. If they need unusual pricing logic or own their content workflow, look at WooCommerce.

For stores that outgrow both, a headless build with a Next.js front end is the next step.

The Delivery Package

Sell a clear checklist. Clients should see what they get.

  • Store setup: theme, collections, products, navigation.
  • Payments: gateways configured and tested in sandbox, then live.
  • Shipping and tax: rates, zones, taxes, invoices.
  • Integrations: email, analytics, ads pixels, accounting, inventory.
  • Migration: product, customer and order import from the old platform.
  • Training: a recorded walkthrough for the client's team.
  • Handover: credentials, documentation, support plan.

What to exclude in writing

  • Product photography and copywriting
  • Ongoing ad management
  • Third-party app subscriptions
  • Custom features not in the scope document

Payments for International Stores

Payment setup is where white-label stores fail quietly. Test it as if real money is at stake, because soon it will be.

ScenarioCommon setup
US and EU shoppersStripe, PayPal, Apple Pay, Google Pay
UK shoppersStripe, PayPal, Klarna or similar
Middle East shoppersLocal gateway plus card, cash on delivery option
India shoppersRazorpay or Cashfree with UPI, plus cards
Multi-currency cataloguePresentment currency per market, settlement in one account

Checklist before go-live:

  • Run a real low-value transaction in each currency
  • Test a refund and a partial refund
  • Confirm taxes and shipping show correctly at checkout
  • Confirm order emails fire and reach the inbox
  • Confirm the payout account matches the legal entity

For a deeper look at Indian gateways, see our Razorpay versus Cashfree versus CCAvenue comparison.

The Webhook That Breaks First

Stores talk to your custom systems through webhooks: new order, refund, stock change. If you don't verify them, anyone can send fake orders into your ERP.

Both Shopify and WooCommerce sign webhook payloads with HMAC-SHA256. Here's a single Next.js route that verifies either one, rejects replays of the same delivery and passes clean events to your queue.

// app/api/webhooks/[platform]/route.ts
import { NextResponse } from "next/server";
import { createHmac, timingSafeEqual } from "node:crypto";

type Platform = "shopify" | "woocommerce";

const config: Record<Platform, { header: string; secret: () => string | undefined; id: string }> = {
  shopify: {
    header: "x-shopify-hmac-sha256",
    secret: () => process.env.SHOPIFY_WEBHOOK_SECRET,
    id: "x-shopify-webhook-id",
  },
  woocommerce: {
    header: "x-wc-webhook-signature",
    secret: () => process.env.WOOCOMMERCE_WEBHOOK_SECRET,
    id: "x-wc-webhook-delivery-id",
  },
};

function verify(raw: string, signature: string | null, secret: string): boolean {
  if (!signature) return false;
  const expected = createHmac("sha256", secret).update(raw, "utf8").digest("base64");
  const a = Buffer.from(expected);
  const b = Buffer.from(signature);
  return a.length === b.length && timingSafeEqual(a, b);
}

// Replace with Redis or a database table in production.
const seen = new Set<string>();

export async function POST(
  req: Request,
  { params }: { params: Promise<{ platform: string }> },
) {
  const { platform } = await params;
  const cfg = config[platform as Platform];
  if (!cfg) return NextResponse.json({ error: "Unknown platform" }, { status: 404 });

  const secret = cfg.secret();
  if (!secret) return NextResponse.json({ error: "Not configured" }, { status: 500 });

  // Read the raw body. Parsing first changes the bytes and breaks the signature.
  const raw = await req.text();

  if (!verify(raw, req.headers.get(cfg.header), secret)) {
    return NextResponse.json({ error: "Invalid signature" }, { status: 401 });
  }

  const deliveryId = req.headers.get(cfg.id);
  if (deliveryId) {
    if (seen.has(deliveryId)) return NextResponse.json({ ok: true, duplicate: true });
    seen.add(deliveryId);
  }

  const event = JSON.parse(raw);
  // Hand off fast. Do slow work (ERP sync, emails) in a queue, then return 200.
  await enqueue({ platform, topic: req.headers.get("x-shopify-topic") ?? req.headers.get("x-wc-webhook-topic"), event });

  return NextResponse.json({ ok: true });
}

async function enqueue(job: { platform: string; topic: string | null; event: unknown }) {
  // Push to your queue (SQS, Upstash, Inngest, database table).
  console.log("queued", job.platform, job.topic);
}

Things to note:

  • Raw body first. Calling req.json() before verifying breaks the signature check.
  • Return 200 quickly. Both platforms retry slow endpoints, which creates duplicates.
  • Idempotency matters. The in-memory set above is a placeholder, so use a persistent store.
  • Separate secrets per client. One leaked key shouldn't expose every store you run.

Running Many Client Stores Safely

Reselling to multiple clients multiplies risk. Standardise how you work.

  • One Shopify Partner account or one hosting account, with a separate store or site for each client
  • Staff accounts with the lowest access they need
  • A shared password manager with per-client vaults
  • Two-factor authentication on every admin login
  • A launch checklist applied to every store

Hosting WooCommerce responsibly

  • Managed hosting with daily backups
  • Automatic security updates for core, with a staging check for plugins
  • Limited plugin list, each one justified
  • Object caching and a CDN for speed
  • Uptime and checkout monitoring

Protecting IP and Client Data

Store data includes customer names, addresses and order history. Treat it as sensitive.

  1. NDA and data processing terms with the partner before access is granted.
  2. Access through staff accounts, not shared logins, so you can revoke quickly.
  3. No customer data in test environments. Use dummy orders.
  4. Custom code in your Git organisation, with the licence and IP assignment documented.
  5. Offboarding checklist to remove partner access when the project ends.

Timezone Rhythm for Store Launches

Launches rarely tolerate slow replies. Plan the final week.

  • Freeze content and features 5 working days before launch
  • Run a full order test the day before
  • Schedule the go-live for the client's quiet hours
  • Keep a named engineer on call for the first 48 hours
  • Post a written status in Slack every few hours on launch day

With a US or UK client and an India-based team, you can run the production switch overnight and have it verified by their morning.

Pricing and Margins

ServicePricing model
Store setupFixed price by package tier
MigrationFixed price per platform and record count
Custom featuresFixed scope or time and materials
MaintenanceMonthly retainer
Conversion workRetainer or performance-linked fee

Retainers are where the margin sits. A store needs updates, security patches, new campaigns and fixes every month.

Offer three tiers: care (updates and monitoring), grow (plus small improvements) and scale (plus priority engineering time).

Mistakes That Cost You the Client

  • Going live without testing refunds
  • Forgetting tax settings for new markets
  • Leaving default demo content on the live store
  • Skipping redirects when migrating, which wipes out search rankings
  • Handing over credentials without a documented process
  • Letting plugins pile up until the store slows to a crawl

See also our notes on Shopify setup mistakes that hurt D2C brands and Shopify versus Next.js for commerce.

Scaling the Reselling Model With INDOTREX

You can win e-commerce clients without hiring Shopify developers, plugin specialists or DevOps. That's what a white-label partner is for.

INDOTREX delivers Shopify and WooCommerce and custom e-commerce projects under your brand. We configure payments, shipping and integrations, document the setup and pass the store over in a state your client's team can run. Because we sign NDAs up front and work in your accounts, your client relationship stays yours.

The aim is fewer launch-day fires and less rework. Clean theme code, tested checkouts and written handovers keep your support load low and your retainers profitable.

Planning a store build for a client? Book a free 15-minute engineering strategy call. We'll look at the platform choice, the integrations and a realistic timeline with you.

IT

INDOTREX Team

The team behind INDOTREX's client projects — writing from what actually works building websites, stores, and software for businesses across Delhi NCR.

Ready to Start Your Project?

Tell us about your requirements and we'll get back to you with a clear, no-obligation quote.

Get a Free Quote
Chat on WhatsApp