@model PricingViewModel @using Microsoft.AspNetCore.Html @{ ViewData["Title"] = "Pricing"; ViewData["ShellClass"] = "marketing-shell"; ViewData["SeoTitle"] = "Pricing | PlotWeaver Studio"; ViewData["SeoDescription"] = "Compare PlotWeaver Studio plans and choose the right subscription for organising your novel, series, characters, plot threads, timelines, and story details."; ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible"; ViewData["CanonicalUrl"] = "https://plotweaver.studio/pricing"; ViewData["StructuredData"] = new[] { """ { "@context": "https://schema.org", "@type": "SoftwareApplication", "name": "PlotWeaver Studio", "applicationCategory": "WritingApplication", "operatingSystem": "Web", "description": "Novel planning software for authors to organise characters, plot threads, timelines, story assets, relationships, continuity, and series.", "url": "https://plotweaver.studio", "offers": { "@type": "Offer", "priceCurrency": "GBP", "availability": "https://schema.org/InStock" } } """ }; var paidPlans = Model.Plans.Where(x => x.RequiresStripeSubscription).ToList(); var suggestedPlanId = paidPlans.Count >= 2 ? paidPlans[paidPlans.Count / 2].SubscriptionLevelID : (int?)null; }

Pricing

Simple pricing for stories of every size.

Start free, subscribe when you're ready, or choose a plan straight away.

@if (TempData["PricingMessage"] is string pricingMessage) {
@pricingMessage
}

Plans

Choose the space your story needs.

@if (!Model.Plans.Any()) {

Plans are being prepared.

Active subscription levels are not available yet. Please check back soon.

} else {
@foreach (var plan in Model.Plans) { var isCurrent = Model.CurrentSubscriptionLevelID == plan.SubscriptionLevelID; var isSuggested = suggestedPlanId == plan.SubscriptionLevelID;
@if (isSuggested) {

Most Popular

}

@plan.DisplayName

@PlanTagline(plan)

@if (plan.RequiresStripeSubscription) { @PriceMarkup(plan.MonthlyPricePence, plan.CurrencyCode) per month @if (plan.AnnualPricePence.HasValue) { @FormatAnnualPrice(plan.AnnualPricePence, plan.CurrencyCode) billed annually } } else { Free trial workspace Assigned when you create an account. }
  • @FormatLimit(plan.MaxBooks) books
  • @FormatLimit(plan.MaxCharactersPerProject) characters per project
  • @FormatLimit(plan.MaxScenesPerBook) scenes per book
  • @FormatStorageAllowance(plan.MaxStorageMB) storage
  • @FormatLimit(plan.MaxCollaborators) collaborators
@if (!plan.RequiresStripeSubscription) { Start Free Trial } else { @(isCurrent ? "Current Plan" : "Subscribe Now") @if (plan.AnnualPricePence.HasValue) { Choose annual billing } }
}
}

What is included

Everything you need to keep a complex novel coherent.

Planning capacity

Database-backed limits for books, chapters, scenes, characters, storage, and collaborators scale with the plan you choose.

Story organisation

Characters, plot threads, story assets, locations, and the story bible help keep the moving pieces of your manuscript in one place.

Structure and flow

Timeline, scene metrics, story health, and analytics views help you understand pacing, pressure, and revision priorities.

Continuity confidence

Relationship mapping, continuity warnings, import, export, backups, and restore points support serious drafting and revision work.

Questions

Pricing FAQ

Can I start with a free trial?

Yes. Creating an account starts you on the Draft Desk evaluation plan, so you can try the workspace before choosing a paid subscription.

Can I subscribe without using the trial?

Yes. Choose a paid plan from this page. If you are not signed in, PlotWeaver will ask you to log in before continuing to checkout.

Can I change plan later?

Yes. Signed-in users can manage subscription changes from the account subscription area.

What happens to my work if I cancel?

Your existing story data remains in PlotWeaver. Your account may return to the application-managed Draft Desk level after the paid subscription ends.

Is PlotWeaver suitable for a series?

Yes. The higher plan limits are designed for authors managing multiple books, long arcs, and larger casts.

Do I need a credit card for the trial?

The registration flow creates the evaluation workspace. Payment details are only handled when you choose a paid subscription through Stripe Checkout.

Begin with clarity

Ready to take control of your story?

Try PlotWeaver Studio free, or choose the paid plan that fits the novel you are building.

@functions { private const int PracticalUnlimited = 999999; private static string FormatLimit(int value) => value >= PracticalUnlimited ? "Unlimited" : value.ToString("N0"); private static string FormatStorageAllowance(int megabytes) => megabytes >= PracticalUnlimited ? "Unlimited" : StorageUsage.FormatBytes(megabytes * 1024L * 1024L); private static IHtmlContent PriceMarkup(int? pence, string? currencyCode) { if (!pence.HasValue) { return new HtmlString("Contact us"); } var code = string.IsNullOrWhiteSpace(currencyCode) ? "GBP" : currencyCode.ToUpperInvariant(); var symbol = string.Equals(code, "GBP", StringComparison.OrdinalIgnoreCase) ? "£" : string.Empty; return new HtmlString($"{symbol}{pence.Value / 100m:0.00} {code}"); } private static string FormatAnnualPrice(int? pence, string? currencyCode) { if (!pence.HasValue) { return "Contact us"; } var code = string.IsNullOrWhiteSpace(currencyCode) ? "GBP" : currencyCode.ToUpperInvariant(); var symbol = string.Equals(code, "GBP", StringComparison.OrdinalIgnoreCase) ? "£" : string.Empty; return $"{symbol}{pence.Value / 100m:0.00}"; } private static string PlanTagline(SubscriptionLevel plan) => string.IsNullOrWhiteSpace(plan.Description) ? plan.RequiresStripeSubscription ? "For authors ready to build with confidence." : "A calm place to begin." : plan.Description; }