User manual / Start here

Moving from another system

Bring your customers over from your old billing system with a CSV file: what to set up first, how to map the file, and what to check afterwards.

Owners & adminsFinance
All guides
On this page

How a move works#

Moving to CoreSync means four things, in this order:

  • Set up your plans, payments and SMS, so customers can pay and get warned from the first minute.
  • Import your customers from a CSV file exported from your old system.
  • Check the result against your old system, customer by customer where it matters.
  • Point your routers at CoreSync, so it decides who gets internet.

This page covers the first three. Pointing routers at CoreSync is in Routers and RADIUS. For the bigger picture, such as running both systems side by side for a week, read the migration playbook.

Imports never text your customers. CoreSync sends no welcome message for an imported customer, and no "your internet is off" message to anyone who had already lapsed in your old system. They are existing customers, not new ones.

Set up before you import#

Open Getting started in the menu. It lists the setup steps in order and ticks each one off by itself when the work is done. See Getting started.

  1. Create your Zones, and your Nodes if your network has them. You can also let the import create nodes for you (see below).
  2. Create your Speed profiles and Service plans. Make one plan for every package your old system sells, at the same price. See Plans and renewals.
  3. Connect your payment gateway in Settings → Payment, for example your M-Pesa paybill. See Payments.
  4. Connect your SMS provider in Settings → Notifications, and read your reminder templates. See Communications.
    The Getting started page, with each setup step marked done or still to do and a button to open it
CoreSync refuses an import until a payment gateway is active. Without one, customers' payments arrive with nothing to match them to. They aren't credited, and they get suspended even though they paid.
Connect SMS before you import too. CoreSync doesn't text anyone for being imported, but from that moment on it sends the normal reminders before each customer's expiry. With no SMS provider, nobody gets warned before they're cut off.

Your routers don't need to be ready to import. They need to be ready before you switch them over to CoreSync.

Permission needed:View SettingsEdit Settings

Prepare your file#

Export your customers from your old system as a CSV file. The first row must be the column names, with one customer on each row after it. CoreSync guesses which column is which from the names, and you can correct it.

ColumnWhat to put in it
NameRequired. A full name, or separate first and last names.
PhoneThe customer's phone, for example 0712 345 678.
Account numberThe account number customers type when they pay. Keep it, so their payments still find them.
Username and passwordTheir PPPoE login. Keep both exactly as they are, so their routers keep logging in.
PackageThe plan name in the old system. You match it to a CoreSync plan in the next step.
ExpiryWhen their current period ends. This is the most important column.
NodeThe building, estate or site they're connected from, if you track it.
DiscountOnly a discount your old system recorded for that account. See below.
StatusOnly needed to mark churned customers as TERMINATED.
Write expiry dates year first, with a time: 2026-12-05 23:59. A date with no time expires at 00:00, the very start of that day. And a date like 05/11/2026 is read month first, as 11 May, not 5 November.

Leave out hotspot customers. CoreSync won't import them as subscribers: it tracks hotspot customers from what they buy.

Upload and map your columns#

Mapping tells CoreSync which column in your file holds which detail.

  1. Open Subscribers and press Import.
  2. Drop your CSV file on the box, or click it to choose the file. The file name and the number of rows appear at the top.
    The Import Subscribers dialog with an empty upload box saying Click to upload or drag & drop a CSV file
  3. On Map Fields, set the defaults for every row: Connection Type (PPPoE or Static IP), NAS / Router Device, Zone and Billing Cycle. A column in your file wins over the default.
  4. Go down the table. For each System Field, check the CSV Column next to it and the Sample Values from your file. Pick another column, or clear it to skip the field.
    The Map Fields tab with defaults at the top and a table matching system fields such as Full Name, Phone, Account Number and Subscription Expiry to CSV columns, with sample values
  5. Make sure Subscription Expiry is mapped. If it isn't, a red warning shows at the top.
Read the hints under each field. Subscription Start is the last renewal or payment date, not the day the customer joined. The joining date goes in Registered / Created. Credit Balance is money already in the customer's wallet, not a payment.
Permission needed:View SubscribersCreate Subscribers

Match old names in Transform#

Your old system has its own names for packages, routers, zones and nodes. Transform lists every name it found in your file, so you can match each one to what it is in CoreSync. CoreSync matches the ones it can by name. You only deal with the rest.

  1. Open the Transform tab.
  2. Under Service Plans, pick a plan for every package name. If your file has speeds instead of package names, map Download Speed and Upload Speed, and pick a plan for each speed under Speed Plans.
    The Transform tab with old package names each matched to a CoreSync plan, status values, and node names matched to existing nodes
  3. Under Status, set churned customers to TERMINATED. For everyone else, the expiry date decides (see the next section).
  4. Under NAS Devices, Zones and Nodes, pick the matching router, zone or node.
  5. For a node that doesn't exist yet, type its name to create it, or press Create all from names. New nodes go under the Zone you set on Map Fields.
Every package needs a plan. A row whose package you leave unmatched still imports, but on a plan CoreSync picks itself from your list (a middle-priced one), not the one the customer pays for.
Creating a zone or node saves it straight away, even if you then cancel the import. Prefer importing your nodes first from Zones & Sites → Nodes → Import Nodes. See Zones and the map.
Permission needed:Create SubscribersManage Zones & Buildings

How each customer's status is decided#

CoreSync doesn't trust the old system's status label. It decides from the expiry date:

In your fileIn CoreSync
Expiry still aheadActive. They keep their internet until that date.
Expiry already passedSuspended. No internet until they pay.
Status TERMINATEDTerminated. No access, whatever the date says.
No expiry, with a statusThe status you mapped, for example Draft for an account that never had service.
Never import without Subscription Expiry. A customer with no expiry gets only the short access window CoreSync gives a brand-new customer, a few hours by default, and is then suspended.

The window is Access for New Subscribers in Settings → Subscriber. See Settings.

Discounts and agreed prices#

Some customers pay less than the plan price because you agreed it with them. Two columns carry that over:

  • Discount: the amount off the plan price, for example 300. The customer's price becomes the plan price less the discount. Their Timeline records the discount it came from.
  • Monthly Amount: the customer's price itself, for example 2,000. It replaces the plan price for that customer. If both are mapped, Monthly Amount wins.

Reminders, invoices, payment prompts and renewals all use that price from then on. To change it later, see Plans and renewals.

If your file has an Updates column, as Vinea exports do, CoreSync reads each account's latest recorded discount from it without you mapping anything.

Only use a discount your old system recorded. Never work one out from what a customer paid. A customer who paid less usually paid for fewer days, not a lower price. Turning that into a discount charges them the wrong amount every month after.

Watch the automatic mapping here. A column called Amount, Price or Fee is mapped to Monthly Amount. If that column is really the customer's last payment, clear it.

Preview, then import#

The preview shows what CoreSync will create, before anything is saved.

  1. Open the Preview tab. The blue line at the top counts the whole file: how many will be Active, Suspended, Draft and Terminated, and how many have a discount.
    The Preview tab with a summary of how many rows land Active, Suspended and Terminated and how many have a discount, above a table of the first rows
  2. Check those numbers against your old system. CoreSync works them out from the dates and statuses you mapped, so if they look wrong, go back to Map Fields or Transform and fix the mapping before you import.
  3. If anything is missing, a button at the bottom names it and takes you back to Map Fields.
  4. When it's right, press Import with the number of subscribers, for example Import 850 Subscribers.
  5. The import runs in the background and shows its progress. You can leave it open, or close it: it keeps going.
Static IP customers: when you pick a router as the default, CoreSync sets up each customer's queue on that router as it imports them. See Routers and RADIUS.
Permission needed:Create Subscribers

Read the result and fix failed rows#

When the import finishes, it says how many imported and how many failed. Each row stands alone: one failed row never undoes the others.

  1. Read the list of rows that did not import. It shows the row, the account, the name and the reason, for example a username that already exists.
  2. Press Download failed rows (CSV). You get only those rows, with your original columns and the reason added.
  3. Fix the rows in that file, then import that file on its own.
  4. Press Done.
Import the failed rows file, not your whole file again. Rows that already imported would fail as duplicates at best, or, where your file has no usernames, be created a second time.
Permission needed:Create Subscribers

Check it against your old system#

An import that didn't error isn't the same as a correct one. Check before you switch your routers over.

  1. On Subscribers, compare the Total, Active and Suspended cards with your old system and with the preview.
  2. Open a few customers from each plan and node. Check the plan, the expiry date and time, the price and the node against the old system. See Subscribers.
  3. Open Getting started and look under Confirm it works. RADIUS verified turns green when every active customer has a login.
    The Confirm it works part of Getting started, with RADIUS verified ticked and a count of active subscribers with credentials
  4. If Avitech ran your migration, you also see Migration reconciled against the export. It turns green once every customer in your export has been checked: present, right status, right plan, right expiry, right node, and able to log in if active.
  5. Switch your routers over. Then watch Active Sessions fill up as customers reconnect.

For the first days, look at the unmatched payments on the Payments page every morning. A customer paying with an old reference that didn't come across shows up there. Match the payment to them. See Payments.

Permission needed:View SubscribersView Settings

Payments from your old system#

Don't load your old payment history through Payments → Import M-Pesa. That button treats every row as money arriving now. It credits the customer, renews them from today and sends the payment SMS, exactly like a live M-Pesa payment. Your imported expiry dates already include what they paid.

If you want your old payment history kept in CoreSync for your records, talk to Avitech before you do anything.

Import M-Pesa is for real payments CoreSync missed, for example ones paid to your old system after you took the export. Check each one isn't already in the expiry you imported. A receipt already in CoreSync is skipped, never counted twice. See Payments.

Permission needed:Manage Payments

Common mistakes#

  • Importing before payments and SMS are connected. Payments go unmatched, paying customers get cut off, and nobody gets warned before their expiry.
  • Leaving Subscription Expiry unmapped. Everyone gets a few hours of access, then is suspended.
  • Dates without a time, or day first. Customers expire at 00:00, or in the wrong month. Use 2026-12-05 23:59.
  • Leaving a package unmatched in Transform. Those customers land on a plan CoreSync picked, at the wrong price and speed.
  • Working out discounts from payments. Only carry over a discount the old system recorded. Paying less means fewer days, not a lower price.
  • Mapping the last payment as Monthly Amount. A column called Amount is mapped there automatically. Clear it if it isn't the customer's monthly price.
  • Importing an old payment statement as live payments. Every customer on it is renewed from today and texted that their payment arrived.
  • Re-importing the whole file. Import only the failed rows file.
  • Pressing Create all from names to try it out. It creates the zones or nodes for real.

If it doesn't work#

What you seeWhat to do
No active payment gateway is configured…Connect your gateway in Settings → Payment, then import again.
Missing: At least one name (Full, First, or Last)Map a name column on Map Fields.
Pick a default zone first so new nodes … have a zone.Choose a Zone in the defaults on Map Fields, then create the nodes.
The NAS / Router Device list is emptyNo routers have been added yet, or your role can't see devices. Ask your admin.
Rows failed with Username already existsThat customer is already in CoreSync, or the login is taken. Search for them before you change anything.
Customers are Active but can't connectYour routers still use the old system. See Routers and RADIUS, then check RADIUS verified on Getting started.
Customers were cut off a day earlyThe expiry column had dates with no time. Fix the expiry on their subscriber page. See Plans and renewals.
Still stuck? Open the AI assistant in CoreSync and describe what you see, or email hello@coresyncisp.com. Screenshots on this page come from Amani Link, our demo ISP, so the names and numbers are made up.