# Guide: import an existing project step by step

> Move an existing hosted Postgres project into Scribase with scribase import: dry run first, then schema, data, auth users, storage and policies.

Source: https://scribase.com/guides/bring-an-existing-project

Reading time: ~6 min.

Moving a project in is one command: scribase import connects to a live hosted Postgres project and moves schema, data, auth users, storage, and policies — preserving user IDs so nobody resets a password. This guide runs the import safely.

## Preview with a dry run

Always start with --dry-run. The importer reads the source through its Postgres connection string and service key (pass them as flags or, better, as environment variables so they stay out of shell history), names the destination organization, project, and environment, and reports exactly which tables, users, and objects will and will not move — without changing anything.

```bash
$ export SCRIBASE_SOURCE_CONNECTION_STRING='postgresql://postgres:…@db.abcd1234.example.com:5432/postgres'
$ export SCRIBASE_SOURCE_SERVICE_KEY='eyJ…'
$ scribase import supabase --project-ref abcd1234 \
    --org acme --project store --env production --dry-run

{"projectRef":"abcd1234","planned":{"tables":42,"authUsers":12038,"objects":214000,…},"findings":[…]}
```

## Run the import

Drop --dry-run to perform the move. Transfers are resumable, so a dropped connection does not mean starting over. User IDs are preserved, so existing JWTs and foreign keys stay valid, and the report ends with a verification pass. Signing keys are never copied — the destination issues new ones.

```bash
$ scribase import supabase --project-ref abcd1234 \
    --org acme --project store --env production

{"projectRef":"abcd1234","moved":{"tables":42,"authUsers":12038,…},"verification":{"checks":[…]}}
```

## Point your app at Scribase

Change the URL and keys in your environment. Because the data plane is contract-tested for compatibility, your client SDK and CLI scripts keep working with no code change.

```bash
SCRIBASE_URL=<environment URL from the console>
SCRIBASE_ANON_KEY=sb_publishable_…
```

## FAQ

**Will my users have to reset their passwords?**

No. Import preserves user IDs and identities, so existing sessions and password logins keep working after the move.

**Can I see what will move before I commit?**

Yes. Run scribase import with --dry-run to see exactly which tables, users, and objects will and will not move before anything changes.

## Related

- [Bring an existing project use case](https://scribase.com/use-cases/bring-an-existing-project)
- [Connect your existing client](https://scribase.com/guides/connect-your-client)
- [Pricing](https://scribase.com/pricing)