With a CSV. Export your contracts from the old app, then open Home → Import subscriptions, download the sample template, fill it in and upload it. Each row becomes one subscription contract, so the customer has to exist in Shopify already: a row whose email matches no customer fails. The file carries the schedule, the products and the prices, and the import attaches the payment method Shopify already has saved for that customer. When there is none the contract is still created without one and the row reports success, so those customers have to add a payment method before their next charge. Afterwards, pause or cancel the originals in your old app so nobody is billed twice.
The one thing a CSV cannot carry is a payment mandate. Subscribers who pay with iDEAL, Wero or Bancontact through Mollie cannot be imported: their SEPA Direct Debit mandate belongs to whoever collected the first payment, and a mandate cannot be handed over. Those customers have to subscribe again in your store. "Import subscriptions from another app" lists the required columns and the checks the importer runs.
Stuck on any of this? Open the chat in the bottom right corner of the app and we will help you set it up.