> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upmind.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Importing from WHMCS

> Import your WHMCS data, files, and all other necessary information.

## **What is WHMCS?**

[<u>WHMCS</u>](https://www.whmcs.com/) is a self-hosted billing and automation platform for hosting businesses. If you are planning to move your billing, client management, and support data from WHMCS to Upmind, this guide will walk you through the process.

Note that WHMCS installations often include customisations such as database adjustments or third-party modules, which may not be imported. Upmind focuses on importing core data necessary for client management and billing effectively.

## **What can be imported?**

Upmind supports importing most core WHMCS data, including:

* Staff users
* Products and services
* Promotions
* Clients
* Support tickets
* Invoices
* Payment methods
* Affiliate accounts
* Domains and servers

<Warning>
  If Upmind cannot automatically map certain data (e.g., servers, domains), you will be prompted to create manual mappings during import.
</Warning>

## **Preparing for the import**

Before starting the import, verify and configure these settings in Upmind:

| **Setting**                    | **Description**                                                                                 |
| ------------------------------ | ----------------------------------------------------------------------------------------------- |
| Brand Settings                 | Set your brand name and contact details.                                                        |
| Tax Settings                   | Configure tax rates relevant to your region.                                                    |
| Web Servers & Domain Providers | Add shared web servers and domain registrars under **Settings** > **Provision Configurations**. |
| Payment Gateways               | Set up payment gateways under **Settings** > **Payment Providers**.                             |

## **Setting up WHMCS access for Upmind**

Create API Credentials in WHMCS.

1. In WHMCS admin, go to **Setup** > **API Credentials**.

<Frame caption="Setup > API credentials">
  <img src="https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=691f63dfa87b8f21556c39896490655d" alt="Setup > API credentials" className="mx-auto" style={{ width:"90%" }} data-og-width="588" width="588" data-og-height="420" height="420" data-path="images/fb/04427c0ce78aad6a.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?w=280&fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=fb2e0c29cca2ca1cbf3664ad04448dbe 280w, https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?w=560&fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=64bb077ccf2379520b4796aaf93e80ea 560w, https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?w=840&fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=9aa1a45d78108f04979999c5b981fab4 840w, https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?w=1100&fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=5898f7979326c61e5715ba80679c606b 1100w, https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?w=1650&fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=4e455abf2d03ca285aab91aa6ceb8596 1650w, https://mintcdn.com/upmind/2ooSxDpt6PiIGMr-/images/fb/04427c0ce78aad6a.png?w=2500&fit=max&auto=format&n=2ooSxDpt6PiIGMr-&q=85&s=954d830cc8abff1e6b4fc639aab6baad 2500w" />
</Frame>

2. Under **API Roles**, create a new **API Role**.

<Frame caption="Create API role">
  <img src="https://mintcdn.com/upmind/FQ1NhxALxjSHvvWW/images/fb/a82f94572be17b62.png?fit=max&auto=format&n=FQ1NhxALxjSHvvWW&q=85&s=0e3301d8a679396607c7b5b9329412a3" alt="Create API role" className="mx-auto" style={{ width:"95%" }} width="1134" height="408" data-path="images/fb/a82f94572be17b62.png" />
</Frame>

3. Create an API role with full permissions by selecting all checkboxes or by allowing only specific API commands:

* GetTicketUsers
* GetClients
* GetClientsDetails
* GetAffiliates
* GetAdminUsers (special steps below)
* GetTickets
* GetInvoices
* GetCurrencies
* GetProducts
* GetOrders
* GetTLDPricing
* GetClientsDomains
* GetClientsProducts
* GetInvoice
* GetTicket
* GetPayMethods
* GetClientGroups
* GetSupportDepartments
* GetConfigurationValue

4. **Save** the API Role.

<Frame caption="Give the API user all permissions">
  <img src="https://mintcdn.com/upmind/kXD0Ya8PpcxxNm6Q/images/fb/41298bf29a2b9689.png?fit=max&auto=format&n=kXD0Ya8PpcxxNm6Q&q=85&s=1ce906b65622ca9210d4d20885be83d7" alt="Give the API user all permissions" className="mx-auto" style={{ width:"98%" }} width="1308" height="722" data-path="images/fb/41298bf29a2b9689.png" />
</Frame>

## **GetAdminUsers API functionality**

If the **GetAdminUsers** command does not appear or returns errors, manually add **getadminusers** to the **tblapiroles** table in your WHMCS database.

<Frame caption="Add getadminusers">
  <img src="https://mintcdn.com/upmind/h8h5zREaX7k8Y-3x/images/fb/0fd7964caae5981e.png?fit=max&auto=format&n=h8h5zREaX7k8Y-3x&q=85&s=ef3b0e72513d6589f9d566505860b1c3" alt="Add getadminusers" className="mx-auto" style={{ width:"96%" }} width="1320" height="632" data-path="images/fb/0fd7964caae5981e.png" />
</Frame>

## **Creating API credentials**

1. Return to **API Credentials**.
2. Click **Generate New API Credential**.

<Frame caption="Generate new API credential">
  <img src="https://mintcdn.com/upmind/VnCXiz5rboywDnvn/images/fb/d3f534ad8c937c15.png?fit=max&auto=format&n=VnCXiz5rboywDnvn&q=85&s=6fc265d919f1278920ae8565cf70a796" alt="Generate new API credential" className="mx-auto" style={{ width:"96%" }} width="1002" height="234" data-path="images/fb/d3f534ad8c937c15.png" />
</Frame>

3. Select the **API Role** created and assign an admin user.

<Frame caption="Select API role">
  <img src="https://mintcdn.com/upmind/FQ1NhxALxjSHvvWW/images/fb/aa5c8100a001b685.png?fit=max&auto=format&n=FQ1NhxALxjSHvvWW&q=85&s=92402e15e808213b371aed541974c4cd" alt="Select API role" className="mx-auto" style={{ width:"96%" }} width="994" height="758" data-path="images/fb/aa5c8100a001b685.png" />
</Frame>

4. Generate credentials and copy the **Service Identifier** and **Secret**.

### **Whitelist Upmind IP addresses in WHMCS**

Add these IPs to **Settings** > **General Settings** > **Security** > **API IP Access Restriction**:

* 91.240.229.1
* 91.240.229.2
* 91.240.229.3

### **Proxy or Load Balancer configuration**

If WHMCS is behind proxies like Cloudflare or load balancers, follow WHMCS’s trusted proxy setup at:

[<u>https://docs.whmcs.com/Trusted\_Proxy\_Settings</u>](https://docs.whmcs.com/Trusted_Proxy_Settings)

## **Configuring the import in Upmind from WHMCS**

1. Go to **Settings** > **Imports** in Upmind.

<Frame caption="Settings > Imports">
  <img src="https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=f4cffecdd212165a49415ed795787d37" alt="Settings > Imports" className="mx-auto" style={{ width:"99%" }} data-og-width="1352" width="1352" data-og-height="584" height="584" data-path="images/fb/eda08bf714aa41aa.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?w=280&fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=d1212e21bbb80f5f855da331281c386a 280w, https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?w=560&fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=36186da610631e5ceb17f62698ef02b2 560w, https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?w=840&fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=f42ed338427e69e957782c8db0978200 840w, https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?w=1100&fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=a7bef28e010db081140b094c7219db46 1100w, https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?w=1650&fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=728bd989813f5c36af892f539f8121ff 1650w, https://mintcdn.com/upmind/z5ofg3t7by4uN44v/images/fb/eda08bf714aa41aa.png?w=2500&fit=max&auto=format&n=z5ofg3t7by4uN44v&q=85&s=58b001880e62f8842ad46182ba77c55f 2500w" />
</Frame>

2. Click **Create New Import** and select **WHMCS**.

<Frame caption="Create new import">
  <img src="https://mintcdn.com/upmind/kAlrCUxI2nwYz4_i/images/fb/1ed8a8cf4305b78e.png?fit=max&auto=format&n=kAlrCUxI2nwYz4_i&q=85&s=5f30613feabf735e5d55751d50ead1e0" alt="Create new import" className="mx-auto" style={{ width:"99%" }} width="1324" height="384" data-path="images/fb/1ed8a8cf4305b78e.png" />
</Frame>

3. Click on **Add New Credentials**.

<Frame caption="Add new credentials">
  <img src="https://mintcdn.com/upmind/bPO2bBzOxYQR4tYr/images/fb/ffabf0f7897c3d3a.png?fit=max&auto=format&n=bPO2bBzOxYQR4tYr&q=85&s=a408d42fb97444126c25864fa519a6e0" alt="Add new credentials" className="mx-auto" style={{ width:"98%" }} width="1040" height="754" data-path="images/fb/ffabf0f7897c3d3a.png" />
</Frame>

4. Add the **URL**, **Username** (API Username), **Password** (API Password), **Admin Dashboard URL**, and choose the **Tax Setting** collected from WHMCS.

<Frame caption="Add details">
  <img src="https://mintcdn.com/upmind/ZsIo0APxdVb_gFS-/images/fb/29f423130f8c207e.png?fit=max&auto=format&n=ZsIo0APxdVb_gFS-&q=85&s=4268bda5f85ad0ccf07cd560d7d0fa14" alt="Add details" className="mx-auto" style={{ width:"89%" }} width="678" height="872" data-path="images/fb/29f423130f8c207e.png" />
</Frame>

<Note>
  The username and password are provided by WHMCS when generating your API credentials.
</Note>

5. **Save** and test credentials. You can correct any errors.
6. Once validated, click **Create import**.

## **Running the Import**

<Note>
  You can leave the import running and return anytime. No data will be lost or interrupted.
</Note>

You will now see a screen that looks as follows. Click **Start Import**.

<Frame caption="Start import">
  <img src="https://mintcdn.com/upmind/VnCXiz5rboywDnvn/images/fb/d66483dbe8954634.png?fit=max&auto=format&n=VnCXiz5rboywDnvn&q=85&s=68d8ef87e7b3acd058d0ac90fceadd4a" alt="Start import" className="mx-auto" style={{ width:"99%" }} width="1318" height="694" data-path="images/fb/d66483dbe8954634.png" />
</Frame>

The import starts immediately, runs in the background, and imports data in order.

### **Products**

Upmind treats both domains and products as types of products. However, it stores only one record for each top-level domain (TLD), like ".com." This means if a TLD such as "com" is already in the system, any new imports that include this TLD won't create a duplicate record.

Instead, the new data will be linked or mapped to the existing ".com" record. This approach keeps the system organised and avoids unnecessary duplicates while allowing all related data to connect properly under the existing TLD entry.

After the first import, you'll see an orange **Mappings required** notification.

<Frame caption="Mappings required">
  <img src="https://mintcdn.com/upmind/Dgjmf3QWYVBR40cE/images/fb/61677801a785f04a.png?fit=max&auto=format&n=Dgjmf3QWYVBR40cE&q=85&s=62949138415377c34c8911273f9ab1f7" alt="Mappings required" className="mx-auto" style={{ width:"99%" }} width="1316" height="528" data-path="images/fb/61677801a785f04a.png" />
</Frame>

<Frame caption="Mappings required expanded">
  <img src="https://mintcdn.com/upmind/Lh8hC132BWHpvRbz/images/fb/4a2ebf4695f6d25c.png?fit=max&auto=format&n=Lh8hC132BWHpvRbz&q=85&s=ab4c2f87b25880496eb84deff3aba2df" alt="Mappings required expanded" className="mx-auto" style={{ width:"98%" }} width="1326" height="902" data-path="images/fb/4a2ebf4695f6d25c.png" />
</Frame>

1. Map categories if set up on **Store Catalogue** from the dashboard or from under **Settings** > **Products Catalogue**. (optional)

<Frame caption="Map categories">
  <img src="https://mintcdn.com/upmind/A-RwNPXmK_xnEEqe/images/fb/764bb4a319a23b62.png?fit=max&auto=format&n=A-RwNPXmK_xnEEqe&q=85&s=f1a74c2b7df6b3d11523e64092ec9ed2" alt="Map categories" className="mx-auto" style={{ width:"96%" }} width="1036" height="544" data-path="images/fb/764bb4a319a23b62.png" />
</Frame>

2. Click **Confirm mapping(s) and continue**.

<Frame caption="Product group">
  <img src="https://mintcdn.com/upmind/bPO2bBzOxYQR4tYr/images/fb/ffb77a3830acd05e.png?fit=max&auto=format&n=bPO2bBzOxYQR4tYr&q=85&s=73b5e1e840513285c7168b8546b2d4bb" alt="Product group" className="mx-auto" style={{ width:"99%" }} width="1320" height="288" data-path="images/fb/ffb77a3830acd05e.png" />
</Frame>

<Frame caption="Confirm mapping(s) and continue">
  <img src="https://mintcdn.com/upmind/1-uICsJi9zYpvJVH/images/fb/8d5e85166fc43a6e.png?fit=max&auto=format&n=1-uICsJi9zYpvJVH&q=85&s=d4af1e85b29cab98ccf5531d089d6dbc" alt="Confirm mapping(s) and continue" className="mx-auto" style={{ width:"99%" }} width="1314" height="726" data-path="images/fb/8d5e85166fc43a6e.png" />
</Frame>

3. Products will begin importing.

<Frame caption="Importing in progress">
  <img src="https://mintcdn.com/upmind/JUoAg6onJmXk_-rR/images/fb/e3b72f47e6ce7cd5.png?fit=max&auto=format&n=JUoAg6onJmXk_-rR&q=85&s=430c7a19f86f933fb0d9142bb07b68d7" alt="Importing in progress" className="mx-auto" style={{ width:"99%" }} width="1252" height="338" data-path="images/fb/e3b72f47e6ce7cd5.png" />
</Frame>

4. After import, view the data list, which you can preview but not edit **staged** data.

<Frame caption="Staged data">
  <img src="https://mintcdn.com/upmind/92wYnpdR_k6AjH3x/images/fb/55ae6ce98d5cac2b.png?fit=max&auto=format&n=92wYnpdR_k6AjH3x&q=85&s=85abf21b8afafa5aad35b2b17fdc0aa8" alt="Staged data" className="mx-auto" style={{ width:"99%" }} width="1030" height="846" data-path="images/fb/55ae6ce98d5cac2b.png" />
</Frame>

<Frame caption="Product info">
  <img src="https://mintcdn.com/upmind/c5sDUwEs8YpzGbjA/images/fb/925ed991a7fd3e2a.png?fit=max&auto=format&n=c5sDUwEs8YpzGbjA&q=85&s=883aebad21a796c845ef081709db4c6b" alt="Product info" className="mx-auto" style={{ width:"99%" }} width="1296" height="600" data-path="images/fb/925ed991a7fd3e2a.png" />
</Frame>

5. Repeat this process for the remaining import sections.

### **Users**

Users with the same email are automatically mapped. Permission levels for these mappings are set up under **User Roles**.

### **Clients**

Your client database will be exported to Upmind and may take time, but you can leave it running in the background.

You will be given the option to map custom fields. You can [<u>create Upmind custom fields</u>](https://docs.upmind.com/using-upmind/client-management/how-to-add-client-custom-fields) in the settings panel.

<Frame caption="Client custom fields">
  <img src="https://mintcdn.com/upmind/JUoAg6onJmXk_-rR/images/fb/dfd1cc793c18422f.png?fit=max&auto=format&n=JUoAg6onJmXk_-rR&q=85&s=1636344724c48a0e7f584ad9f57be405" alt="Client custom fields" className="mx-auto" style={{ width:"99%" }} width="1320" height="418" data-path="images/fb/dfd1cc793c18422f.png" />
</Frame>

Once the client's records are imported, you can go to a client profile and view their staged information.

<Frame caption="Staged information">
  <img src="https://mintcdn.com/upmind/A-RwNPXmK_xnEEqe/images/fb/777c01c4d3fc98af.png?fit=max&auto=format&n=A-RwNPXmK_xnEEqe&q=85&s=f90c99ec9589a778a61824e8d6e4888e" alt="Staged information" className="mx-auto" style={{ width:"99%" }} width="1332" height="588" data-path="images/fb/777c01c4d3fc98af.png" />
</Frame>

### **Affiliate accounts**

Imports activate affiliate accounts, including activations and balances. Affiliate links and referrals must be added manually.

### **Client payment details**

Requires mapping payment providers to those added in the system.

### **Contracts**

Imports current subscriptions and client products. Map provision configurations like servers, suppliers, and domain registrars.

### **Tickets**

Imports WHMCS support tickets. You can optionally map support ticket departments.

## **Previewing and committing data**

After mapping data, you can preview it, but cannot edit or allow client login. Preview helps verify data before committing. If errors appear, cancel the import.

You can commit data once you are happy with the staged import.

## **Best practices**

* Add servers, domain providers, and payment gateways in Upmind before importing to match your current setup and ensure smooth data mapping.
* Always back up your WHMCS database before importing to protect against data loss.
* Disable WHMCS cron jobs and enable maintenance mode during import to avoid conflicts or data changes.
* Keep WHMCS offline after import until you confirm all data is correct in Upmind.

## **Troubleshooting**

| **Issue**                                                   | **Solution**                                                                                                                                                                                                                                  |
| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| My username and password are not correct.                   | Use the WHMCS Service Identifier and Secret, not the admin password.                                                                                                                                                                          |
| Why does the import fail with "Malformed UTF-8 characters"? | This usually happens due to bad characters in the hosting account passwords. After backing up, you can remove passwords from the accounts. Upmind doesn't need or store them. This can be done via the interface or directly in the database. |

<Frame caption="Username and password">
  <img src="https://mintcdn.com/upmind/uxzVUXAKtJ2bRWCI/images/fb/6ff46fd5663ea5a1.png?fit=max&auto=format&n=uxzVUXAKtJ2bRWCI&q=85&s=f658c893c715edbec759c74973492f6a" alt="Username and password" className="mx-auto" style={{ width:"81%" }} width="684" height="312" data-path="images/fb/6ff46fd5663ea5a1.png" />
</Frame>
