Render vs Netlify
Short answer
Once your Netlify app needs a backend that outlives a request, move it to Render. Pairing the platforms is a valid middle step, and staying on Netlify works only while every piece of server logic fits Netlify's function limits. You have three reasonable paths:
- Move everything to Render means running the static site, backend services and database on one platform. It fits when you want one bill and private networking between your backend services and database.
- Pair the platforms means keeping the frontend, Forms and Identity on Netlify and running APIs, workers, scheduled jobs and the database on Render. It works as a middle step when you value Netlify's frontend features and need a long-running backend.
- Stay on Netlify means keeping everything where it is. It fits only while every piece of server logic finishes inside Netlify's fixed function execution limits.
Render's backend services run far longer: Web service responses can take up to 100 minutes. Cron jobs run for up to 12 hours. Background workers run continuously. Web services support WebSockets on every workspace plan. Private networking connects your services to managed Postgres. Render also hosts your static frontend, so the whole app runs on one platform with one bill.
Documentation and prices checked: Render between 2026-09-11 and 2026-10-23, Netlify between 2026-09-14 and 2026-10-23.
Where Netlify Functions hit limits
Netlify offers three kinds of serverless functions, plus Edge Functions:
- Synchronous functions handle request and response work such as API endpoints and server-side rendering.
- Background functions run for up to 15 minutes and don't need to finish before a visitor moves on. Netlify positions them for batch processing, scraping and slower API workflows. A failed invocation retries after one minute, then again two minutes later.
- Scheduled functions run on a regular schedule, much like a cron job.
- Edge Functions run at the network edge for fast, personalized web experiences. They carry tighter per-request limits: 50 ms of CPU execution time per request and a 40-second response header timeout.
Find your workload in the table below to see which limit you'll hit. Limits change, so treat these figures as current, not permanent.
Limit | Netlify figure | Workload it blocks |
|---|---|---|
Synchronous execution limit | 60 seconds, not configurable | Large report generation, LLM calls that stream or run longer than a minute |
Background function duration | 15 minutes, not configurable | Video transcoding, image batches or exports that take longer than 15 minutes |
Scheduled function execution | 30 seconds, not configurable | Nightly data syncs, digest emails sent to a large list, database maintenance |
Edge Function CPU time | 50 ms per request | Any compute-heavy logic at the edge |
Edge Function code size | 20 MB after compression | Large dependencies bundled into edge logic |
Function memory | 1024 MB default, configurable from 1024 to 4096 MB on Pro and Enterprise only | Image or video processing that needs more than your configured allocation |
WebSockets | No long-lived process. Inferred from fixed per-invocation limits. | Real-time chat, live dashboards, multiplayer features |
Persistent connections and long-lived processes | No long-lived process. Inferred from fixed per-invocation limits. | Queue consumers, long-lived database connection pools |
The last two rows are inferences from how functions run, not a separate Netlify limit. Netlify Functions are serverless functions that let you build without managing servers. Each invocation has a fixed execution limit, and none of those limits is configurable. A WebSocket server or queue consumer is a different kind of program: one process that stays up, holds connections open and waits for the next message, with no planned end. The obstacle is that no long-lived process exists to hold the connection.
Scheduled functions deserve special attention. Their 30-second limit is shorter than the 60-second synchronous limit. A scheduled task that does real work, such as rebuilding a search index or generating monthly invoices, often runs past it.
Always-on services on Render
Render runs your backend as dedicated services, including web services, private services, background workers and cron jobs. The following table maps each limit from the previous section to a Render service type:
If you hit this on Netlify | Use this on Render | Relevant Render limit |
|---|---|---|
60-second synchronous limit | HTTP responses can take up to 100 minutes | |
WebSockets, persistent connections | Web service | WebSockets supported on all workspace plans |
15-minute background ceiling, queue consumers | Runs continuously | |
30-second scheduled limit | Runs up to 12 hours | |
Internal APIs that shouldn't face the internet | Receives traffic only from your Render infrastructure |
Every Render workspace plan includes automatic private networking. When your API, worker and cron job share a region, they can reach each other and the database without crossing the public internet. For multistep jobs, Render Workflows adds orchestrated task chains with automatic retries.
Render runs native runtimes for Node.js, Bun, Python, Ruby, Go, Rust and Elixir.
The tradeoff is the billing model. Render charges for provisioned compute, prorated to the second, rather than per invocation. A web service on a paid instance type keeps running whether or not it receives traffic and bills for that running time, prorated to the second. Only Free web services spin down, after 15 minutes without inbound traffic. Cron jobs bill only while they're running, with a $1 monthly minimum per cron job. To learn how the pieces fit together, see multi-service architectures and the service types overview.
Static hosting on each platform
Netlify links your Git repository and deploys to its CDN on every push. It also builds a deploy preview for each pull request. Render redeploys your static site whenever you push to your linked branch. It can generate a preview instance with its own URL for each pull request. Render workspaces retain 5 builds for instant rollback on Hobby and 15 on Pro. Render static sites are free to deploy. Outbound bandwidth and pipeline minutes count against your workspace's included amounts.
Feature | Netlify | Render |
|---|---|---|
Git-based deploys | Continuous deployment on every push | Automatic updates on every push to your branch |
Pull request previews | Deploy previews, unlimited on Free | PR previews, free for free static sites |
Global CDN | Yes | Yes |
TLS | Free HTTPS with automatic certificate creation and renewal | Automatic, free certificates |
Custom domains | Custom domains with SSL on Free | 2 on Hobby, 15 on Pro, then $0.25 per domain per month |
Deploy updates | Atomic deploys | Instant cache invalidation and instant rollbacks |
Hosting cost model | Credits for bandwidth, web requests and production deploys | Free static site, with 5 GB bandwidth on Hobby and 25 GB on Pro, then $0.15 per GB |
Form handling | Netlify Forms, submissions free on credit plans | Not built in, use a third-party form service |
User sign-up and login | Netlify Identity, free on credit-based plans | Not built in, handle auth in your backend |
Traffic rules and rate limiting | Included from the Free plan up | Handle in your app or backend |
Netlify has real frontend strengths, and in several cases it means less work for you:
- Forms. Netlify Forms is a customizable form service with spam protection support, and submissions are free on credit plans. Without it, you'd write and host a small endpoint to receive them.
- Identity. Netlify Identity handles user sign-up and login, and it's included at no extra cost on all credit-based plans. For a small team, invite-only Identity is one login with no auth code to write.
- Build plugins. Netlify runs your build with your tool of choice on every push. If that build already depends on Netlify build plugins, keeping the frontend on Netlify means you don't rebuild that pipeline.
- Edge features. Traffic rules and basic rate limiting come with the Free plan and carry into every higher plan. Edge Functions handle fast, personalized responses at the network edge.
Databases on each platform
Render Postgres provides fully managed relational storage. Each database has an internal URL for Render services in the same region and an external URL for everything else. On every workspace plan, inbound IP rules let you accept incoming connections to Postgres and Key Value only from IP ranges you specify. All paid databases include point-in-time recovery, with a 3-day window on Hobby and 7 days on Pro. Larger instances add read replicas and high availability. Paid instances start at $6 per month. Free databases expire 30 days after creation. For caching and job queues, Render Key Value is fully managed Redis-compatible storage.
Netlify now has its own database. Netlify Database is a fully managed Postgres database built into the platform, which you can query from Functions, Edge Functions, builds and Agent Runners. It's available only on credit-based plans. Netlify bills it on actual usage of compute and bandwidth. Database compute costs 10 credits per compute unit. In Netlify's billing example, the default settings auto-scale between 1 and 4 compute units and the database sleeps after 5 minutes of idle time. Netlify's Database billing and usage docs say storage is billed no earlier than July 1, 2026, with rates announced in advance. That date has passed, so check that page for the current storage rate before you estimate your own costs. You can also connect any Postgres provider instead. That route means a second account and a second bill.
The tie back to functions is connection handling. Netlify ships a driver for Netlify Database that's automatically configured and optimized for its platform. On Render, a background worker runs on an ongoing, continuous basis. Because a Render web service or worker is one long-running process, it can hold a connection pool open to Postgres over the internal URL, which serves connections from other Render services in the same region. Each function invocation, by contrast, is short-lived and ends at a fixed execution limit.
The pricing crossover
Prices, plan names and limits change on both platforms. Use the figures below as a snapshot and confirm current numbers on Netlify's pricing page and Render's pricing page. All prices are in US dollars as published on those pages. Every usage-based total below is an illustrative estimate built on the stated assumptions.
Two terms drive the Netlify math. A credit is the unit Netlify's credit-based plans use to meter usage. A GB-hour is function memory allocation multiplied by execution time. GB-hours apply to function compute. Netlify Database compute is metered separately, in compute units.
The plans involved
Item | Price |
|---|---|
Netlify Free | $0/month, 300 credits, hard limit |
Netlify Personal | $9/month, 1,000 credits |
Netlify Pro | $20/month for 3,000 credits, or $63/month for 10,000 credits |
Netlify bandwidth | 20 credits per GB |
Netlify web requests | 2 credits per 10,000 requests |
Netlify function compute | 10 credits per GB-hour |
Netlify production deploys | 15 credits each |
Render Hobby workspace | $0/month + compute |
Render Pro workspace | $25/month + compute |
Render web service or background worker, 512 MB | $7/month |
Render cron job, 512 MB | $0.00016/minute |
Render Postgres, 1 GB RAM | $19/month |
Render Postgres storage | $0.30/GB |
On Netlify's Free plan, projects pause when credits run out. The Netlify Personal plan targets individuals. Netlify Pro adds organization-level features for teams.
Illustrative assumptions
- Stage 1, static only. 10 GB bandwidth, 200,000 web requests and 20 production deploys per month.
- Stage 2, light API. Stage 1 plus 300,000 function calls per month, each running 200 ms at 1 GB of memory.
- Stage 3, full backend. Stage 2 plus a video job that takes 20 minutes per run, a nightly report that takes 45 minutes, and a Postgres database that stays active all month with 5 GB of storage. On Render, the video job runs on an always-on worker, and the report runs as a cron job for 45 minutes × 30 nights = 1,350 minutes. A 512 MB worker may not have enough memory for real video processing, so treat the worker line as a placeholder and size it to your workload.
Netlify path (illustrative)
Stage | Credits used | Plan | Monthly cost |
|---|---|---|---|
1 | 200 + 40 + 300 = 540 | Personal | $9 |
2 | 540 + 167 compute + 60 requests = 767 | Personal | $9 |
3 | 767 + 7,300 database compute = 8,067 | Pro, 10,000 credits | $63, excluding the video job, nightly report and database storage |
Stage 3 uses Pro because Personal's auto recharge adds 500 credits for $5, so 8,067 credits on Personal would cost $9 + 15 × $5 = $84, more than Pro's 10,000-credit tier at $63.
Stage 2 compute is 300,000 × 0.2 seconds × 1 GB = 60,000 GB-seconds, or about 16.7 GB-hours at 10 credits each. Stage 3 database compute assumes the minimum 1 compute unit for 730 hours. Netlify's Database billing page meters compute units per hour at 10 credits per unit (its example bills 33 hours at 1 unit as 33 units), so 730 hours at 1 unit is 730 units, or 7,300 credits. Netlify announces database storage rates separately, so treat the stage 3 Netlify figure as a floor rather than a full total.
Render path (illustrative, Hobby workspace)
Stage | Services | Monthly cost |
|---|---|---|
1 | Free static site, 5 GB bandwidth over the included amount at $0.15/GB | $0.75 |
2 | Stage 1 + 512 MB web service at $7/month | $7.75 |
3 | Stage 2 + 512 MB worker at $7/month, cron job for 1,350 minutes at $0.00016/minute ($0.22, billed at the $1 monthly minimum), Postgres 1 GB RAM at $19/month, 5 GB storage at $0.30/GB | $36.25 |
Stage 3 breaks down as $7.75 + $7 + $1 + $19 + $1.50 = $36.25. The cron job's 1,350 minutes cost $0.22, below Render's $1 monthly minimum per cron job.
Pairing path (illustrative)
Stage | Netlify frontend | Render backend | Monthly cost |
|---|---|---|---|
2 | Personal at $9/month, with 540 credits used | 512 MB web service at $7/month | $16 |
3 | Personal at $9/month, with 540 credits used | Web service and worker at $7/month each, a cron job for 1,350 minutes at $0.00016/minute ($0.22, billed at the $1 monthly minimum), and Postgres at $19/month plus 5 GB at $0.30/GB | $9 + $7 + $7 + $1 + $19 + $1.50 = $44.50 |
This estimate assumes the API's traffic stays within Render Hobby's 5 GB of included bandwidth. It also assumes the frontend calls the API on its own subdomain. If you proxy the API through Netlify instead, those requests and their bandwidth also consume Netlify credits (2 credits per 10,000 requests, 20 credits per GB), which these totals don't include.
Team plans (illustrative)
Teams that need organization features need Netlify Pro. Render Pro includes 25 GB of bandwidth, so the 10 GB in these assumptions fits within it and produces no bandwidth charge.
Stage | Netlify only | Render only (Pro) | Pairing (Netlify Pro + Render Pro) |
|---|---|---|---|
2 | $20, 767 of 3,000 credits | $25 + $7 = $32 | $20 + $25 + $7 = $52 |
3 | $63 floor | $25 + $7 + $7 + $1 + $19 + $1.50 = $60.50 | $20 + $25 + $35.50 = $80.50 |
The Netlify stage 3 figure excludes the video job and nightly report, which exceed Netlify's function limits, and database storage, which Netlify announces separately. The Render and pairing figures include all three.
For teams, pairing costs the most because you pay two workspace fees. That difference buys you Netlify's frontend features.
Where the crossover happens
Through stage 2, the estimates sit within a few dollars of each other: $9 on Netlify Personal against $7.75 on Render Hobby. Stage 3 changes the comparison in two ways:
- Long jobs exceed Netlify's fixed limits. The 20-minute video job exceeds the 15-minute background execution limit. The 45-minute nightly report exceeds both the 30-second scheduled execution limit and the 15-minute background execution limit, and none of these limits is configurable. You'd have to split those jobs into smaller chunks or run them somewhere else, so no clean cost comparison exists.
- An always-active database drives the bill up. That one line moves the Netlify estimate from 767 credits to 8,067.
Render's compute model tends to cost less for long-running work and steady traffic, while serverless tends to cost less for short, intermittent tasks. You reach the crossover when your backend gains steady or long-running work.
Using both: Netlify frontend, Render backend
Keep Forms, Identity, any build plugins and edge rules on Netlify. Run APIs, workers, cron jobs and Postgres on Render.
Plan these integration points:
- Routing. Either call the backend from its own subdomain, or proxy a path through Netlify. Netlify's redirect rules in
netlify.tomlsupport proxy redirects, including signed proxy redirects. A typical pattern isapp.example.comfor the frontend andapi.example.comfor the Render web service. - CORS. With a separate API subdomain, configure your backend to accept requests from your frontend's origin. A same-origin proxy avoids this step.
- Backend URL. Store the API URL as an environment variable in your Netlify build. Netlify Pro adds shared environment variables for teams. Render services support environment variables and secret files on every plan.
- Authorization. Signing a user in on the frontend doesn't authorize them on your Render API. Have the frontend send the signed-in user's token with each API call, and have the backend validate that token before it returns data.
- Private database. Connect your Render services to Postgres over its internal URL. On Hobby and Pro workspaces, inbound IP rules apply to datastores (Postgres and Key Value), and Scale and Enterprise extend them to all services. Inbound IP rules allow incoming connections only from IP ranges you specify.
Pairing has costs. You manage two platforms, two bills and two dashboards. Every API call crosses providers, and proxying through Netlify adds a hop, so measure latency for both routing options before you commit.
If Netlify's frontend features stop pulling their weight, consolidating on Render removes the second platform. If you replace Forms with your own endpoint, or move auth into your backend, the frontend becomes a plain static build. At that point, a free Render static site removes the second platform.
Which path fits your app
If this describes your app | Path |
|---|---|
Your database is active all day and your jobs run for minutes or hours | Move to Render |
You want one platform, one bill and private networking between your services and database | Move to Render |
You rely on Netlify Forms, Identity or build plugins but need a worker, long jobs or WebSockets | Pair the platforms |
All server logic finishes within 60 seconds synchronously, 15 minutes in the background, and 30 seconds on a schedule | Stay on Netlify |
Your traffic is spiky and your functions are short | Stay on Netlify |
Netlify's strengths are concrete. Forms submissions are free on credit plans. Identity is included at no extra cost on credit-based plans. Traffic rules and basic rate limiting are included from the Free plan up. An existing Netlify build pipeline is also a reason to keep the frontend where it is.
Render's case gets stronger once your backend becomes a set of running processes. Web services hold responses for up to 100 minutes, cron jobs run for up to 12 hours, and background workers run continuously. These services connect privately to managed Postgres in the same region. Move the app to Render once it needs a backend that outlives a request. Pairing keeps Netlify's frontend features while you move the backend first.