1M Deploys on Laravel Cloud: Lessons on Billing, Admin & Integrations

1M Deploys on Laravel Cloud: Lessons on Billing, Admin & Integrations

Less than a year after its early access launch, Laravel Cloud crossed one million deployments, a milestone that taught us everything about scaling infrastructure under real-world pressure.

Deployment growth since we launched Laravel Cloud in early access, on November 2024.

In two previous posts, we covered how Laravel Cloud was architected and the choices we made when building its web application.

But launching a platform is only half the story. The other half is everything that happens behind the scenes to support it: real-time billing, a powerful admin interface, and deeply integrated partnerships. This is the infrastructure that quietly powers Laravel Cloud’s one million deployments and counting.

Every developer faces these kinds of problems when scaling up, so we're sharing what we learned: the good decisions, the not-so-good decisions, and what we'd do differently.

Getting Price Right: Billing

Laravel Cloud billing was (and still is) the gift that keeps on giving.

There are so many moving parts to consider. Millions of data points flow in from across our stack: compute, database storage, bandwidth usage, serverless PostgreSQL and key-value store compute, object storage, active users, and more. This system should be resilient, self-healing, and flexible enough to grow with the product.

This is why we built a separate Laravel “billing app” just to collect metrics from every source.

Our goal is near real‑time accuracy. Wherever possible, we pull usage data hourly, format each record as a billing event, and send it to our billing partner, Lago. Early on, we chose event sourcing as our design pattern. It’s one of the design patterns I have not found a good use case for yet, but it’s the perfect fit for our billing journey.

Every metric becomes an immutable event in our store, then projects to Lago in real time. In the future, we may adjust this and, instead, batch the events, or have the events ingested from S3, which would be as “simple” as building out a new projector. If we ever need to correct a logic error, we update the code and replay events. That flexibility has already saved us more than once.

Note: Engineer Dries Vints shared his thoughts on the billing decisions behind Laravel Cloud in this interview.

Earlier, I mentioned resilience and self-healing. What does that mean? Resilience and self‑healing are nonnegotiable. To provide accurate charges, we have to collect all the metrics mentioned above. There is no best effort here. If a third-party API is down or a network glitch occurs, we cannot skip a collection window and proceed. We have to collect when normal service is resumed.

As you may expect, we rely heavily on Laravel’s job functionality to facilitate this. We use Laravel jobs with exponential back‑off retries over 24 hours, sharded queues, rate‑limiting middleware, and timestamps passed in job constructors to ensure the correct period is collected if the job is retried.

As a side note, there is so much gold within Laravel’s jobs, I would highly recommend reading the docs end to end and taking a source dive. I’m sure you’ll find some features you didn’t know existed that you can add to your tool belt.

Admin Panel: Centralizing Customer Support

One thing we wanted to ensure we had in place in time for launch was a fully fleshed-out admin area to aid our Support team in successfully assisting our customers. We mapped out every feature they’d need to diagnose issues and assist customers, then built it all in Laravel Nova, which has all the tools we need (both now and in the future) to create a rich and powerful admin area.

We made it part of the development workflow that any feature we built would have a backoffice equivalent to allow the Support team to access everything they needed to diagnose issues and help to resolve customer issues. One good example is linking out to an individual environment dashboard in Grafana, providing quick access to a more in-depth view of its health.

It would have been easy to deprioritize the admin area in favor of customer‑facing features. Instead, we invested in it pre-launch, let our Support team get hands‑on and familiar with it, avoiding a launch‑day scramble. That foundation has been a key factor in our successful GA.

Integration Partnerships

A first‑class platform needs first‑class partners.

Strategic partnerships are an important part of ensuring Laravel Cloud offers options for all the resources required to support a Laravel application in production. Solid options for PostgreSQL, a Redis-compatible key-value store, and S3-compatible object storage were all things we wanted to provide from launch.

We decided that the best approach to offer all these resources for launch was to work with a set of partners who gave us unwavering confidence in their ability to provide a product that lives up to the high-quality bar we hold ourselves accountable for in Laravel Cloud. Partners that offer competitive pricing. Partners that share our vision. Partners that offer stellar support.

Settling on who to partner with involved numerous calls, extensive testing, and thorough negotiation, all of which were absolutely worth the time investment because we landed on a group of partners who satisfy entirely all of our criteria and more.

Eventually, we chose to work with Neon for serverless PostgreSQL, Upstash for the KV store, and extended our partnership with Cloudflare by utilizing R2 for S3-compatible object storage.

After months of provisioning thousands of resources, we’re very happy with how these integrations perform in production.

Tips for Building a Strong Customer Ecosystem

  1. Treat billing like a first-class product. Don’t bolt it on. A resilient billing system should scale with your platform, offer near real-time visibility, and handle failure gracefully. Event sourcing can give you flexibility and auditability you’ll thank yourself for later.
  2. Invest in internal tooling early. A well-equipped support team is your first line of defense post-launch. Build your admin interface as part of your core product workflow, not as an afterthought. Tools like Laravel Nova can make this both fast and future-proof.
  3. Plan for observability and fallback. Resilience means not dropping data. Use job retries, back-off strategies, and timestamped collections to recover cleanly from outages. Laravel's job system has more power than most developers realize: take the time to explore it.
  4. Choose integration partners, not just vendors. When every resource your customers depend on is also a reflection of your platform, you need partners who meet your bar for quality, support, and alignment. The right choice here saves you time, money, and customer frustration.
  5. Think beyond the launch. Your ecosystem should scale with your users. That means designing for self-healing processes, extensible admin tools, and integration points that grow with you, rather than breaking when demand spikes.

Customer Ecosystem: The Backbone of Your App

Laravel Cloud’s incredible customer ecosystem is the result of relentless focus and hard-won lessons.

We built a billing engine that never misses a data point, an admin console that turns Support into a superpower, and partnered with industry leaders to deliver rock‑solid services. This isn’t just infrastructure, but a foundation we built and that our teams can rely on to move fast without fear.

Less than a year after we gave early access to a group of users, we had processed over one million deployments, and every one of those ships thanks to the systems we’ve described.

If you want to see what it feels like to go from code to live in under 30 seconds, give Laravel Cloud a spin and experience all the thought and hard work we put into it.

Keep reading

Laravel Cloud February 20, 2026

Laravel Cloud Incident Report: February 20, 2026

## Summary On February 20, 2026, Laravel Cloud experienced a connectivity outage lasting approximately 3 hours and 15 minutes. The disruption was caused by an [incident at Cloudflare](https://blog.cloudflare.com/cloudflare-outage-february-20-2026/), one of our infrastructure partners, which resulted in the withdrawal of IP prefix advertisements that route traffic to Laravel Cloud services. During this time, customers were unable to reach the Laravel Cloud control panel or some of their applications hosted on Laravel Cloud. No customer data was lost or compromised, and no deployments in progress were affected. The issue was entirely network-level — applications and their underlying infrastructure remained healthy throughout. While redundancy generally exists throughout our infrastructure, we have not yet extended that same protection to our IP announcement layer. Closing that gap is now a top engineering priority. Our goal is to implement additional failover protection so that no single upstream dependency can cause a prolonged outage for our customers. ## Timeline (UTC) | Time | Event | |------|-------| | **18:42** | Laravel Cloud monitoring detects connectivity failures. Incident declared and response team assembled immediately. | | **18:45** | Cloudflare begins investigating issues with their services and network. | | **18:48** | Laravel Cloud status page updated and notification posted to Twitter/X. | | **19:09** | Cloudflare identifies impact to a subset of BYOIP (Bring Your Own IP) prefixes. Reports the underlying issue as mitigated and begins working to restore affected advertisements. | | **~19:40** | Laravel Cloud attempts to re-advertise prefixes via the Cloudflare dashboard. The option is unavailable — prefixes are locked in a "Withdrawn" state requiring Cloudflare to unlock. We communicate this to Cloudflare via our shared support channel. | | **20:50** | Cloudflare acknowledges that some customers are unable to re-advertise their prefixes through the dashboard and begins working on a fix. | | **21:57** | Full connectivity to Laravel Cloud is restored as Cloudflare completes prefix restoration. | **Total duration of impact: approximately 3 hours and 15 minutes.** ## What Happened Laravel Cloud uses Cloudflare for network services including IP prefix management via their BYOIP (Bring Your Own IP) product. On February 20, Cloudflare experienced an incident that caused IP prefix advertisements to be withdrawn for a subset of their customers, including Laravel Cloud. When IP prefixes are withdrawn from BGP, traffic can no longer be routed to the affected services. This meant that while Laravel Cloud's applications, databases, and infrastructure were fully operational, users could not reach them because the network path no longer existed. Cloudflare identified the underlying cause and advised customers to re-advertise their prefixes manually through the Cloudflare dashboard. However, Laravel Cloud's prefixes were locked in a "Withdrawn" state that required Cloudflare's intervention to unlock. This meant the suggested self-mitigation path was not available to us, and recovery was dependent on Cloudflare restoring the prefixes on their end. ## What Was Affected - **Connectivity to Laravel Cloud applications** — users could not reach their apps - **Laravel Cloud dashboard and API** — inaccessible during the outage - **Deployments** — new deployments could not be initiated ## What Was Not Affected - **Customer data** — all data remained intact and secure - **Running applications** — apps continued to run normally; they were simply unreachable - **Databases and caches** — no data loss or corruption ## Our Response Our monitoring detected the issue within minutes, before Cloudflare's own status page reflected the incident. We immediately declared an incident, assembled our response team, and updated our status page and social channels to keep customers informed. Once Cloudflare published their self-mitigation guidance, we attempted to follow it but were unable to do so due to the prefix locking issue described above. We escalated directly with Cloudflare's team and continued to monitor and communicate throughout the incident. ## Looking Forward Laravel acknowledges that single points of failure in our infrastructure can disproportionately introduce risk in our ability to manage availability of the applications we serve. We are exploring strategies to decouple and introduce redundancy in our key networking layers to create better resiliency from underlying components. We take the reliability of Laravel Cloud seriously, and we understand the impact this outage had on our customers and their users. We are committed to learning from this incident and building a more resilient platform.

Laravel Team