# Bank account migration tooling

If you're processing legacy ACH Direct Debits, you'll need to complete a migration to update your integration. This will allow you to continue processing recurring payments with no interruption to your existing customers. To walk you through this step by step migration process, we’ve built a data migration tool in the Stripe Dashboard.
## How do I access the migration tool?
You can [access the tool in the Dashboard](https://dashboard.stripe.com/workbench/insights/legacy_ach_deprecation?insightId=legacy-ach-deprecation).
The main page of the tooling is the **Summary** tab, which indicates with a red **x** which integration path(s) you have used to accept legacy ACH Direct Debits in the last 3 days, in the last 7 days, or in the last 31 days.;
Once you've stopped processing legacy ACH Direct Debit payments, all payment methods will show green check marks, confirming you've completed the migration.
Next to the **Summary** tab, you'll see an additional tab titled **Migrate**.
Screenshot of the migration tooling
The **Migrate** tab walks you through [the step-by-step migration process](https://docs.stripe.com/payments/ach-direct-debit/migrating-to-new-apis). As you move through the process, each step will be highlighted on the left side, with the corresponding instructions for completing that step on the right.
## When should I use the migration tool?
We recommend that you run the migration after:
* You've updated your integration to use the PaymentIntents and PaymentMethods API so that you're no longer creating new bank account objects.
* You've completed microdeposit verification for any recently created legacy bank accounts.
## Can I run the migration tool multiple times?
We recommend that you run the migration one time to migrate all Bank Account objects in a single pass. However, if you need to re-run the migration tool, it's safe to do so. The tool first checks if a Bank Account object has already been migrated and will only create mandates for objects that haven't previously been migrated.
## Is the migration tool safe? Can I use it without disruptions to my payment flow?
Yes, it's safe to backfill mandates for legacy bank accounts (step 2). The bank account will remain active and chargeable on legacy integrations so the conversion won't disrupt your payment flows.
Your payments won't shift to a new integration path until you've updated your code or set the Bank Accounts as the `default_payment_method` on Customers, Invoices, or Subscriptions in step 4.
## How can I test the tool before running it in production?
You can test the migration tool using a sandbox account. To access sandboxes, click **Sandboxes** within the Dashboard account picker. After entering a sandbox, you can run the migration on any existing sandbox objects (or use the Stripe API to create new objects to migrate).
## How does the migration tooling work for me as a Connect Platform?
If you process legacy ACH Direct payments as a platform, we offer an option to migrate your connected accounts' bank accounts when running the migration tooling. Select the **Include connected accounts** toggle to migrate your connected accounts.
We recommend that you communicate the change and any required actions to your connected accounts before running the tool. Step 2 will create new mandates on your connected accounts and step 4 will update your connected account's customers, subscriptions, and invoices.
## What file format does the Backfill mandates for legacy bank accounts step produce?
After running step 2 of the migration, we provide a CSV file with the following columns:
* `merchant`: The merchant who owns the object. If you're not a platform, this can be ignored.
* `bank_account_id`: The ID of the bank account object.
* `status`: State of the object.
  * `succeeded`: A mandate object was succesfully generated for this bank account.
  * `already_migrated`: This bank account already has a mandate from a previous migration tool run or other action.
  * `failed`: A mandate couldn't be generated for this bank account. Check the error message for next steps.
* `mandate_id`: If `succeeded` or `already_migrated`, the ID of the generated or existing mandate object.
* `error`: If `failed`, an error message with next step(s) to unblock migration of this bank account.
