AI Preview URL Expired? Why It Happens & How to Fix It
Your AI preview URL expired and killed your demo. Learn why these links die, why recovery is a dead end, and how to deploy permanent sites that never break.

I've been there. You spend an afternoon building something sharp in Claude or Cursor. The AI spits out a preview URL. You copy it, paste it into Slack, and fire it off to a client with a casual "check this out." They reply with a thumbs up. Life is good.
Table of Contents
- The "It Worked Yesterday" Problem
- How Long Do AI Preview URLs Actually Last?
- What Happens When That Preview URL Dies?
- Can You Recover an Expired Preview URL?
- The Real Fix: Stop Using Preview URLs for Anything That Matters
- How to Check If Your Host Is Costing You Money
- The Bottom Line
Twenty-four hours later, you get the text: "Hey, the link doesn't work."
You click it yourself. Dead. The page that was a fully functional app yesterday is now a blank error screen or a "not found" message. Your stomach drops. You just lost the demo, the momentum, and a little bit of the client's trust. And you have no idea why it happened.
This is the "ai preview url expired" problem. It's not a bug in your code. It's not something you misconfigured. It's a feature of how AI agents serve temporary work, and it's designed to break. The good news: you can stop it from ever happening again. Let's walk through what's actually going on, why recovery is almost always a dead end, and how to ship things that stay alive.
The "It Worked Yesterday" Problem
The sequence is painfully familiar. You prompt an AI agent, it generates a working app, and you get a URL you can click right then. You share that URL because it's the only one you have. The agent doesn't hand you a second option. It doesn't say "this link will die in roughly six hours." It just gives you the link and moves on.
The problem is that AI-generated preview URLs are sandboxed by design. They're ephemeral environments spun up to show you what the code does, not to host anything real. They exist so you can iterate quickly, not so you can ship. The compute behind them is shared, temporary, and aggressively recycled. When the session ends or the allocation window closes, the URL resolves to nothing.

This isn't a secret conspiracy. It's the economics of free-tier AI tooling. Keeping thousands of preview environments alive indefinitely would cost a fortune. So they don't. They let them expire, and they don't always warn you when it's about to happen. The result is that you treat a preview like a deliverable, and it burns you.
A preview URL is a glance at something unfinished. A production URL is a place where something lives. Most AI agents only give you the first one. That's the gap you need to close.
How Long Do AI Preview URLs Actually Last?
The Unspoken Expiration Windows
Nobody publishes a clean, definitive table of expiration times. I've looked. The information is scattered across locked support threads, developer forums, and vague documentation footnotes. Here's what I've been able to piece together from experience and research.
Google Ads preview links last "about a week or so," according to a Google Product Expert in a support thread from a few years back. They won't give you an exact number. S3 presigned URLs default to five minutes for images, though you can configure them up to twelve hours if you control the bucket settings. Instagram API URLs expire after what the platform calls "a short period of time," with no fixed window disclosed. For AI agent previews from Claude, ChatGPT, and Cursor, the window is typically hours to days, entirely undocumented, and varies based on provider load and session behavior.

The pattern is consistent: platforms obscure expiration times because publishing exact numbers would invite abuse. If you knew a preview lasted exactly 24 hours, you'd build workflows around that 24-hour window. By keeping it vague, they keep you from depending on it. The side effect is that you depend on it anyway and get surprised when it breaks.
Why "It Depends" Is the Worst Answer
Different platforms use different expiration mechanisms. Some are purely time-based: the URL lives for N minutes and then dies. Others are access-count-based: the link works for three views and then self-destructs. Some are session-based: the URL is tied to your authenticated browser session, and when that session ends, the link goes with it.
The security argument for short-lived URLs is legitimate. If you're previewing unpublished content, you don't want that URL floating around forever. Short expiration windows prevent unauthorized access. That makes sense for sensitive internal tools and unreleased features.
The practical argument is less forgiving. Short-lived URLs prevent you from shipping anything real. You can't send a preview to a client and expect it to work for their Monday morning review. You can't include it in a portfolio. You can't use it as a staging environment for feedback. The industry has a real gap here: no single source documents expiration behavior across platforms, and that lack of clarity costs you time and credibility.
What Happens When That Preview URL Dies?
The immediate damage is obvious. Your client clicks a dead link. Your demo is gone. You look unprepared, even though you did the work. The "URL signature mismatch" error on Facebook and Messenger is the same problem wearing a different hat. Telegram expired links, Mega expired links, WPS expired link openers: every platform has its own flavor of this pain, and they all lead to the same dead end.
For AI-built sites, the loss runs deeper than the URL itself. If your preview included a database, server-side functions, or form handlers, those vanish with the link. Any data captured during the preview window is gone. Any configuration you tweaked through the UI is gone. The preview wasn't just a static page; it was a temporary instance of a full application, and when it expires, the whole thing evaporates.
Then there's the hidden cost: the re-explanation. You have to message the client and say the link broke. You have to rebuild the demo or re-prompt the AI and hope it generates something close to what you had. You do the "I'll send you a new link" dance, and each time you do it, you bleed a little professional credibility. Clients don't care about the difference between a preview URL and a production URL. They care that the thing you sent them works when they click it.
Can You Recover an Expired Preview URL?
Short answer: almost never. The content isn't hidden behind a login or locked behind a paywall. It's deleted. The compute instance that served your preview has been recycled. The temporary storage has been wiped. There's nothing to recover because there's nothing left.
This is the question that shows up in "People Also Ask" boxes across search results, and nobody gives it a straight answer. "Is there a way to access expired links?" No. Not in any practical sense. If you're dealing with a platform that keeps your preview instance alive in a dormant state, you might be able to regenerate the URL by re-authenticating or restarting the session. But that's rare, and it's not something you can count on.
What you can do is rebuild. Your conversation history with the AI agent still exists. The code it generated is still in your chat thread. You can re-prompt, re-generate, and get back to something close to what you had. But that's a workaround, not a recovery. It costs you time, and it doesn't solve the underlying problem: you're still building on a foundation that's designed to crumble.
The better move is to stop relying on preview URLs for anything that matters. If a link is going to a client, a collaborator, or a paying customer, it needs to be permanent. Period.
The Real Fix: Stop Using Preview URLs for Anything That Matters
What a Production URL Gives You That a Preview URL Can't
A production URL is permanent. It doesn't expire after five minutes or five days. You send it once, and it works until you take it down. That alone changes how you work. You stop checking links before meetings. You stop apologizing for broken demos. You stop rebuilding things that should have stayed alive.
A production URL also comes with a real backend. Your database persists across sessions. Your server-side functions run when called, not when the preview environment feels like it. Your forms capture data and store it somewhere you can access later. If you're building a client site with a contact form, that form needs to actually deliver submissions. A preview URL won't do that. A production URL will.
Then there's the domain. A custom domain with automatic DNS configuration means your client sees theirbusiness.com, not a7f3b2.preview.ai-agent.io. That matters for credibility. It also matters for the handoff. When the project is done, you transfer ownership cleanly. The site, the database, the domain, the functions: everything moves to the client in one atomic step. No "the link broke" follow-ups. No emergency rebuilds.
The "One Call" Deployment Pattern
Here's the workflow shift that fixes this permanently. Instead of copying the preview URL your AI agent gives you, tell the agent to deploy directly to a production host. One API call from Claude, Cursor, or ChatGPT publishes your app to a live, permanent URL with a real backend attached.
This isn't theoretical. Platforms like Shiply are built for exactly this pattern. You don't need to create an account first. You don't need to configure DNS manually. You don't need to set up a database separately. One call publishes your app to a live URL with a per-site database, edge functions, email handling, and a custom domain. The AI agent does the work, and the deployment target makes it stick.
Flat pricing makes this predictable. You pay $0, $8, or $24 per month. No usage meter. No surprise bill because a client's site got more traffic than you expected. No per-request charges that scale unpredictably. You know your costs before you ship, and you can price your client work accordingly.
Comparing Static-Only Hosts vs. Full Backend Hosts
Static hosts like Vercel, Netlify, and GitHub Pages are excellent at what they do. They serve static assets fast, and their preview deployments are useful for internal iteration. But their preview URLs are still temporary by nature. They change with each deploy. They're not designed as permanent production endpoints for dynamic applications.
Full backend hosts give you permanent URLs with databases, serverless functions, and email handling built in. The distinction matters because most AI-built apps aren't purely static. They have form submissions. They have user authentication. They have data that needs to persist. A static preview looks like a real site but breaks the moment you need it to do something dynamic.
The trap is treating a static preview as a finished product. It's not. It's a snapshot. A production deployment on a host that supports the full stack is the only thing you should ever send to a client or a customer. If you're looking for a Netlify Drop alternative that gives you more than a static snapshot, the difference becomes obvious the first time you need a database.
How to Check If Your Host Is Costing You Money
Metered hosting is the default, and it's quietly expensive. You pay per request, per compute second, per database read, per function invocation. The bill at the end of the month is a math problem you can't solve in your head. I've seen simple AI-built sites with a database and a form handler run $50 or more per month on metered hosts. That's not an outlier. That's what happens when you combine dynamic features with usage-based pricing.
Flat-rate hosting flips the model. You pay one price for everything. Traffic spikes don't spike your bill. More database queries don't add line items. You can run the numbers yourself with a hosting cost calculator that compares metered versus flat pricing in under thirty seconds. The math is straightforward: if you're shipping multiple client sites, flat pricing saves you money. If you're shipping one site with dynamic features, flat pricing still saves you money. The only scenario where metered wins is if your site gets almost no traffic, and at that point, you're not really shipping.
The Bottom Line
Preview URLs expire. That's not a problem anyone is racing to fix, because the platforms that generate them don't see it as a problem. It's working as designed. What can change is where you choose to deploy.
If you're building with AI agents in 2026, you need a production backend that matches how you actually work. One-call deployment. Permanent URLs. Real databases. Predictable pricing. No usage meters. No surprise expirations. No apologizing to clients for broken links.
Stop treating preview URLs as deliverables. They're not. They're a temporary look at something that should be permanent. Ship your next AI-built site to a host that doesn't make you play the "is the link still alive?" game. Your clients will notice the difference, and you'll stop losing work to a countdown timer you never set.