🔒 Internal Handbook — confidential. Do not share links or content with anyone outside G-Starlink.
ProductPricing structure

Pricing structure

How G-Starlink prices its products, both retail and wholesale.

Two pricing models

Retail

One price per SPU, visible on Shopify / Amazon / eBay. Stored in products.retail_price_aud, retail_price_usd, retail_price_eur. Changing it requires updating the channel listing.

Wholesale (B2B)

Tier-based, with quantity breaks inside each tier, plus customer-specific overrides when needed.

Customer tiers

TierWho qualifiesTypical discount vs retailApproval
RetailEnd consumersN/A (this is the list price)Automatic
Tier 3New or small resellers (< 500/month)~20% off retailCS lead
Tier 2Regular resellers (500–2000/month)~35% off retailCS lead
Tier 1Top resellers (> 2000/month, strategic)~45%+ off retailRay

These are directional — actual percentages vary per SKU based on our cost. Real prices live in Supabase.

Quantity breaks

Within each tier, larger orders get lower unit prices. Typical structure:

Tiermin_quantityNotes
All1Base tier price
All100First volume discount
All500Mid-volume
All1000Bulk

Not every SKU has breaks at every level — depends on our cost structure.

Customer-specific pricing

Some top resellers have negotiated prices that override the tier. Examples of legitimate reasons:

  • Annual volume commitment. “We’ll buy 5,000 units of SKU X in 2026” in exchange for a locked price
  • Strategic partnership. Reseller helps us enter a new market; we lock a favorable price for 6 months
  • Competitive match. Reseller has another supplier at price Y; we match Y to keep them

Illegitimate reasons (don’t do these):

  • “They’re a nice person”
  • “They asked for a discount and I didn’t want to argue”
  • Trying to save a relationship that’s already lost

Governance

  • Every customer-specific price must have a reason field filled in with the contract number or written rationale
  • valid_to is mandatory — no indefinite overrides
  • Ray reviews all customer-specific prices quarterly; anything expired or no-longer-justified gets removed
  • New Tier 1 customers require Ray’s explicit approval. Tier 2 and 3 can be approved by the CS lead.

Price changes

Changing a price goes through valid_from / valid_to:

  1. Existing row: set valid_to to yesterday (don’t delete)
  2. Insert new row with valid_from = today and the new price

This preserves history. If we ever need to audit what a customer should have paid on a given date, we can reconstruct it.

Retail price changes additionally require syncing to Shopify, Amazon, eBay. Not automated yet — manual for now. See Tech backlog.