AWS Marketplace Listing Specification¶
Date: 2026-05-09
Status: Pre-launch reference. Single source of truth for what should appear in AWS Marketplace Seller Central for the Vellocity SaaS Contract listing.
Companion docs:
- PRICING_ALIGNMENT_AUDIT_2026_05_06.md — multi-surface pricing audit
- PRICING_PAGE_COPY_GTM_POSITIONING.md — public copy
- AGENTIC_PAYMENTS_X402_OPPORTUNITY.md — agentic metering rail
TL;DR¶
- One AWS MP listing with 3 self-serve contract tiers (Starter / Accelerate / Command) + Enterprise via Private Offer.
- Two contract durations: monthly + annual. Annual is the same SKU at a discounted price.
- Headline prices match direct Stripe (
$299 / $1,499 / $3,999monthly). The 3% AWS Marketplace fee is absorbed as CAC, not passed through to the listing price. - 8 metering dimensions handle usage above the included tier allocation.
- Divergence from Stripe is allowed only in Private Offers and in metering rate cards.
Source-of-truth chain¶
| Layer | Storage | Authoritative for |
|---|---|---|
Vellocity DB (plans) |
MySQL | Tier names, slugs, headline prices, included credits, marketing copy |
Stripe gateway_products |
DB → Stripe API | Direct-subscription checkout SKUs |
Vellocity DB (marketplace_pricing_dimensions) |
MySQL | AWS MP overage dimensions, base unit prices |
| AWS MP listing | Seller Central (manual) | Public AWS MP listing — mirrors Vellocity DB |
| AWS MP private offers | Seller Central per-customer | Permitted to diverge from public list pricing |
When any of the first three change, the AWS MP listing must be updated manually in Seller Central. There is no automated publish from this repo to AWS MP.
SaaS Contract pricing rows¶
These are the rows to enter in Seller Central when configuring the SaaS Contract listing.
| Tier | Duration | List price (USD) | DB plan ID | Stripe product | Stripe price ID |
|---|---|---|---|---|---|
| Starter | Monthly | $299/mo | 1 | prod_UTtKp8BBHoo8jC |
price_1TUvXMJ64NJeR1n97xgOUuuC |
| Starter | Annual | $2,990/yr ($249/mo equiv) | 6 | prod_UTtKp8BBHoo8jC |
(yearly price ID — see DB gatewayproducts) |
| Accelerate | Monthly | $1,499/mo | 2 | prod_UTtQTDFcw2hGF8 |
price_1TUve1J64NJeR1n96ngyir9W |
| Accelerate | Annual | $14,990/yr ($1,249/mo equiv) | 7 | prod_UTtQTDFcw2hGF8 |
(yearly price ID) |
| Command | Monthly | $3,999/mo | 3 | prod_UTta7cxYfFBD8V |
price_1TUvnjJ64NJeR1n9NJoAt6Jo |
| Command | Annual | $39,990/yr ($3,333/mo equiv) | 8 | prod_UTta7cxYfFBD8V |
(yearly price ID) |
| Enterprise | Custom | Private Offer only | 4 | none (no self-serve SKU) | n/a |
Naming for Seller Central: Vellocity GTM — Starter / Vellocity GTM — Accelerate / Vellocity GTM — Command. Internal slugs (starter / accelerate / command_plus) and brand line ("Vellocity — GTM for Marketplaces") agreed in the May 6 audit.
Annual savings = 17% (not 20%). Yearly prices are monthly × 10, i.e. 2 months free, which works out to 16.7%. Public marketing currently advertises "Save 20%". Pick one — either round honestly down to "Save 17%" or bump yearly prices to monthly × 9.6 (≈$2,870 / $14,390 / $38,390) to make 20% true. Don't ship the public AWS MP listing with a 20% claim that the SKU prices contradict.
Metering dimensions (overage)¶
These are the 8 dimensions seeded in marketplace_pricing_dimensions (2026-02-03). Each maps 1:1 to an AWS MP aws_dimension_name and represents the cost of usage above the included tier allocation. Each customer's tier grants an included_quantity; AWS MP meters consumption above that and bills monthly via BatchMeterUsage.
| AWS dimension | Vellocity key | Unit | Base price | Included (Starter) | Tier floor | Metered |
|---|---|---|---|---|---|---|
Words |
words |
per 1,000 words | $0.001 | 50,000 | any | yes |
Images |
images |
per image | $0.050 | 100 | any | yes |
AudioMinutes |
audio_minutes |
per minute | $0.010 | 30 | Accelerate+ | yes |
VideoMinutes |
video_minutes |
per minute | $0.500 | 5 | Command+ | yes |
APIRequests |
api_requests |
per 1,000 reqs | $0.010 | 10,000 | Accelerate+ | yes |
GTMWorkflows |
gtm_workflows |
per workflow | $5.000 | 5 | Starter+ | yes |
TeamSeats |
team_seats |
per seat/month | $29.000 | 0 (per-tier floor) | any | no (entitlement) |
SEOCredits |
seo_credits |
per credit | $0.100 | 50 | any | yes |
Volume tiers are seeded per-dimension in pricing_tiers JSON and unlock automatic discounts at higher usage bands (e.g. words: $0.001 → $0.0008 above 100K → $0.0006 above 500K). Volume tier discounts apply to public list prices; Private Offers may override.
team_seats is an entitlement dimension, not a usage dimension — included counts come from each tier (Starter 3, Accelerate 10, Command 25). The $29/seat overage rate applies for additional seats beyond the included allocation.
Tier × dimension applicability¶
What each tier customer gets, expressed as the included_quantity × applicable_plan_ids matrix. Annual variants of each tier inherit the same dimension allocations as their monthly counterpart — billing frequency does not change entitlement.
| Dimension | Starter | Accelerate | Command | Enterprise |
|---|---|---|---|---|
| Words | 50,000 | 50,000 | 50,000 | custom |
| Images | 100 | 100 | 100 | custom |
| Audio minutes | — | 30 | 30 | custom |
| Video minutes | — | — | 5 | custom |
| API requests | — | 10,000 | 10,000 | custom |
| GTM workflows | 5 | unlimited (per memory note) | unlimited | custom |
| Team seats | 3 | 10 | 25 | unlimited |
| SEO credits | 50 | 50 | 50 | custom |
Open inconsistency (deferred): the included-quantity values seeded into marketplace_pricing_dimensions are uniform across tiers (e.g. all tiers get 50,000 words included). The marketing copy on /pricing and the credit pool sizes (500 / 2,500 / 10,000) imply tier-stratified included quantities. These need to be reconciled before publishing the Seller Central listing — either by overriding included_quantity per-tier in marketplace_pricing_dimensions (extend schema) or by entering tier-specific contracts in AWS MP that deduct different included amounts.
Open decisions before publishing the listing¶
- Yearly discount honesty — claim "Save 20%" or deliver 20%. Currently 17%.
- Marketplace SEO tier — marketing copy on
/pricingsays Command-tier, butTeamMemberCapability::minimumPlan()enforces Accelerate. Pick one before AWS MP customers see the listing. - Tier-stratified included quantities for metering dimensions (above) — one schema extension or tier-specific contract setups.
- Enterprise — Private Offer only, but should the public AWS MP listing carry an "Enterprise — contact sales" CTA card, or be invisible? Recommendation: invisible on the public listing (matches
hidden=1in DB, matches /payment behavior); surface only via direct outreach + Private Offer URL. - ~~
marketplace_pricing_dimensions.applicable_plan_idsstill references plan id5(deleted in May 6 cleanup) and omits the new yearly plan ids7,8.~~ Resolved 2026-05-09 by2026_05_10_000004_reconcile_marketplace_dimension_plan_ids.php— lists are now derived dynamically from the currentplanstable by slug, keyed off each dimension'stier_level. Verified result:tier=any → [1,2,3,4,6,7,8],tier=accelerate → [2,3,4,7,8],tier=command → [3,4,8].
Update procedure¶
When tier prices change in plans:
- Update
planstable (price + name + slug) — preferably via a migration following the May 8 Phase C pattern (2026_05_08_000001_wire_premium_repositioning_stripe_ids.php). - Confirm Stripe products + prices match (
php artisan tinker→Stripe\Price::retrieve(...)). - Manually update Seller Central listing — change SaaS Contract row prices.
- Re-render this spec doc by running the data-extraction tinker script in
PRICING_ALIGNMENT_AUDIT_2026_05_06.mdand updating the tables above. - Notify existing AWS MP subscribers via the AWS MP-required notification path (60-day grandfathering for SaaS Contract changes).
When metering dimension rates change in marketplace_pricing_dimensions:
- Update the row(s) in
marketplace_pricing_dimensions. - Manually update the corresponding dimension in Seller Central. Existing entitlements remain at the original rate; only new entitlements pick up the new price.
- Update this spec.
Private Offer carve-outs¶
Divergence from public AWS MP list pricing is permitted only via Private Offers. Common patterns:
- Multi-year commit discount beyond the standard 17% annual discount (e.g. 25% on 3-year commit).
- Custom dimension allocations (e.g. Enterprise with 1M words included rather than 50K).
- Custom dimensions beyond the 8 published (e.g. dedicated AgentCore tenancy, white-label rights).
- Negotiated contract minimums above the public Command price for Enterprise.
Express Offers infrastructure exists at app/CustomExtensions/CloudMarketplace/System/Services/ExpressOfferPricingService.php. All 8 dimensions are flagged express_offer_eligible=1.
Cross-source consistency reminder¶
Per AWS internal field intel (May 8): AWS's agent-driven discovery weights cross-source consistency between (a) seller's website, (b) AWS MP listing, and (c) third-party signals. The vell.ai /pricing page and the AWS MP listing must show the same headline tier names, prices, and capability descriptions. Divergence dilutes ranking and signals to discovery agents that the seller is gaming the catalog.
This spec exists to make that consistency easy to maintain. When in doubt, the DB is canonical; everything else mirrors.