# Supabase Storage: “Bucket not found” (NoSuchBucket)

> Supabase Storage says the bucket doesn’t exist: a wrong name, another project, or a private bucket with no policy. Check each, then fix the URL or policy.

Canonical: https://app369.com/fix/supabase-storage-bucket-not-found/
Last updated: 2026-11-09

Bucket not found is the Supabase Storage error for a bucket the request can’t reach. The bucket may not exist in that project, the name may not match, or the bucket exists but the user has no access. The exact wording varies by client.

**Short answer**

Check that the bucket name in the code matches the dashboard exactly and that the client points at the same project. If the bucket is private, add an RLS policy on storage.objects and use a signed URL instead of a public one. For new environments, create the bucket in a migration.

Rather not fix it yourself? [**App Fix Ticket**](https://app369.com/fixed-price/flutter-firebase-bug-fix/) starts with a fixed-price diagnosis, then a fixed price for the fix before any fix work.

## **Why the bucket isn’t found, and the fix**

1. 01 ### **The bucket exists, but this user can’t see it**
  > “Verify the bucket name and ensure it exists in the system, if it exists you don't have permissions to access it.” [**Supabase docs, Storage error codes (NoSuchBucket)**](https://supabase.com/docs/guides/storage/debugging/error-codes) Storage answers the same way for a missing bucket and one the user can’t access. A private bucket with no SELECT policy on storage.objects looks missing to the anon and authenticated roles.
2. 02 ### **A public URL for a private bucket** getPublicUrl always builds a URL, even for a private bucket, and that URL fails when opened. Uploads to a private bucket also need an INSERT policy on storage.objects. Make the bucket public if the files are meant to be public, or use createSignedUrl for private files.```
const { data, error } = await supabase.storage
  .from('invoices') // private bucket
  .createSignedUrl(\`${user.id}/march.pdf\`, 60 * 10); // valid for 10 minutes
if (error) throw error;
window.open(data.signedUrl);
```
3. 03 ### **The name doesn’t match** The bucket id in the code must match the dashboard exactly, including case and dashes. A folder path in the bucket name, such as avatars/users, also fails: the folder belongs in the file path.```
// bucket: 'avatars', file path: 'users/123.png'
await supabase.storage.from('avatars').upload('users/123.png', file);
```
4. 04 ### **The client points at another project** The bucket was made in one project, but SUPABASE_URL points at another one, such as local, staging or an old project. Check the URL in the running build, not only in your .env file.
5. 05 ### **The new environment has no bucket** A bucket made by hand in the dashboard doesn’t exist in a fresh staging project, and supabase db reset rebuilds the local stack without it. Create it in a migration, seed file or the [storage.buckets] section of supabase/config.toml so every environment has it. Keep public false unless every file may be seen by anyone with the link.```
insert into storage.buckets (id, name, public)
values ('avatars', 'avatars', false) -- set true only for files anyone may see
on conflict (id) do nothing;
```

Checked against the vendor’s docs on November 9, 2026: [Supabase docs: Storage error codes](https://supabase.com/docs/guides/storage/debugging/error-codes); [Supabase docs: Creating buckets](https://supabase.com/docs/guides/storage/buckets/creating-buckets); [Supabase docs: Storage access control](https://supabase.com/docs/guides/storage/security/access-control).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Supabase Storage bucket is public**](https://app369.com/fix/supabase-storage-bucket-public/) · [**Supabase new row violates row-level security**](https://app369.com/fix/supabase-new-row-violates-row-level-security/) · [**Supabase staging environment**](https://app369.com/fix/supabase-staging-environment/) · [**Supabase Storage EntityTooLarge (413)**](https://app369.com/fix/supabase-storage-entity-too-large/)

Questions

## **More on this error**

<details>

<summary>**Why does it work in the dashboard but not in the app? **+</summary>

The dashboard uses an admin role that skips RLS. The app uses anon or authenticated, so a private bucket needs a policy on storage.objects before those roles can read it.

</details>

<details>

<summary>**Should I make the bucket public to fix it? **+</summary>

Only if every file in it may be seen by anyone with the link, such as avatars. For invoices or user uploads, keep it private and use signed URLs.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)