Your AI ships it. It comes up already wired.
Manifest in, live URL out. A database bound, the project id set, and the login callback allowlisted before the app serves its first request. A bucket and a project key the moment you ask for them. Part of Parsons.
You never leave the conversation.
between them. That is the whole deploy path.
- url
- https://invoice-lens.parsonsapps.com
- env.DB
- db_7f2c… · a row in Database you can query and export
- callback
- /cb → on the project's redirect allowlist
- from
- noreply@invoice-lens.parsonsapps.com
The deploy was never the hard part.
Your AI wrote the app in ten minutes. Then you became its sysadmin. Every item below is a browser form behind a signup, which is exactly why the assistant that wrote the code cannot do any of it for you.
redirect_uri_mismatch — paste the callback into the auth vendor's console, exactly, trailing slash and allanother dashboardWe don't host your app. We finish it.
Every host's job ends when the bytes are at a URL. That is the short half of the work, and it is the only half anyone sells. Parsons owns the auth service, the email service and the database service too — so the long half happens inside the same call, keyed to the same slug.
Why nobody else ships this
It isn't a feature gap they could close next quarter. A hosting layer has no auth product to append a callback to, and no sending identity to point noreply@ at. Doing it on your behalf would mean holding your credentials for three other vendors.
Why we can
The same account owns all of it. Deploy calls Auth, Database and Email over service bindings inside Cloudflare's network — no credentials cross a boundary, because there is no boundary to cross.
Two calls. Here is exactly what each one does.
Bundles never travel inside AI messages, and the bytes never pass through our worker. That is not a performance boast — it is the reason a 40-file app deploys from a chat window without timing out.
The manifest carries path, size and sha256 — never contents. Deploy compares it against what this app has already stored and answers with two lists.
Your AI PUTs the three files straight to R2. The Deploy worker is not on that path — so there is no hop to pay for, nothing to buffer, and nothing to time out on a large asset.
Every uploaded file is re-checked against the size and sha256 you declared. Then Deploy fans out — and this is the part that is not hosting.
Also set, always: env.PARSONS_PROJECT_ID and env.PARSONS_DATABASE_ID. On request: env.FILES (a per-app R2 bucket, registered in Storage) and env.PARSONS_KEY (a write-only project key). Runtime is nodejs_compat with a 2026-06-01 compatibility date.
Static assets ship in the same deploy. Files under assets/, public/ or static/ serve with the directory prefix stripped, and .html loses its extension — public/brand.html serves at /brand. You don't have to guess: finalize_deploy hands back the route map it actually built.
Change one file of forty. Upload one file.
The manifest is hashed, so begin_deploy already knows which bytes we hold. It hands back presigned URLs for the difference and nothing else — the tool's own instruction is upload only what comes back in uploads.
This is why a redeploy is a few seconds of network instead of a full re-upload, and why an AI can iterate on a running app without you noticing the cost of it.
Straight about this: the upload is seconds — edge propagation still takes about two to three minutes, and old and new versions interleave across locations while it happens. Don't treat one request as proof the new version is live everywhere.
The login works on deploy one. So does the reset email.
Both the transactional From address and the link inside the mail are derived from the same slug at finalize time. They are not two settings that can drift apart, because they are not two settings.
Your users get password-reset mail from your app, with links back to your app — not from a hostname they have never seen. On deploy number one, with nothing to configure.
Appended idempotently on every deploy, and re-appended for each custom domain you attach.
Point your own domain at it. Apex and www.
Attach a deployed app to a real domain and the DNS records, the worker routes and TLS are created for you — the zone lives in the platform's own account. Buy the domain through Parsons Domains and there is no registrar tab to open at all; bring one you already own and you delegate its nameservers once, with no registrar transfer.
The cutover fans out to three planes at once. The third is the one everybody forgets.
Domains are sold by Parsons Domains at wholesale + $4, always — a $10.88/yr .com is $14.99. Renewals price from the renewal list, so a cheap first year can't ambush you at year two.
Takedown and every lifecycle operation fan out to all of an app's hostnames, custom domains included — an app can't be half-disabled.
We turn the app off. We do not turn the meter up.
This is the part of the category that has gone unanswered since a static site on a metered host produced a six-figure invoice after a traffic spike. Every host meters past the included allowance — open-ended, on an invoice. Here, going past the allowance draws from prepaid credits you loaded on purpose, at roughly wholesale-plus-half — and high above sits a hard safety cap where the app stops serving instead of running up a bill.
Egress verdicts are made on the hostname. DNS rebinding — a public name that resolves to a private address — is an open gap we have written down rather than papered over.
When something is wrong, it says which thing.
A dedicated dispatcher answers every request to every tenant app. It never hands back a blank 500 and leaves you guessing which of five things broke — each cause has its own status code and its own branded page.
Logs stream off the running worker into a project-scoped store, filterable by log · warn · error · exception, up to 200 at a time, and retained for 7 days. Your AI reads them the same way you do — so "why is it 500ing" is a question it can answer without you pasting anything.
22 tools. Every app tool takes a slug or an id.
Deploy lives in the assistant you already talk to — Claude, ChatGPT, Cursor, anything that speaks MCP. The model that wrote the code is the one that ships it, reads its logs and rolls it back.
Destructive tools are two-phase on purpose. rollback refuses without confirm and first tells you both versions — the one you are leaving and the one you are going to — because dep_ ids are indistinguishable at a glance.
The last two are platform-admin only — the abuse plane that can take an app down across every hostname it answers on. They are listed here because pretending they don't exist would be the dishonest choice.
Secrets survive redeploys and are readable in the app as env.<NAME> — and by nobody else, including you.
The client library comes from the platform.
Call get_sdk and it hands back the full source and its type definitions to write into your project — about 28 kB of code plus 26 kB of types, with zero dependencies.
It is deliberately not on npm. A build session has no registry credential and Deploy runs no build step, so the library is served by the platform itself — which also means the copy in your repo always matches the platform that is live. No SDK-versus-platform skew.
Selling to your own customers runs on your own Stripe, through the parsons_billing tools — not through the app kit and not through us.
Both files come from the same call. The tool insists you write the types next to the source, so the editor knows what the platform knows.
Where we win, and where we don't.
Five of these rows go against us and they are marked in red, at the same size as the wins. A table that only flatters the vendor who built it is not evidence of anything.
Yearly: $150 — two months free
Every Vercel and Railway figure above is that vendor’s published list price, checked against vercel.com/pricing and railway.com/pricing on 2026-08-22 — go and check them yourself. Netlify and Render publish plan prices too (Render moved to flat, seat-free tiers on 2026-04-23) and simply aren’t compared here; Fly.io has no plan tier to compare at all — its compute is pay-as-you-go. A comparison table with a guess in it is worth less than one with a gap.
One plan. It includes the other twenty-odd products.
Monthly or yearly, no seats, no free tier. The numbers below are the actual allowances the platform enforces — not headline figures with a meter tucked into a subpage. Going past one is welcome: the extra draws from prepaid credits at roughly wholesale-plus-half, so building stays free and the bill starts when real usage does.
- Ten apps per account, each with its own database
- Rollback, logs, write-only secrets, usage
- Custom domains — apex and www (the domain itself is priced separately)
- Every other Parsons product, same login
Projects are unlimited, and free.
One for the business, one for the client, one for the thing you are not sure about yet — each with its own data, its own members and its own spend caps, at no extra cost. There is nothing to upgrade and there are no seats to buy. Vercel prices a second deploying developer at $20/month; Railway prices a second workspace at $20/month — both their published list prices, checked 2026-08-22. We price a second project at nothing. Those are charges that grow with your team and your client list; ours is the same number in year one and year three.
One subscription, the whole platform.
Deploy is one product on it. The same $15 is also your auth service, your database, your object storage, your outbound email, your scheduler and the rest — and one subscription covers all of it across unlimited projects.
Metered, but not capped.
Some things we measure and deliberately never limit, because they don't drive our cost: monthly active users on Auth, MCP tool calls, and databases created. Auth0 and Clerk meter MAU. We watch it and leave it alone.
The ones we do cap are the ones that cost us per unit — requests, CPU time and stored bytes. Every allowance on this page comes from the same table the platform enforces.
14-day free trial on your first subscription · billed monthly or yearly · cancel any time
Is it worth $15? Here is the arithmetic.
One hosting plan, on its own, costs more than this.
Vercel Pro is $20/month. A Railway Pro workspace is $20/month. Both are hosting, and hosting only — their published list prices, checked 2026-08-22. Base is $15, and Deploy is one of twenty-two products on it. Compare the whole subscription to the one tool it replaces first, then to the other twenty-one.
The charges that turn a $20 plan into an $80 bill aren't here.
Vercel Pro with four people deploying is four seats at $20 — $80/month. A second Railway Pro workspace is another $20. Here there is no seat to buy, so a contractor costs nothing, and projects are unlimited and free — each with its own data, its own members and its own spend caps. No per-MAU fee on Auth and no per-call fee on MCP tools either. The number you sign up at is the number in year three.
Consumption is separate, prepaid and capped.
The things that genuinely cost money per unit don't hide inside the subscription — they run on a prepaid wallet with its own ceiling. AI is provider cost × 1.5; voice is $0.03/minute; an outbound SMS segment is $0.02; a US phone number is $3.99/month. You top it up on purpose. Nothing draws down without you having put it there.
And past the allowance, credits — never an invoice.
There is no invoice waiting behind the $15. Overage draws from the same prepaid wallet, at $0.70 per million requests, and a hard safety cap high above stops the apps rather than run open-ended. The subscription is access, not a loss-leader with a meter hidden behind it.
Paid yearly the top line reads $150 — two months off. Committed extras — a phone number, a domain, an extra bank connection — are priced individually and always approved by you before they appear.
Before you start the trial.
What happens when I hit 1,000,000 requests?
The extra draws from prepaid credits at $0.70 per million requests — nothing is disabled and nothing surprises you on an invoice. Usage is reconciled every 15 minutes. A hard safety cap still sits high above as a fraud stop — it disables every active app in the account, and you can ask us to raise it in the billing console, or set your own lower per-app ceilings so you find out early.
Does the free trial take a card?
Yes. It is a Stripe Checkout subscription with 14 trial days, so Checkout collects a payment method. Cancel any time inside the trial and you are not charged. The trial is first-subscription-only.
Is there an annual plan?
Yes: $150/year, against $180 paid a month at a time. That is exactly two months free, and you can check the arithmetic yourself. You pick the interval at checkout. There is still no free tier.
Can I use my own domain?
Yes — apex and www, with DNS, worker routes, TLS and the auth callback all attached in the same operation. Buy the domain through Parsons Domains at wholesale + $4, or bring one you already own by delegating its nameservers — no registrar transfer required.
Is there a build step?
No. You bring built bytes — your AI runs the bundler and Deploy accepts what it produces. Modules up to 5 MB; assets up to 2,000 files, 50 MB in total and 25 MB each.
Can I get my data out?
The per-app database is provisioned through the Database service, so it is a registry row you can list, query, export and migrate like any other. Same for the R2 bucket in Storage when you ask for one. There is also a purge endpoint wired into account deletion.
What if I delete an app?
The worker and its routes go. The slug is retired permanently and can never be claimed again, by you or by anyone. Artifacts and the per-app database are deliberately retained.
Can I use this without an AI?
You can watch and operate everything in the console — deployments, rollback, logs, usage, secrets, disable, enable, delete. But there is no create-app form and no deploy flow in it. Shipping happens in the AI.
How many apps do I get?
Ten per account. It is an anti-abuse ceiling rather than an upsell — if you genuinely need more, ask us to raise it in the billing console.
Manifest in, live URL out, wired on the way.
- url
- https://invoice-lens.parsonsapps.com
- env.DB
- db_7f2c… · a row in Database you can query and export
- callback
- /cb → on the project's redirect allowlist
- from
- noreply@invoice-lens.parsonsapps.com