{"jtbd":{"id":"app-hosting","slug":"app-hosting","name":"Host agent web app / API","shortName":"Host agent web app / API"},"recommended":{"role":"depot_pick","id":"railway","slug":"railway","name":"Railway","website":"https://railway.app","editorialOverall":8.08,"scoreKind":"curated_estimate","scoreAsOf":"2026-09-14","price":{"available":false,"unavailableReason":"no_sourced_price","skus":[],"normalizedUsdPerMillionTokens":null,"normalizationStatus":"unavailable","normalizationReason":"no_sourced_price"}},"priceComparison":{"skuKind":"none","unit":null,"comparison":"no comparable sourced unit for this job; chat input $/1M and other units were not borrowed","amountLabel":"Matching price","reportsUsdPerMillion":false,"matchedCandidates":0},"cheapestInput":null,"cheapest":null,"recommendedWorkloadQuote":null,"representativeQuote":null,"estimatedTaskCost":null,"cheapestGoodEnough":{"band":{"rule":"editorial overall >= Depot Pick overall - 0.5","minOverall":7.58,"pickOverall":8.08,"points":0.5},"pick":null,"reason":"no_matching_sourced_price","cheaperButBelowBand":[]},"dates":{"scoreAsOf":"2026-09-14","scoreKind":"curated_estimate","priceVerifiedAsOf":null,"note":"scoreAsOf is when the editorial score was last set; priceVerifiedAsOf is the newest fact-check of the pick's price rows. They are separate: a fresh price check does not re-score."},"sourcedInputs":[],"pickIsPriceWinner":null,"priceWinnerReason":"no_comparison_no_candidate_has_matching_sourced_price","priceWinnerNote":"Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.","excluded":6,"coverage":{"candidates":7,"withAnySourcedRow":1,"withSourcedInputUsdPerMillion":0,"withMatchingPrice":0,"excludedNoSourcedPrice":6,"excludedFromCheapestInput":7},"normalizedUsdPerMillionTokens":null,"normalizationReason":"input_and_output_are_not_blended","seo":{"published":false,"reason":"Only 0 candidate(s) have a matching Matching price (none). Need 3 before a crawlable price section. Quote JSON is still returned."},"cite":"Depot Pick for app-hosting: railway (asOf 2026-09-14). See GET /api/jtbds/app-hosting + GET /api/methodology.","asOf":"2026-10-27","honesty":["Recommended provider is the current Depot Pick from GET /api/decide. This quote does not change scores.","SKU rows are copied from data/pricing-rows.json via GET /api/pricing. No new pages were scraped for this response.","normalizedUsdPerMillionTokens on this quote is always null. Input and output stay on separate rows.","cheapestInput compares one native unit that matches this job. Chat and coding jobs use priceSortEligible input $/1M. Embedding jobs use embedding SKUs only. Speech-to-text uses a stored speech unit only (per minute when that unit exists; a voice-agent hosting minute and a speech-engine minute are not speech-to-text). Speech synthesis uses one stored TTS unit in preference order (per minute, then per 1k characters, then per million characters) and does not mix those units or a speech-engine minute. Hosted-browser jobs compare usd_per_browser_hour only (lowest tier per provider, not quality-adjusted); proxy per GB, CAPTCHA solves, monthly plans, and chat tokens are not included. Sandbox, code-interpreter, ephemeral CI, and persistent dev env compare usd_per_vcpu_hour only, and only when the Depot Pick has that row; GPU-hour, GiB-hour, and vCPU-second are not converted. Secret jobs compare identity-month or user-month, never both; if both are stored, cheapestInput is null (mixed_secret_units). Voice-agent platform jobs compare a voice-agent hosting minute only. Transactional email compares usd_per_1k_emails only. Marketing email compares usd_per_1k_emails when a non-transactional per-1k SKU exists; otherwise it ranks a marketing-labeled usd_per_email and does not convert that rate to per 1k or mix it with per-1k. Monthly plans are not a unit price (plan_not_a_unit_price). Outbound and inbound webhook jobs compare usd_per_message only. Queue jobs compare usd_per_100k_messages or usd_per_million_events, never both (mixed_units). Push does not rank MAU or monthly plans. Error observability ranks a unit only when every candidate shares it; per-error fractions are not ranked against monthly plans. MotherDuck CU-hours and flight hours are not vCPU-hours. Composio's unsplit sandbox token rate is not chat $/1M. CAPTCHA SKUs are not ranked. Other non-token jobs do not borrow a chat $/1M rate. If nothing matches, cheapestInput is null.","excluded counts candidates with zero sourced pricing rows. excludedFromCheapestInput also counts candidates whose rows are a different unit than this job.","A Depot Pick is not a price winner unless its matching sourced price is the lowest among candidates. The comparison is not quality-adjusted. pickIsPriceWinner is null (not false) when nothing was compared."],"links":{"decide":"/api/decide?jtbd=app-hosting","quote":"/api/quote?jtbd=app-hosting","pricing":"/api/pricing?provider=railway","leaderboardPrice":"/api/leaderboards?jtbd=app-hosting&sort=price","humanPage":"/jtbds/app-hosting#quote","methodology":"/api/methodology"},"sourceConflicts":[{"providerId":"railway","field":"Volume storage rate and billing granularity","sourceUrl":"https://railway.com/pricing","asOf":"2026-10-22","quotes":["Volumes $ 0.00000006 per GB / sec (https://railway.com/pricing; 'Pay only for what your app uses, by the second')","| [**Volume Storage**](/volumes) | $0.15 / GB / month ($0.000003472222222 / GB / minute) | (https://docs.railway.com/pricing/plans)","You're billed by the minute for compute resources, so you only pay for what you use. (https://docs.railway.com/pricing)"],"safeAssumption":"Price volumes at the docs' $0.15 per GB-month (its per-minute figure, $0.000003472222222, equals $0.15 over a 30-day month; the page's $0.00000006 per GB-second is that rate rounded up, about 4% higher over a month). CPU and RAM use the page's per-second rates, which equal the docs' per-minute and per-month rates within 0.1%. Whether compute is metered per second (page) or per minute (docs) changes nothing for monthly totals sent as seconds."},{"providerId":"railway","field":"Hobby replica limit","sourceUrl":"https://railway.com/pricing","asOf":"2026-10-22","quotes":["Hobby … Up to 5 replicas, at 8 vCPU / 8 GB RAM per replica (https://railway.com/pricing)","| **Hobby**      | **6**        | **48 GB**    | **48 vCPU**    | (Replicas column, https://docs.railway.com/pricing/plans)"],"safeAssumption":"Not used in any cost: replica counts are per-service ceilings, not billed meters. Check the dashboard before relying on a 6th Hobby replica."},{"providerId":"render","field":"Plan name for the Performance build pipeline (Pro vs Professional)","sourceUrl":"https://render.com/pricing","asOf":"2026-10-22","quotes":["Hobby Pro Scale Enterprise … $25/mo + compute (tier cards, https://render.com/pricing)","With a Professional plan or higher, you can enable the Performance pipeline to run builds on larger compute instances (FAQ 'What are build pipeline minutes, and how can I track my usage?', same page)","Performance 16 CPU 64 GB RAM Requires a Pro plan or higher. (https://render.com/docs/build-pipeline)"],"safeAssumption":"Treat 'Professional' as the Pro workspace plan ($25/mo); the docs and the comparison table say Pro. Performance pipeline minutes are not costed in any plan, so no estimate depends on this."},{"providerId":"fly-io","field":"Machine per-hour vs per-month price (month length and rounding)","sourceUrl":"https://fly.io/pricing","asOf":"2026-10-22","quotes":["shared-cpu-1x · 256MB $0.0030 $2.19 (Per hour, Per month, https://fly.io/pricing): $0.0030 × 720 h = $2.16, × 730 h = $2.19","performance-16x · 32GB $0.7334 $528.02 (same table): $0.7334 × 720 h = $528.05, × 730 h = $535.38","Monthly Machine prices assume 30 days of continuous runtime. (https://fly.io/docs/about/pricing/)","Per-month figures are the hourly rate over a 730-hour month. (Sprites storage, https://fly.io/pricing)"],"safeAssumption":"The per-hour column is rounded to 4 decimals; the per-month column matches a 30-day (720 h) month for performance presets, as the docs state. Depot prices Machine-months at the per-month figure (30 days) and never multiplies the rounded hourly figure; the 730-hour month applies to Sprites only (not encoded)."},{"providerId":"fly-io","field":"Which region an egress GB is priced in (source vs destination)","sourceUrl":"https://fly.io/pricing","asOf":"2026-10-22","quotes":["A region's price is the Ashburn price above times its multiplier, applied to vCPU and RAM. Volumes and snapshots do not take this markup, and egress is priced by destination rather than by the Machine's region. (https://fly.io/pricing, markdown rendering fetched 2026-10-22)","100GB outbound data from iad and fra at $0.02/GB (assumed) … 50GB outbound data from sin at $0.04/GB (assumed) (https://fly.io/docs/about/pricing/ example)","The request is billed at the rate for the region it leaves, and the response at the rate for the region it leaves. (https://fly.io/docs/about/pricing/, cross-region private network)"],"safeAssumption":"Depot does not pick a region group: callers put each GB in fly_egress_gb_na_eu, fly_egress_gb_apac_oc_sa or fly_egress_gb_af_in themselves. When unsure, price the GB at the higher of the source and destination groups."},{"providerId":"fly-io","field":"shared-cpu-1x 1GB monthly price (docs list vs preset + extra RAM)","sourceUrl":"https://fly.io/docs/about/pricing/","asOf":"2026-10-22","quotes":["Started Machine, shared-cpu-1x with 1GB RAM $6.70/month (https://fly.io/docs/about/pricing/)","shared-cpu-1x · 256MB $0.0030 $2.19 … every one takes more RAM at $6.00 per GB per month (https://fly.io/pricing): $2.19 + 0.75 GB × $6.00 = $6.69"],"safeAssumption":"A 1¢ rounding gap. Depot costs shared-cpu-1x · 256MB + 0.75 extra RAM GB-months = $6.69 and treats the docs' $6.70 as the same price rounded."},{"providerId":"digitalocean","field":"Pricing example container plan ($20 plan not in the current size table)","sourceUrl":"https://www.digitalocean.com/pricing/app-platform","asOf":"2026-10-22","quotes":["1 worker with 2 instances using the $10 container plan 1 service with 1 instance using the $20 container plan … Total monthly cost: $40 + any additional bandwidth overages (https://www.digitalocean.com/pricing/app-platform FAQ)","Current plans: apps-s-1vcpu-0.5gb … $5.00, apps-s-1vcpu-1gb-fixed … $10.00, apps-s-1vcpu-1gb … $12.00, apps-s-1vcpu-2gb … $25.00 … (no $20.00 size); legacy basic-s 1 shared 2 GiB 40 GiB per month $20.00 per month — 'Legacy plans apply only to apps created before 7 May 2024.' (https://docs.digitalocean.com/products/app-platform/details/pricing/)"],"safeAssumption":"The FAQ example uses a legacy $20 price ('for illustrative purposes only'). Depot prices only the current size table; legacy plans are not encoded."},{"providerId":"digitalocean","field":"Static-site app transfer allowance (free apps only, or every static-site app)","sourceUrl":"https://docs.digitalocean.com/products/app-platform/details/pricing/","asOf":"2026-10-22","quotes":["Deploying up to three apps that use only static site components. … Each additional app containing static website components costs $3.00 per month. 1 GiB of outbound data for each app. (https://docs.digitalocean.com/products/app-platform/details/pricing/)","Each free app includes 1 GiB of outbound data transfer per month Additional apps with static sites only are charged at $3.00 per month (https://www.digitalocean.com/pricing/app-platform FAQ)"],"safeAssumption":"Depot follows the docs ('1 GiB of outbound data for each app') and credits 1 GiB per static-site app, including the $3 ones. If only the 3 free apps get it, each extra app understates by at most 1 GiB × $0.02 = $0.02 per month."},{"providerId":"digitalocean","field":"Month length for a container (28-day billing cap vs monthly price; rename restarts the count)","sourceUrl":"https://docs.digitalocean.com/products/app-platform/details/pricing/","asOf":"2026-10-22","quotes":["App components are billed for the first 28 days of the month after creation. Renaming a component restarts the 28-day count, which can result in extra charges at the end of the month. For example, if you create a component on 1 July and rename it on 3 July, you are billed for 30 days in July instead of 28. (https://docs.digitalocean.com/products/app-platform/details/pricing/)","We bill apps for each second they exist, up to a maximum of 2,419,200 seconds (28 days) per monthly billing cycle. (https://docs.digitalocean.com/platform/billing/bandwidth/)","The table below shows monthly pricing per container (docs); '$/mo' (pricing page)"],"safeAssumption":"A container running the whole month is 1 container-month (the 28-day cap makes the monthly price a ceiling). Send seconds ÷ 2,419,200 for part months; a component renamed mid-month can bill up to 30/28 (send that fraction, the meter allows values above 1)."}],"volumeEstimateHint":"Add &volume=<number> for a plan-level monthly cost (GET /api/estimate?jtbd=app-hosting&workload=...)"}