stack / 04 — updated may 2026

Build a Marketplace for $150/mo

Two-sided. Buyers and sellers, payments split between them, listing search, KYC, image storage. The $150 line is honest — you can't ship a marketplace for less and stay legal.

$132 is the real number, and it's the floor. Below this you're either skipping legal compliance, skipping search, or skipping observability — none of which are optional at marketplace scale.

cap$150/mo
actual$132/mo
updatedMay 2026
services7 · 0 free
stack.txt — receipts/marketplace-150.mdmonthly
SERVICENOTESUSD
Render starterhosting + workers$19
Neon ScalePostgres + branching$19
Meilisearch Cloudlistings search$30
Stripe Connectpayments + payouts + KYC$25
Postmarktransactional email$15
Cloudflare R2object storage (listing images)$10
Sentryerror tracking$14
SUBTOTAL · monthly7 services · 0 free tiers$132/mo
>cheapstack — runs in production. jump to setup →
why / the picks

Why this stack

Marketplaces are different from SaaS. You don’t have one user type, you have two (or three) with conflicting needs. You don’t hold the money, you move it between strangers. You don’t serve a few thousand pages, you serve millions of listings. Each of those facts changes which line items are non-optional.

Stripe Connect is the load-bearing piece. There’s no honest path to running a two-sided marketplace without proper KYC and 1099-K filing — the IRS noticed, the state AGs noticed, and processing payments for unverified sellers is illegal. The $25 is the cheapest way to be legal. PayPal Marketplaces is the only real alternative; it’s comparable on price and worse on developer experience.

Search and storage are the two line items where marketplaces diverge from every other app. Buyers don’t accept slow or imprecise search — they bounce. Listing images are the product, and serving them costs real money on egress-heavy clouds. Meilisearch and R2 are the budget answers to both, and they’re budget answers because the alternatives (Algolia, AWS S3) are 3-5x the price at this scale.

The honest tradeoff: there is no $50/mo marketplace stack. Anyone selling you one is hiding KYC behind a TOS clause that won’t survive contact with reality, or skipping search, or skipping image hosting. The $150 cap is honest. Below it, a different product shape (single-vendor store, content site with affiliate links) might be what you actually want.

services / 7 picks

Per-service deep dives

01

Render starter

$19/mo Updated May 2026
What it does

Hosts the Next.js app and the background worker for image processing, listing approval, and payout reconciliation.

Why we picked it

Vercel and Cloudflare are great for stateless requests, but a marketplace has long-running work — image resize jobs, scheduled payouts, fraud-check pipelines — that doesn't fit serverless cleanly. Render's Starter at $19 gives you a web service plus a worker, both with persistent connections to your database and queue. The deploy story is git-push the same as Vercel.

Where it might bite you
  • Cold starts on the Starter tier are slower than Vercel's edge — first request after idle can spike to 3+ seconds. Use Render's keep-alive or upgrade to Standard if it bites.
  • Background workers don't have a free tier; the moment you add the second service, you're at $19 + $19. Keep the worker count down by batching jobs.
  • Region selection matters. Pick the region closest to your database (Neon's region is the constraint) — cross-region calls add 50-100ms.
02

Neon Scale

$19/mo Updated May 2026
What it does

Serverless Postgres with autoscaling compute and storage, plus database-branching for preview environments.

Why we picked it

Marketplaces have joins — buyer ↔ listing ↔ seller ↔ payment ↔ review — and Postgres handles them well. Neon Scale at $19 includes 10 compute hours and connection pooling that survives serverless fan-out. The branching feature means every Render PR gets its own isolated database, which catches schema bugs before main.

Where it might bite you
  • Cold-start compute is real. After 5 minutes of idle, the next query takes ~2 seconds to wake. Set a heartbeat ping or upgrade if user-facing latency matters.
  • The 10 compute-hour cap on the Scale tier sounds large but isn't if you have constant traffic. Budget for the next tier ($69/mo for Pro) if usage trends up.
  • Neon's branching is fast but not free — every active branch consumes storage. Auto-expire PR branches in CI to avoid surprise bills.
03

Meilisearch Cloud

$30/mo Updated May 2026
What it does

Typo-tolerant, sub-50ms search across listings, with faceted filters and ranking rules.

Why we picked it

Postgres full-text search is serviceable for blog content; for a marketplace it's not. Buyers expect Algolia-quality search — typos forgiven, filters stacked (price, location, condition), ranking that puts good listings first. Meilisearch's pricing at $30 covers up to 100k documents with sub-50ms responses, and the SDK reads like REST.

Where it might bite you
  • Index sync is your job. Either dual-write from app code (risky, can drift) or use a CDC pipe (Debezium, custom worker). The worker on Render is the right place for it.
  • Synonym tuning takes time. Out of the box, 'jeans' won't match 'denim' — you set those mappings explicitly. Plan a few hours of search relevance work in week 2.
  • 100k documents on the $30 tier is plenty for a niche marketplace; broad horizontal marketplaces (everything-for-everyone) outgrow it fast.
04

Stripe Connect

$25/mo Updated May 2026
What it does

Accepts payment from buyers, splits the platform fee, pays sellers, and handles seller identity verification (KYC) for tax compliance.

Why we picked it

Connect is the only path that's both legal and not custom-built. Sellers on your platform are paid through Stripe-managed accounts — Stripe handles the tax forms (1099-K), identity verification, and disputes. Your platform takes its cut on every transaction. Without Connect you'd be running money for unverified sellers, which is illegal in the US and most other jurisdictions. The $25 is the platform-fixed Connect fee — transactional fees are on top (2.9% + 30¢ per charge, plus 0.25% + 25¢ per payout).

Where it might bite you
  • Onboarding sellers through Stripe-hosted Connect Onboarding is slower than your homepage suggests. Some sellers (especially international) get stuck on identity docs for days. Build a clear status page so they can self-serve.
  • 1099-K tax forms are filed by Stripe but you're responsible for sellers actually receiving them. Build a year-end communication flow.
  • Disputes are routed to your platform email by default. Without a process, they'll pile up and you'll lose them by default — Stripe rules in the customer's favor on no response.
05

Postmark

$15/mo Updated May 2026
What it does

Sends every transactional email — listing alerts, message notifications, payment receipts, dispute notices.

Why we picked it

Marketplaces have higher transactional volume than SaaS — every listing change, message, and transaction triggers an email. Postmark's $15/mo covers 10k emails and has the best transactional deliverability of any provider in this price range. Their server architecture separates transactional from marketing, so a misconfigured marketing send doesn't tank deliverability for receipts.

Where it might bite you
  • Postmark blocks marketing email types by policy. Anything that looks like a digest, broadcast, or promotional send needs a separate ESP (Beehiiv or MailerLite). Don't try to game it — they suspend accounts.
  • Bounce and complaint handling is automatic but the dashboard is sparse. If you want detailed deliverability analytics, the $50 tier or a service like SparkPost is more visible.
  • Templates use a Markdown-like syntax (Mustache + Markdown). It's fine but doesn't accept React-email components, unlike Resend.
06

Cloudflare R2

$10/mo Updated May 2026
What it does

Stores listing images with global CDN delivery and zero egress fees.

Why we picked it

S3-compatible storage at $0.015/GB/month, with zero egress charges — the differentiator. A marketplace serves the same images many times; on AWS S3 you'd pay $90/TB egress, on R2 it's free. $10 covers ~600GB of stored images. Cloudflare Images on top adds resize-on-the-fly if you don't want to bake an image pipeline.

Where it might bite you
  • R2's API is S3-compatible but not exact. Some SDKs assume AWS-only behaviors (region in URL, presigned URL formats); test the SDK against R2 before assuming it works.
  • No native image transforms in R2 itself — that's Cloudflare Images, a separate $5/mo service. Bake transforms with sharp on the worker, or pay for Images.
  • Backup strategy is your job. Cloudflare won't lose your data, but versioning isn't on by default. Turn it on if listing-image deletion needs to be reversible.
07

Sentry

$14/mo Updated May 2026
What it does

Captures errors and performance traces from app + worker, with source maps and release tracking.

Why we picked it

The Developer plan at $14 covers 50k errors and 100k performance events — enough for an early marketplace. The reason to pay even at this scale: marketplace bugs are often payment bugs, and a 5-minute outage on the checkout flow is direct lost revenue. Sentry's release tracking and breadcrumbs cut triage time from 'an afternoon' to 'fifteen minutes'.

Where it might bite you
  • Sample rates apply per-environment. tracesSampleRate at 1.0 in production blows the quota in a week — set it to 0.1 from day one.
  • Worker-side errors need separate Sentry SDK setup. Don't assume the web SDK is also catching background-job exceptions.
  • The $14 Developer plan caps team members; Team plan ($26) adds unlimited members. With one founder you're fine; with a co-founder you're already over.
setup / ~30 minutes

Setup in 30 minutes

Two to three days for a working prototype, depending on Stripe Connect onboarding speed. The order below assumes you want to test the full happy-path before opening to real sellers.

  1. Bootstrap the Next.js app on Render with a worker

    Create a Render service from a fresh Next.js repo, add a second background-worker service from the same repo using a separate start:worker npm script. Both services pick up env vars from a shared environment group.

  2. Spin up Neon Scale and define the core schema

    Schema in Drizzle or Prisma: users (with role: buyer | seller | both), listings, transactions, messages, reviews. Enable branching for preview environments. Run migrations from the worker on deploy.

  3. Wire Stripe Connect with hosted onboarding

    Switch the Stripe account to Connect. Use Connect Onboarding (Stripe-hosted) for sellers — it handles KYC and identity verification. Webhooks for `account.updated`, `payout.paid`, `charge.dispute.created`. Test with a Stripe test account end-to-end before any real seller lands.

  4. Add Meilisearch and the index-sync worker

    Meilisearch Cloud account, create a single index for listings. On the worker, listen for listing CRUD events and upsert to the search index. Add filterable attributes (category, price range, location) and ranking rules.

  5. Set up Postmark for transactional

    Verify domain (SPF, DKIM, DMARC). Wire each transactional path: signup, message-received, payment-received, listing-approved, dispute-opened. Templates in Postmark's dashboard or version-controlled in the repo via the API.

  6. Configure R2 for listing images

    Cloudflare account → R2 → create a bucket. Use presigned URLs from the app for direct browser upload. The worker resizes (sharp) into 3 sizes and stores back to R2. Public-read with a signed-URL fallback for moderated content.

  7. Add Sentry to web + worker, wire release tracking

    npx @sentry/wizard for both services. Add Sentry to the worker process explicitly — it’s a separate SDK initialization. Set tracesSampleRate: 0.1 and confirm source maps upload from the Render build step.

thresholds / numeric

When this stack runs out

Marketplace thresholds are about volume, not just user count. A few high-GMV sellers can break this stack faster than a thousand window-shoppers.

100k indexed listings
Meilisearch Cloud's $30 tier ends. Move to Build at $60/mo or self-host on a Render service with persistent disk.
10 compute-hours / 5GB on Neon
Neon Scale tier is consumed. Pro at $69/mo is the next stop. By then your unit economics should justify it; if not, the marketplace isn't working.
10k transactional emails/mo
Postmark's $15 tier ends. The $25 tier covers 50k. Add separate marketing ESP (Beehiiv) for any non-transactional sends.
First Stripe dispute
Without a dispute response process, you'll lose them by default. Set up automated email alerts for `charge.dispute.created` and a 24-hour SLA for response.
1M monthly requests
Render Starter starts feeling cold-start latency. Move to Standard ($25/mo) for the web service. Worker can stay on Starter unless backlog grows.
gotchas / from production

Common gotchas

Marketplace footguns. Each of these has cost a real platform real money — the kind of money you can’t get back from Stripe.

  • PAYMENTS

    Connect onboarding latency surprises sellers

    Identity verification can take 24-72 hours for international sellers. Build a 'pending verification' state in your UI and explain why they can't list yet. Otherwise they sign up, fail to onboard, and churn.

  • DISPUTES

    Stripe disputes default to losing

    If you don't respond to a dispute within Stripe's window (usually 7-21 days), Stripe rules for the customer automatically. Wire `charge.dispute.created` webhook to a real human's email and an SLA process.

  • SEARCH

    Meilisearch index drift

    Dual-writing from the app means the search index can drift from the database. Add a daily reconciliation job that re-indexes recent changes. Drift is silent — nothing errors, results are just wrong.

  • STORAGE

    R2 doesn't version by default

    Sellers delete listings, you remove images, accident → image is gone. Turn on R2 versioning before launch. Recovery from S3-compatible versioning is a one-line API call; recovery without it is impossible.

  • TAX

    1099-K thresholds change

    The IRS lowered the 1099-K threshold to $600 (delayed but coming). Your platform must report sellers crossing it. Stripe files the 1099 but you must communicate it. Sellers blindsided in Q1 by tax forms is a top churn driver.

  • WORKER

    Background jobs silently fail without monitoring

    A failing worker job (image resize crash, email send failure) doesn't surface in the web app. Sentry catches the exception, but unless the worker logs the success path too, you won't know how many jobs are succeeding versus erroring out.