# Move data from another POS

> Move products, customers, suppliers, stock and transaction history from your old POS into one Bakasir outlet, check the result per outlet, then finalize or roll back.

Source: https://docs.bakasir.com/en/docs/portal/migration

The **Migration Engine** moves data from your old POS into Bakasir, with checks before and after. One migration fills one outlet. If you have two or more databases (for example one per store), run one migration for each outlet, and the same product is merged automatically.

**Goal:** the data of your old POS sits in the right Bakasir outlet and the numbers have been reconciled.

Nothing is written to your store until you hold the apply button. Before that you can review every problem and rehearse the import. After applying you can still roll everything back until you finalize.

## Before you start

- You are signed in to the **Business Portal** as the **Owner**. Other roles can only view the list of migrations, not start or change one.
- You have exported the data from your old POS. Products are required. Customers, suppliers and stock are recommended. Bakasir recognizes exports from Moka, Qasir, Olsera, Majoo, Pawoon, Loyverse and others.
- Accepted formats: `.csv`, `.xlsx`, `.xls`, `.zip`, `.sql`, `.sqlite` and `.db`. You can upload several files at once. Keep the original file names. One file can be up to 2 GB, and large files are sent in parts and can continue if your connection drops.
- Decide the target outlet. If it does not exist yet, you can create it in the first step. A new outlet is billed like any other outlet. See [Settings](https://docs.bakasir.com/en/docs/portal/settings.md). The Demo outlet cannot receive a migration.
- Recommended: run a backup first in **Settings → Backup & Restore**.

## Step by step




### Open the Migration Engine

Open **Catalog → Import Products** and click **Move from another POS** in the banner at the top of the page. The same button is also in **Settings → Backup & Restore**.

You should see the **Migration Engine** page with a note that nothing is written to the store until you press Apply, a **Start a migration** panel, and the list of earlier **Migrations**.




### Choose the target outlet

This is a required first step. Under **Target outlet**, choose the outlet that receives this data, or choose **Create a new outlet** and enter a **New outlet name**. Click **Start a new migration**.

One migration fills one outlet. A second database for another outlet needs its own migration. The button only becomes active once an outlet is chosen or named.




### Upload your files

In the **Upload** step, drop files on **Drop files here** or click **Choose files**. If you know your old POS, choose it under **Previous POS**. This is optional: Bakasir detects the source automatically, and choosing it helps when detection is unsure and shows how to export the right files.

Watch the state of each file (**Uploading**, **Received**, **Read**, **Failed**). Click **Try again** on a file that failed, then click **Scan files**.




### Check the scan result

In the **Scan** step you see **Detected POS** (or **Unknown POS**, and you can still continue) and a **Files found** table with the contents and row count of each file. If you see **Required files are missing** or **Recommended files are missing**, click **Add more files** or **Back to upload**. When it looks right, click **Continue to mapping**.




### Map columns and warehouses

In the **Mapping** step, check how each column of the old POS matches a Bakasir field. Green means a confident match, so review the yellow and red ones. For a file Bakasir does not recognize, choose its contents under **This file contains**, or choose **Ignore this file**. Click **Save mapping** to keep your choices.

The **AI suggestions** button asks an AI to suggest matches for columns Bakasir does not recognize. The AI only receives the column names, example values from those columns and the list of Bakasir fields (sent to OpenRouter), never the whole file. You must agree for each migration and can **Withdraw consent** at any time. It is only available when Bakasir has turned it on.

In the **Outlets and values** panel, every warehouse in the old data must be mapped to exactly one outlet. Nothing is matched by name, so choose each one yourself. A warehouse you have not chosen yet is marked **Required: choose an outlet**.

When everything is right, click **Save and check data**.




### Review the problems

In the **Problems** step, Bakasir checks the data and groups what it found:

- **Blocking**: must be fixed before applying.
- **Warning**: imported, but please review.
- **Info**: for your information.

Filter by severity and by type of problem, read the **How to fix** column, and click **Download CSV** to take the list into Excel. If something is blocking, click **Back to mapping**, fix it, and check again. When it is clean, click **Continue to preview**.




### Rehearse the import and review the result per outlet

In the **Preview** step, click **Rehearse the import**. This is only a rehearsal and writes nothing to the store. You will see:

- **Migration mode**: **Merge with existing data** (existing Bakasir data is kept, matching records are linked and new ones are added) or **Replace all data**. See [Replace mode](#replace-mode).
- **Result per outlet**: what each outlet will receive, meaning sales revenue, purchase value and stock compared with the source, plus the reason for every row that is not imported. Each reason is marked **Explained** or **Blocks apply**. Apply stays blocked while a reason is marked as blocking.
- **Repeated codes and numbers in the file**: product codes that appear more than once (usually a deleted product and its replacement) and documents that reuse a number.
- **Products with the same code but different names**: see [Same code, different name](#same-code-different-name).
- **What will happen**: a table of rows to **Create**, **Link to existing**, **Skip** and **Reject** for each kind of data, plus a **Preview of the result**.
- **This data will not be moved**: the list of things that do not come along. Tick **I understand this data will not be imported into Bakasir** to continue.

If you change the mapping, click **Rehearse again**.




### Apply

Still in the **Preview** step, hold the **Hold to apply the migration** button until it fills. The button is only active when nothing is blocking, your name choices are saved and you ticked the statement about data that does not come along.

Follow the progress in the **Apply** step. If the import stops halfway, hold the apply button again to continue.




### Check the reconciliation, then finalize or roll back

In the **Apply** step, the **Reconciliation report** compares the numbers of your old POS with Bakasir. The status is **Everything matches**, **Imported with differences to review** or **Some checks failed**. The checks are made **per outlet** ("Checks for" the outlet name): document count, document value, document lines, stock and inventory value, outlet prices, and rows not imported with the reason. The **Difference** and **Result** (**Match**, **Review**, **Failed**) columns show what you need to look at.

Then choose in the **Finalize or roll back** panel:

- **Finalize** if the numbers are right. Finalizing is permanent and cannot be rolled back. If some data did not come along, tick its statement first.
- **Roll back** if something is wrong. Type the store name to confirm. Everything this migration added is removed, and the status becomes **Rolled back**.




## Rules across outlets

- **The same product is merged.** Products are matched by the exact same code (SKU or barcode), ignoring upper and lower case. The same code means one product, with stock counted per outlet. The product name comes from the migration that was imported first.
- **Outlet prices.** When a price in the source differs from the general price, the difference is saved as an outlet price (the **Result per outlet** panel states how many). See [Prices per outlet](https://docs.bakasir.com/en/docs/portal/products.md#prices-per-outlet).
- **Shared data.** Categories and brands are merged by name. Customers are matched by phone or email, and suppliers by code or name. Matching records are linked (the **Link to existing** column), not duplicated.
- **History.** Sales with their payments, purchases and stock adjustments are moved when they are in your files.
- **Staff.** Staff from the migration are pinned to the target outlet.

### Document numbers start with the outlet code

The numbers of sales, purchases and stock adjustments from the old POS get the **Store code** of the target outlet and a hyphen in front. For example, number `SL_1234` in an outlet with code `TOKOB` becomes `TOKOB-SL_1234`. The original number from the old POS is stored on the document as an external reference. The prefix stops two outlets that have the same receipt number from colliding, and the rule that numbers are unique per business does not change.

If a number is repeated inside one file, the second document gets the suffix `~2`. If a number is already used by another document in Bakasir, the row is rejected with the reason **Document number already used by another document**.

### Same code, different name

When a product already exists in Bakasir with the same code but a very different name, the **Products with the same code but different names** panel shows a table: **Code**, **Existing name**, **Name in this file** and **Similarity**. In the **Name to keep** column choose **Keep the existing name**, **Use the name in this file** or **Write my own**. Click **Save name choices**. Without a choice, the existing name stays.

## Replace mode

**Replace all data** deletes all business data of the store (products, customers, suppliers, sales, purchases, expenses and staff) and refills it exactly from the migration file. Existing staff are deactivated. Before applying, Bakasir takes an automatic backup. The Owner account, settings, integrations and subscription stay, and the business and store names follow the file.

This migration cannot be undone with **Roll back**. To go back, restore the "pre-migration-replace" backup in **Settings → Backup & Restore**. Hold the **Hold to replace the data** button to apply it.

The mode is not available when another migration has already been applied in your business, or when other outlets already hold data. For a business with several outlets, use **Merge with existing data**.

## Data that is not moved

When it exists in your source, the following is not moved and is listed before you apply: extra barcodes (Bakasir keeps one code per product), multiple units and unit conversions, modifiers and menu add-ons, recipes and ingredients, service charges, serial numbers, and other tables such as logs, translations and old app settings. Set up what you need after the migration, for example in [Products](https://docs.bakasir.com/en/docs/portal/products.md).

## How long files are kept

After a migration is **Finalized** or **Rolled back**, its uploaded files and working data are deleted automatically 7 days later. A migration that sits idle for 14 days in the **Uploading**, **Ready to map**, **Checked**, **Rehearsed** or **Failed** status is deleted entirely. The store data that was already imported is not deleted. Download the problem list (**Download CSV**) or note down the reconciliation report you need before the time runs out.

## Common mistakes and how to fix them

<Accordions type="single">
<Accordion title="Only the owner can start or change a migration">
Sign in as the Owner. Other roles only see the list.
</Accordion>
<Accordion title="I cannot hold the apply button">
Check three things: there is no **blocking problems** message (click **See the problems**), there is no **Blocks apply** reason under **Result per outlet**, and your name choices are saved with **Save name choices**. If a **This data will not be moved** list is shown, also tick its statement. Click **Rehearse again** if you just changed the mapping.
</Accordion>
<Accordion title="Warehouse is not mapped to an outlet">
Go back to the **Mapping** step, open the **Outlets and values** panel and choose an outlet for that warehouse. Documents from an unmapped warehouse are rejected.
</Accordion>
<Accordion title="This file type is not supported, or the file is empty or larger than 2 GB">
Use CSV, Excel, ZIP, SQL dump or SQLite. Split a file larger than 2 GB or export it again table by table. If an SQL dump cannot be read, export it again with phpMyAdmin or mysqldump.
</Accordion>
<Accordion title="The import stopped halfway">
Hold the apply button again to continue. If the rehearsal failed, check the mapping and click **Rehearse the import** again.
</Accordion>
<Accordion title="Replace is not available">
**Replace all data** is blocked when another migration was already applied or other outlets already hold data. Use **Merge with existing data**.
</Accordion>
<Accordion title="Rollback is blocked">
The imported data is already used by real sales, purchases or stock activity in that outlet after the migration, so deleting it is not safe. A replace migration also cannot be rolled back: restore its automatic backup. Rolling back only removes the documents, stock and outlet prices of this migration. Products still used by another migration or another outlet stay.
</Accordion>
<Accordion title="The demo outlet cannot receive a migration">
Choose your real outlet, or create one with **Create a new outlet**.
</Accordion>
<Accordion title="This migration has no target outlet">
An old migration without a target outlet cannot continue. Delete it from the list (trash icon) and start a new one.
</Accordion>
</Accordions>

## Tips

- **Start with the outlet that has the most complete data.** Its names are used for the same products in the next outlets.
- **Check the numbers before you finalize.** Compare revenue, purchase value and inventory value in the reconciliation report with the reports of your old POS.
- **The same file twice is safe.** Documents already imported into that outlet are skipped with the reason **Already imported into this outlet**.

## Next steps

- [Add and manage products](https://docs.bakasir.com/en/docs/portal/products.md)
- [Control your stock](https://docs.bakasir.com/en/docs/portal/inventory.md)
- [Settings](https://docs.bakasir.com/en/docs/portal/settings.md)
