# Builder Plan: for the stage between prototype and scale

> Builder Plan is Pinecone’s $20/month flat-rate pricing tier built for builders who’ve outgrown Starter but aren’t ready for usage-based pricing. It adds capacity for dev/staging/production workflows, multi-tenant apps, and growing user demand—without surprise bills.

Harshita Daddala · 2026-05-06

> Update: As of June 2026, the Builder plan supports serverless indexes in every generally available region on AWS, GCP, and Azure. [See the release notes](https://docs.pinecone.io/release-notes/2026).

I joined Pinecone six months ago to lead product-led growth. My focus: what it takes to go from building to scaling on the platform.

Talking to customers, I learned what they were building: legal research tools, medical search assistants, educational knowledge bases replacing scattered docs and whitepapers. Real products, with real users, doing real work.

What I heard consistently was that while the Starter tier is generous, free and capable enough to get a lot done, it started to feel tight past the prototype stage. The next available tier is Standard at $50/month, which is reasonable for teams already at scale, but hard to justify when your usage is still early and your workload generates nowhere near that every month. Having worked on developer tooling for close to a decade, much of it in open source, I recognized this friction immediately. Making powerful tooling accessible without surprising developers on cost was the job.

Builder is our attempt to fix that: a **$20/month flat-rate plan** designed for builders who've outgrown Starter, are ready to take their app to production, but haven't yet reached the scale that justifies Standard.

---

### What Builder is designed for

The limits on Builder are based on what we know about how thousands of builders at this stage actually work.

- **10 indexes** keeps dev, staging, and production as separate environments without having to tear one down to spin up another.
- **1,000 namespaces per index** lets you give each user or tenant an isolated space, which is usually what takes a product from internal tool to something shippable.
- **200 assistants per project** supports document-heavy products where every user or use case gets its own context.
- **More storage and usage headroom** to scale comfortably at this stage.

Builder also includes free support, which tends to matter more than you'd expect the moment your users are real.

One note on availability: Builder runs on aws-us-east-1 now. Multi-region and multi-cloud support across AWS, GCP, and Azure are coming soon.

For the full breakdown, see the [pricing page](https://www.pinecone.io/pricing).

### Which tier fits your stage

Builder fills a specific gap. Pinecone now has four tiers, each sized for a distinct stage of building, and Builder slots in between Starter and Standard.

**Starter** is free, and it's not a demo. With enough storage, indexes, and usage to build something real and take it pretty far. Most people who stay on Starter eventually need to create a second project, add a teammate, or create more indexes as their architecture evolves. That's the natural point where Starter starts to feel tight.

**Builder** is for when those ceilings start to matter. When you want to add a teammate, spin up another project, or build out an architecture that needs more indexes. Maybe it's a side project that picked up users faster than you expected. Maybe it's a startup product six weeks from launch. Maybe it's an internal tool your team depends on. Builder is sized for that stage: more indexes, more projects, more teammates, and a flat monthly cost that fits where you are.

**Standard** is for teams with established workloads who want to pay proportionally to scale. When you're there, usage-based pricing is the right call — and Standard is built for it.

**Enterprise** is for organizations with more complex requirements — dedicated infrastructure, advanced security and compliance, SLAs, and support built around how larger teams operate. If you're evaluating Pinecone at that level, [reach out directly](https://www.pinecone.io/contact).

```json
{
  "_key": "5829c696e31d",
  "_type": "htmlEmbed",
  "code": {
    "_type": "code",
    "code": "<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\n<style>\n  :root {\n    --blue: #002BFF;\n    --glow: 0, 43, 255;\n    --card-bg: #fff;\n    --border: #e2e2e2;\n    --text: #0a0a0a;\n    --text-muted: #666;\n    --text-faint: #999;\n  }\n\n  /* data-theme is set by the HTML Embed wrapper from the site theme; colors match the site's dark tokens */\n  html[data-theme=\"dark\"] {\n    color-scheme: dark;\n    --blue: #1E86EE;\n    --glow: 30, 134, 238;\n    --card-bg: #1E1E1E;\n    --border: #404040;\n    --text: #fff;\n    --text-muted: #A3A3A3;\n    --text-faint: #737373;\n  }\n\n  *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }\n\n  /* No scrollbars inside the iframe: the HTML Embed wrapper sizes the iframe to the content */\n  html, body {\n    overflow: hidden;\n    background: transparent;\n    font-family: \"Inter\", system-ui, sans-serif;\n  }\n\n  /* Height is set by fit(); overflow clips the Builder card while it waits below the row */\n  #embed-root {\n    position: relative;\n    height: 428px;\n    overflow: hidden;\n  }\n\n  /* Fixed design size, scaled to the iframe width from the top-left */\n  #embed-stage {\n    position: absolute;\n    left: 16px;\n    top: 6px;\n    width: 1062px;\n    height: 410px;\n    transform-origin: 0 0;\n  }\n  #embed-stage.grid {\n    width: 514px;\n    height: 640px;\n  }\n\n  .stage {\n    position: absolute;\n    inset: 0;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 10px;\n    padding: 12px 40px;\n  }\n  .grid .stage {\n    padding: 12px 16px;\n  }\n\n  /* Never shown on the live version either; it only reserves the space above the cards */\n  .headline {\n    width: 100%;\n    opacity: 0;\n  }\n\n  .eyebrow {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    font-size: 11px;\n    font-weight: 600;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--blue);\n    margin-bottom: 6px;\n  }\n  .eyebrow-dot {\n    width: 6px;\n    height: 6px;\n    background: var(--blue);\n    border-radius: 50%;\n    animation: pulse-dot 2s ease-in-out infinite;\n  }\n  @keyframes pulse-dot {\n    0%, 100% { opacity: 1; transform: scale(1); }\n    50% { opacity: 0.4; transform: scale(0.65); }\n  }\n\n  h1 {\n    font-size: 32px;\n    font-weight: 700;\n    color: var(--text);\n    letter-spacing: -0.02em;\n    line-height: 1.15;\n  }\n  h1 em {\n    font-style: normal;\n    color: var(--blue);\n  }\n\n  .cards-wrapper {\n    position: relative;\n    width: 982px;\n    height: 272px;\n    flex-shrink: 0;\n  }\n  .grid .cards-wrapper {\n    width: 482px;\n    height: 550px;\n  }\n\n  .card {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 232px;\n    height: 260px;\n    background: var(--card-bg);\n    border: 1px solid var(--border);\n    padding: 22px 20px 20px;\n    opacity: 0;\n    will-change: transform, opacity;\n  }\n\n  .card.builder {\n    border-color: var(--blue);\n    border-width: 1.5px;\n    box-shadow: 0 8px 32px rgba(var(--glow), 0.10);\n  }\n\n  .card-header {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 8px;\n  }\n\n  .card-tier {\n    font-size: 26px;\n    font-weight: 700;\n    color: var(--text);\n    letter-spacing: -0.02em;\n    line-height: 1;\n  }\n\n  .badge-popular {\n    display: inline-flex;\n    align-items: center;\n    border: 1px solid var(--blue);\n    border-radius: 100px;\n    padding: 2px 10px;\n    font-size: 10px;\n    font-weight: 500;\n    color: var(--blue);\n    letter-spacing: 0.01em;\n    flex-shrink: 0;\n    margin-top: 4px;\n  }\n\n  .card-desc {\n    font-size: 13px;\n    color: var(--text-muted);\n    line-height: 1.45;\n    margin-bottom: 14px;\n    min-height: 38px;\n  }\n\n  .card-btn {\n    width: 100%;\n    padding: 9px 0;\n    font-size: 13px;\n    font-weight: 500;\n    text-align: center;\n    border: 1px solid var(--blue);\n    color: var(--blue);\n    margin-bottom: 14px;\n  }\n\n  .card.builder .card-btn,\n  .card-btn.filled {\n    background: var(--blue);\n    color: #fff;\n    font-weight: 600;\n  }\n\n  .card-price {\n    font-size: 20px;\n    font-weight: 700;\n    color: var(--blue);\n    letter-spacing: -0.02em;\n    line-height: 1;\n  }\n\n  .card-price-sub {\n    font-size: 11px;\n    font-weight: 400;\n    color: var(--text-faint);\n    margin-left: 5px;\n    text-decoration: underline dotted;\n    text-underline-offset: 2px;\n    position: relative;\n    top: -1px;\n  }\n\n  .badge-new {\n    display: inline-flex;\n    align-items: center;\n    background: var(--blue);\n    border-radius: 100px;\n    padding: 2px 8px;\n    font-size: 9px;\n    font-weight: 700;\n    color: #fff;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n    flex-shrink: 0;\n    margin-top: 6px;\n  }\n\n  .card.builder.landed {\n    animation: shadow-pulse 600ms ease-out forwards;\n  }\n  @keyframes shadow-pulse {\n    0%   { box-shadow: 0 8px 32px rgba(var(--glow), 0.10); }\n    40%  { box-shadow: 0 0 0 8px rgba(var(--glow), 0.08), 0 8px 32px rgba(var(--glow), 0.14); }\n    100% { box-shadow: 0 8px 32px rgba(var(--glow), 0.10); }\n  }\n</style>\n\n<div id=\"embed-root\">\n  <div id=\"embed-stage\" aria-label=\"Pinecone pricing animation\">\n    <div class=\"stage\">\n      <div class=\"headline\" id=\"headline\">\n        <div class=\"eyebrow\"><span class=\"eyebrow-dot\" aria-hidden=\"true\"></span>New plan</div>\n        <h1>Introducing <em>Builder</em> — $20/month flat</h1>\n      </div>\n\n      <div class=\"cards-wrapper\">\n        <div class=\"card\" id=\"cardStarter\">\n          <div class=\"card-header\">\n            <div class=\"card-tier\">Starter</div>\n          </div>\n          <div class=\"card-desc\">For trying out and for small applications.</div>\n          <div class=\"card-btn\">Current</div>\n          <div class=\"card-price\">Free</div>\n        </div>\n\n        <div class=\"card builder\" id=\"cardBuilder\">\n          <div class=\"card-header\">\n            <div class=\"card-tier\">Builder</div>\n            <div class=\"badge-new\">New</div>\n          </div>\n          <div class=\"card-desc\">For solo developers and small teams.</div>\n          <div class=\"card-btn\">Start with 1 month free</div>\n          <div class=\"card-price\">$20/month flat</div>\n        </div>\n\n        <div class=\"card\" id=\"cardStandard\">\n          <div class=\"card-header\">\n            <div class=\"card-tier\">Standard</div>\n            <div class=\"badge-popular\">Popular</div>\n          </div>\n          <div class=\"card-desc\">For production applications at any scale.</div>\n          <div class=\"card-btn filled\">Upgrade</div>\n          <div class=\"card-price\">$50/month<span class=\"card-price-sub\">min. usage</span></div>\n        </div>\n\n        <div class=\"card\" id=\"cardEnterprise\">\n          <div class=\"card-header\">\n            <div class=\"card-tier\">Enterprise</div>\n          </div>\n          <div class=\"card-desc\">For mission-critical production applications.</div>\n          <div class=\"card-btn filled\">Upgrade</div>\n          <div class=\"card-price\">$500/month<span class=\"card-price-sub\">min. usage</span></div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n<script>\n  const LAYOUTS = {\n    row: { w: 1062, h: 410 },\n    grid: { w: 514, h: 640 },\n  };\n  // Below this available width the row would scale under 0.6, so switch to a 2x2 grid\n  const GRID_BELOW = 640;\n  const INSET_X = 16;\n  const INSET_Y = 18;\n\n  const STEP_X = 232 + 18;\n  const STEP_Y = 260 + 18;\n  // Card slots in reading order: left to right in the row, 2x2 in the grid\n  const INIT = { starter: 0, standard: 1, enterprise: 2 };\n  const FINAL = { starter: 0, builder: 1, standard: 2, enterprise: 3 };\n  const BUILDER_OFF_Y = 220;\n\n  const root = document.getElementById(\"embed-root\");\n  const stage = document.getElementById(\"embed-stage\");\n  const starter = document.getElementById(\"cardStarter\");\n  const builder = document.getElementById(\"cardBuilder\");\n  const standard = document.getElementById(\"cardStandard\");\n  const enterprise = document.getElementById(\"cardEnterprise\");\n  const cards = [starter, builder, standard, enterprise];\n\n  let grid = false;\n\n  const slotXY = slot => grid\n    ? [(slot % 2) * STEP_X, Math.floor(slot / 2) * STEP_Y]\n    : [slot * STEP_X, 0];\n\n  // Transform-only movement so the browser can run it on the compositor\n  const place = (el, slot, dy = 0, opacity = 1) => {\n    const [x, y] = slotXY(slot);\n    el.dataset.slot = slot;\n    el.dataset.dy = dy;\n    el.style.transform = `translate(${x}px, ${y + dy}px)`;\n    el.style.opacity = opacity;\n  };\n\n  const fit = () => {\n    const availW = document.documentElement.clientWidth - 2 * INSET_X;\n    if ((availW < GRID_BELOW) !== grid) {\n      grid = !grid;\n      stage.classList.toggle(\"grid\", grid);\n      cards.forEach(el => el.dataset.slot && place(el, +el.dataset.slot, +el.dataset.dy, el.style.opacity));\n    }\n    const { w, h } = LAYOUTS[grid ? \"grid\" : \"row\"];\n    const s = Math.min(availW / w, 1);\n    stage.style.transform = `scale(${s})`;\n    root.style.height = Math.ceil(h * s + INSET_Y) + \"px\";\n  };\n\n  window.addEventListener(\"resize\", fit);\n  fit();\n\n  const wait = ms => new Promise(r => setTimeout(r, ms));\n\n  const ease = (dur, curve) => `transform ${dur}ms ${curve}, opacity ${dur}ms ease`;\n\n  const setTransition = (value, ...els) => els.forEach(el => { el.style.transition = value; });\n\n  const run = async () => {\n    setTransition(\"none\", ...cards);\n    builder.classList.remove(\"landed\");\n\n    place(starter, INIT.starter, 0, 0);\n    place(standard, INIT.standard, 0, 0);\n    place(enterprise, INIT.enterprise, 0, 0);\n    place(builder, FINAL.builder, BUILDER_OFF_Y, 0);\n\n    await wait(380);\n\n    setTransition(ease(640, \"cubic-bezier(0.22, 1, 0.36, 1)\"), starter);\n    place(starter, INIT.starter);\n\n    await wait(90);\n    setTransition(ease(640, \"cubic-bezier(0.22, 1, 0.36, 1)\"), standard);\n    place(standard, INIT.standard);\n\n    await wait(90);\n    setTransition(ease(640, \"cubic-bezier(0.22, 1, 0.36, 1)\"), enterprise);\n    place(enterprise, INIT.enterprise);\n\n    await wait(2000);\n\n    setTransition(ease(620, \"cubic-bezier(0.4, 0, 0.2, 1)\"), starter, standard, enterprise);\n    place(starter, FINAL.starter);\n    place(standard, FINAL.standard);\n    place(enterprise, FINAL.enterprise);\n\n    await wait(660);\n\n    setTransition(ease(800, \"cubic-bezier(0.34, 1.56, 0.64, 1)\"), builder);\n    place(builder, FINAL.builder);\n\n    await wait(820);\n\n    builder.classList.add(\"landed\");\n\n    await wait(4000);\n\n    setTransition(\"opacity 540ms ease, transform 540ms ease\", ...cards);\n    cards.forEach(el => place(el, +el.dataset.slot, 8, 0));\n\n    await wait(660);\n    run();\n  };\n\n  document.fonts.ready.then(() => {\n    fit();\n    run();\n  });\n</script>"
  },
  "title": "Builder Plan Animation"
}
```

### Available today

Builder is available now. Anyone who upgrades to Builder before May 31st gets their first month free — no code needed, applied automatically [when you upgrade](https://www.pinecone.io/pricing/).

I believe infrastructure pricing should match the stage of building, not just the scale of it. Builder is our version of that to enable actively building, shipping, growing.

We've sized the limits based on what we know, and we'll keep adjusting as we learn how teams use the plan. If something specific isn't working for you, tell us! You can reach us at [our Discord channel](https://discord.gg/czM8bRQyCx). Feedback is how this gets better.