# Sanity CMS development agency

> Sanity CMS development agency for teams shipping content at scale. Preferred Sanity partner, community ambassadors and authors of Turbo Start Sanity. We build studios, migrate from WordPress and Strapi, and tune Sanity so editors actually want to use it.

**Updated:** 2026-08-11
---

Why Roboto Studio?

## Enterprise teams trust us with the build

### Helix in genomics, Global Cycling Network in sports media, Tabby in fintech. All ran on Sanity Studio we built.

Each arrived with its own procurement, security review and legacy stack. Our delivery process is shaped by the ISO 27001 work we have underway.

## AI tooling built for your editorial team

### Background agents that research a topic, check every claim against a live source, and hand your editors a sourced first draft.

[Semantic search](/blog/building-a-search-bar-with-sanity-embeddings-index-api-and-nextjs) on Sanity's embeddings index. Keyword gaps pulled from Ahrefs. Whatever your content team needs, wired into the studio.

    Sanity is a database with an editor on top, not a website tool. Your site, your app and whatever you launch next read the same content through one API.

    Scheduled releases, granular roles and real-time collaboration in one place. Your team runs a launch without a spreadsheet tracking who changed what.

    Sanity Media Library gives an organization one asset store across every studio, with custom metadata and collections. We add automated OG images and per-channel crops on top.

    Sanity Connect mirrors your Shopify catalog into the Content Lake so editorial wraps around live product data. [turbo-start-shopify](/tools/turbo-start-shopify) is the starter we ship it on.

    Presentation gives editors click-to-edit overlays on the real page, next to the studio. They preview a campaign, hit publish and watch the live site change without a redeploy.

    When the defaults run out of road we extend the studio. Custom input components, internal dashboards and workflow widgets Sanity doesn't ship, all yours to keep.

## 9 in 10 builds we take on are migrations

### Off a legacy CMS, or off a studio another agency walked away from. We have taken over both mid-crisis.

The Mario Testino archive came to us at 200% API overage with 160+ redirects missing. Each page below covers the schema, the 301 plan and the cutover.

## One studio, every language

### Tabby publishes across its markets in Arabic and English from a single Sanity studio.

Right-to-left styling lives in the component library, not patched on afterwards. One content model, one editorial workflow, every locale.

## What Sanity will cost you

The canonical page renders an interactive estimator here. The tables below cover its full answer space, generated from the same logic. Preset usage figures are modelled estimates derived from Sanity's published quotas, except where a preset says measured — those were read off a real account we run, with the client kept anonymous. Roboto Studio does not resell Sanity seats.

### Plan limits

| Plan | Editor seats | Documents | Asset storage | Bandwidth/mo | API CDN requests/mo | Uncached API requests/mo | Price |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Free | Up to 20 | 10,000 | 100 GB | 100 GB | 1M | 250K | $0 forever |
| Growth | Up to 50 | 25,000 | 100 GB | 100 GB | 1M | 250K | $15 per seat/month |
| Enterprise | Custom | Custom | Custom | Custom | Custom | Custom | Talk to Sanity |

Free has no overage billing: exceed a quota and the next step is Growth, not a bill.

### Overage rates

| What bills | Included on Growth | Rate over quota |
| --- | --- | --- |
| Bandwidth | 100 GB a month | $0.30 per GB |
| API CDN requests | 1M a month | $1 per 250K requests |
| Uncached API requests | 250K a month | $1 per 25K requests |
| Asset storage | 100 GB | $0.50 per GB |
| Documents | 25,000 | $299/mo for 50,000 documents |
| Extra datasets | 2 included | $999 per dataset/mo |

An uncached API request costs ten times what the same request costs through the API CDN. That ratio, not content volume, is what turns a badly modelled front end into an overage bill.

### Implementation quality levels

| Level | What it means | Request multiplier | Payload multiplier | Share of requests missing the CDN |
| --- | --- | --- | --- | --- |
| Well modelled | Queries fetch only the fields a page renders, and responses are cached at the edge. | 1x | 1x | 2% |
| Typical | Queries pull more than the page needs, and caching is applied unevenly across routes. | 3x | 2.2x | 15% |
| Naive | Whole documents fetched from the browser on every render, straight past the CDN. | 12x | 6x | 55% |

**Well modelled.** Queries fetch only the fields a page renders, and responses are cached at the edge.

- GROQ projections limited to the fields the page renders
- One content query per route, resolved on the server
- Served through the API CDN and cached at the edge
- Uncached requests reserved for previews and webhooks

**Typical.** Queries pull more than the page needs, and caching is applied unevenly across routes.

- Partial projections, with whole nested objects pulled in wholesale
- Several queries per route instead of one composed query
- CDN used for most routes, bypassed on the ones that were awkward
- Revalidation windows short enough to re-fetch far more than needed

**Naive.** Whole documents fetched from the browser on every render, straight past the CDN.

- No query projection — whole documents fetched and filtered in JavaScript
- Client-side GROQ firing on every render and every navigation
- Hitting the uncached API directly, so the CDN never absorbs the load
- References resolved one request at a time instead of joined in GROQ

### Estimated monthly cost by archetype and implementation quality

| Archetype | Implementation | Pageviews/mo | Documents | Editor seats | Assets | Plan | Estimated monthly cost | Overages |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Simple portfolio | Well modelled | 5,000 | 120 | 1 | 3 GB | Free | $0/mo | None |
| Simple portfolio | Typical | 5,000 | 120 | 1 | 3 GB | Free | $0/mo | None |
| Simple portfolio | Naive | 5,000 | 120 | 1 | 3 GB | Free | $0/mo | None |
| Marketing site | Well modelled | 40K | 400 | 4 | 8 GB | Growth | $60/mo | None |
| Marketing site | Typical | 40K | 400 | 4 | 8 GB | Growth | $60/mo | None |
| Marketing site | Naive | 40K | 400 | 4 | 8 GB | Growth | $80.69/mo | Bandwidth $18.55; Uncached API requests $2.14 |
| High-traffic marketing site | Well modelled | 100K | 2,900 | 22 | 7 GB | Growth | $330/mo | None |
| High-traffic marketing site | Typical | 100K | 2,900 | 22 | 7 GB | Growth | $330/mo | None |
| High-traffic marketing site | Naive | 100K | 2,900 | 22 | 7 GB | Growth | $441.74/mo | Bandwidth $91.38; Uncached API requests $20.36 |
| Documentation site | Well modelled | 180K | 3,500 | 8 | 5 GB | Growth | $120/mo | None |
| Documentation site | Typical | 180K | 3,500 | 8 | 5 GB | Growth | $125.72/mo | Bandwidth $5.72 |
| Documentation site | Naive | 180K | 3,500 | 8 | 5 GB | Growth | $353.60/mo | Bandwidth $188.48; API CDN requests $0.47; Uncached API requests $44.65 |
| High-traffic blog | Well modelled | 750K | 6,000 | 12 | 60 GB | Growth | $233.64/mo | Bandwidth $53.64 |
| High-traffic blog | Typical | 750K | 6,000 | 12 | 60 GB | Growth | $309.17/mo | Bandwidth $118.85; API CDN requests $4.80; Uncached API requests $5.52 |
| High-traffic blog | Naive | 750K | 6,000 | 12 | 60 GB | Growth | $1,292.68/mo | Bandwidth $880.35; API CDN requests $14.63; Uncached API requests $217.70 |
| Multi-brand ecommerce | Well modelled | 2M | 45,000 | 35 | 250 GB | Growth | $2,096.07/mo | Bandwidth $193.05; API CDN requests $5.02; Asset storage $75; Documents $299; Extra datasets $999 |
| Multi-brand ecommerce | Typical | 2M | 45,000 | 35 | 250 GB | Growth | $2,315.79/mo | Bandwidth $366.93; API CDN requests $19.46; Uncached API requests $31.40; Asset storage $75; Documents $299; Extra datasets $999 |
| Multi-brand ecommerce | Naive | 2M | 45,000 | 35 | 250 GB | Growth | $4,938.48/mo | Bandwidth $2,397.60; API CDN requests $45.68; Uncached API requests $597.20; Asset storage $75; Documents $299; Extra datasets $999 |
| News publisher | Well modelled | 3M | 90,000 | 40 | 400 GB | Enterprise | Custom pricing | Bandwidth $304.58; API CDN requests $9.52; Asset storage $150; Documents $299 |
| News publisher | Typical | 3M | 90,000 | 40 | 400 GB | Enterprise | Custom pricing | Bandwidth $565.40; API CDN requests $31.19; Uncached API requests $52.10; Asset storage $150; Documents $299 |
| News publisher | Naive | 3M | 90,000 | 40 | 400 GB | Enterprise | Custom pricing | Bandwidth $3,611.40; API CDN requests $70.52; Uncached API requests $900.80; Asset storage $150; Documents $299 |

**Simple portfolio.** A personal site: a handful of pages, one person publishing. Modelled from Sanity's published quotas, not measured from a client account.

**Marketing site.** Twenty or so pages, a small blog, and a handful of people publishing. Modelled from Sanity's published quotas, not measured from a client account.

**High-traffic marketing site.** A marketing site at 50k+ sessions a month, with a large publishing team. Seats, documents, assets and traffic measured from a real Growth account in August 2026. On that account bandwidth was the one line that billed, and its measured bandwidth ran well past the modelled figure shown here.

**Documentation site.** Deep page count, heavy internal linking, very little imagery. Modelled from Sanity's published quotas, not measured from a client account.

**High-traffic blog.** Editorial cadence of several posts a day, with a large image library. Modelled from Sanity's published quotas, not measured from a client account.

**Multi-brand ecommerce.** Several storefronts, deep product catalogue, separate datasets per brand. Modelled from Sanity's published quotas, not measured from a client account.

**News publisher.** Continuous publishing, a large archive, and a newsroom on staggered shifts. Modelled from Sanity's published quotas, not measured from a client account.

Usage figures above are modelled estimates unless a preset's note says measured. Request and bandwidth volume is modelled from the inputs, even on measured presets. Prices and quotas are Sanity's own, checked 2026-08-11. Source: https://www.sanity.io/pricing

## What Sanity costs

| Plan | Seats | Documents | CDN API requests/mo | Price |
| --- | --- | --- | --- | --- |
| Free | Up to 20 | 10,000 | 1M | $0 forever |
| Growth | Up to 50 | 25,000 | 1M | $15 per seat/month |
| Enterprise | Custom | Custom | Custom | Talk to Sanity |

*Sanity's own list prices, verified 2026-07-30. Roboto Studio does not resell Sanity seats.*

## What we've shipped

| Figure | What it covers | Resources |
| --- | --- | --- |
| 500k | Pages migrated to Vercel in six weeks, the largest re-platform we have run | [Tray.ai](/case-study/tray) |
| 99.86% | Faster builds, a full workday down to two minutes | [Tray.ai](/case-study/tray) |
| 200% | Sanity API overage eliminated on a live photography archive | [Mario Testino](/case-study/mario-testino) |
| 160+ | Redirects recovered after another agency's botched migration | [Mario Testino](/case-study/mario-testino) |
| 3 months | WordPress and Shopify converged into one Sanity storefront, design through to launch | [Slingshot Bio](/case-study/slingshot-bio) |

## The documentation agent we built

### Ask it anything and it reads your docs and your site's code, then answers from what it actually found.

It tracks your codebase instead of a stale snapshot, so marketing stops queuing behind an engineer for answers.

## Sanity's official Next.js courses are both ours

[Page building](https://www.sanity.io/learn/course/page-building) and [SEO optimization](https://www.sanity.io/learn/course/seo-optimization). We're the only agency ever to write official Sanity Learn courses. [Turbo Start Sanity](https://www.sanity.io/templates/turbo-start-sanity) is ours too, the starter every new studio here begins from.

More Sanity builds we've shipped

## Thinking about building with Sanity?

The questions we get asked on every Sanity scoping call.

### What is Sanity CMS?

Sanity is a headless, API-first content platform. Editors work in Sanity Studio (a customizable React-based editor that runs in the browser), and content is stored in Content Lake and delivered through GROQ, GraphQL or the Live Content API to whatever frontend you're building. The Studio is fully open source, so the parts that don't quite fit your team can be extended or replaced. That's where most of our work happens.

### How does Sanity CMS pricing work?

The Free plan covers 20 seats, 10,000 documents and 1M CDN API requests a month at $0. Growth is $15 per seat per month for up to 50 seats and 25,000 documents, with the same API allowances plus pay-as-you-go overages beyond them. Enterprise is custom pricing for teams that need SSO, custom roles or a dedicated SLA.

    The honest answer most agencies skip: budget for the implementation and content-modeling work too. The license is usually a small fraction of total cost in year one, and a well-modeled studio earns that fee back inside the first few campaigns.

### Is Sanity free?

Yes, and the free plan stays free with no time limit. It covers 20 user seats, 10,000 documents, 1M CDN API requests a month, 250K regular API requests and 100GB of assets.

    You outgrow it when you need more than 20 seats, more than 10,000 documents, scheduled publishing, private datasets, or roles beyond admin and viewer. The next step up is Growth at $15 per seat per month.

### How much does Sanity cost per user?

$15 per seat per month on the Growth plan, charged for editor seats only, with viewer seats free. Growth runs up to 50 seats, so a team of 10 editors pays $150 a month before any overages.

    Under 20 seats the Free plan costs nothing. Past 50 seats, or if you need SSO or custom roles, you move to Enterprise and Sanity quotes you directly.

### How long does a WordPress to Sanity migration take?

For a site of 500 to 2,000 pages, 4 to 8 weeks end to end. Mapping your existing content model to a Sanity schema is 1 to 2 weeks of that.

    Editor training is a 2 hour onboarding session and most teams publish confidently inside a week. Livemore's marketing team shipped 12 campaign pages in their first month on the studio we built.

### Sanity CMS vs WordPress: which one should we move to?

If your team is mostly publishing blog posts on a single website and you're happy with WYSIWYG editing, WordPress is fine. If you're publishing structured content into multiple channels (a website, a mobile app, an in-store screen), or your editors keep hitting WordPress's limits with custom fields and ACF workarounds, Sanity is the right move.

    We run WordPress-to-Sanity migrations regularly: we map every legacy URL, preserve SEO equity with 301s, redesign the content model around how editors actually work, and train the team before cutover so they're ready to publish on launch day.

### Sanity CMS vs Strapi: what's the difference?

Strapi is self-hosted and open source; Sanity is hosted with a much more polished editor and a real-time Content Lake. Strapi makes sense if data residency or self-hosting is non-negotiable and you have the DevOps budget to run it. Sanity makes sense for almost everyone else. The editor, the live preview, the Presentation tool and scheduled publishing are years ahead, and you don't pay for the infrastructure to keep them running. We've migrated teams in both directions and Sanity wins on editorial velocity in most scenarios.

### Can Sanity be self-hosted?

Sanity Studio (the editor) is open source and runs anywhere you deploy a Next.js or Vite app: Vercel, your own infrastructure, behind a VPN. The Content Lake (the database) is Sanity-hosted and not available as a self-hosted product. For teams with strict data residency requirements, Sanity offers regional hosting and Enterprise data-handling agreements; we'll walk you through the options on a scoping call.

### What framework do you recommend with Sanity?

Next.js, almost always. The App Router, server components and streaming model fit Sanity's GROQ-on-the-server pattern perfectly, and Vercel's caching primitives make `revalidateTag` invalidations from Sanity webhooks trivial.

    For brochure sites with no interactive logic we'll sometimes recommend Astro instead, but nine out of ten production builds end up on Next.js, which is why [Turbo Start Sanity](https://github.com/robotostudio/turbo-start-sanity) is a Next.js + Sanity starter.

### My last Sanity build was a mess. Is Sanity actually the problem?

Almost never. Every time we've inherited a "painful" Sanity studio, the schema turned out to be the problem: references modeled as strings, page builders without thumbnails, validation rules nobody ever wrote.

    A good Sanity studio is built around how editors actually work, and most agencies skip that step. If you've got a Sanity build that's making editors miserable, we'll happily audit it and tell you honestly whether to fix it, rebuild the schema, or migrate to something else.

From the blog