Migrating From v4.5.17 to v5


As mentioned here, I have years of client data to migrate.

I am now on v4.5.40

I think you may be misunderstanding how the upgrade works. v5 is a completely new app, you need to setup v5 as a clean install and then use the migration tool in v4 to transfer your data/settings. This would require creating a new database for the v5 app.

OK, it might help if all that was explained in one page rather than having to here there and now to support. I’ve just tied you up for hours on something that should have been simple, so sorry.

So, I need to create an entirely new website basically and database and then when I use the migrate tool in v4 insert the new URL, API key and everything in there, is that right?

Sorry for the trouble! We have this message in many places, we’ll look for more places to add it (cc @david)

“To upgrade from v4 you need to install v5 as a separate app and then use the migration tool in the latest version of v4 on Settings > Account Management.”

Just about, you would use your user/pass to run the migration.


Luckily I run a dedicated server and have domains & sub domains available to me.

So (in theory) if I install v5 on the new domain and go to v4 and insert the new domain details (including MySQL I guess) it should bring over all my data and historical invoicing.

I feel a tutorial video coming on, haha. I’ll do that later I think.

Once v5 is setup you’ll create an initial account which is blank. You can then enter the URL/email/pass in the v4 migration tool. Once the migration completes you can switch companies in v5 to see the migrated v4 company.

A video explaining the migration would be awesome! No pressure…

No worries.

We do lots of video tutorials for our clients for other things so this isn’t a hard thing to do, we just have to do it more slowly and take our time.

1 Like


As the domain I am migrating to already has v4 installed is it at all possible to export all the company, client & billing data out of that platform and then into the v5 install as a new company by any chance?

You need to use the built-in migration tool to transfer data/settings from v4 to v5.

Thanks, but woul dthis plan work…

Install v5 on Domain 1
Migrate v4 to v5 on domain 1
Take another installation on another domain and add this to the migrated data on domain 1


In essence create v5 and migrate 2 separate v4 installations to this new domain and retain all data from both?

@david is this supported?

As long as the logins are the same, ie the accounts all have the same email/password combination then you can migrate multiple companies into one account from any other server.


No real joy here with this.

I created a new sub domain
Extracted the v5 files and walked through the steps (making sure to us ethe same principal user credentials.

Then got a 500 error.

Despite this I tried to migrate the v4 site to the v5 and got the following error also:

When I checked the laravel log I found this:
[2021-06-21 21:17:40] production.INFO: account table not found
[2021-06-21 21:18:17] production.INFO: account table not found
[2021-06-21 21:18:39] production.INFO: account table not found
[2021-06-21 21:28:59] production.INFO: account table not found
[2021-06-21 21:30:51] production.INFO: db fails
[2021-06-21 21:37:35] production.INFO: Mailer [mail] is not defined.
[2021-06-21 21:37:35] production.INFO: account table not found
[2021-06-21 21:37:40] production.INFO: account table not found
[2021-06-21 21:37:46] production.INFO: account table not found

It’s off by 2 hours but all that was in there. Hope it helps.

In addition…

It went through the MySQL DB setup steps OK and tested the connection but when I checked using PHPMyAdmin there were no tables in the database.

I then created them using the dump file in the ZIP file but still got the 500 error when I completed the setup again (after clearing out the publuc_html directory.

The accounts table was also empty. (FYI).

If you see a 500 error there should be more details in the logs in storage/logs/

The cross-account error can be from using different email addresses in v4 and v5.

I used the exact same email address though as instructed, that’s what’s confusing me.

Here’s what I found in the Llaravel log:

[2021-06-21 21:44:48] production.ERROR: Mailer [mail] is not defined. {"exception":"[object] (InvalidArgumentException(code: 0): Mailer [mail] is not defined. at /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php:110)

#0 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php(94): Illuminate\Mail\MailManager->resolve(‘mail’)
#1 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php(72): Illuminate\Mail\MailManager->get(‘mail’)
#2 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php(521): Illuminate\Mail\MailManager->mailer()
#3 /home/billing1/public_html/app/Providers/MailServiceProvider.php(31): Illuminate\Mail\MailManager->__call(‘getSwiftMailer’, Array)
#4 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\Providers\MailServiceProvider->boot()
#5 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Container/Util.php(40): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#6 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#7 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#8 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Container/Container.php(614): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#9 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(914): Illuminate\Container\Container->call(Array)
#10 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(895): Illuminate\Foundation\Application->bootProvider(Object(App\Providers\MailServiceProvider))
#11 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(App\Providers\MailServiceProvider), 40)
#12 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(896): array_walk(Array, Object(Closure))
#13 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php(17): Illuminate\Foundation\Application->boot()
#14 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(237): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application))
#15 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(152): Illuminate\Foundation\Application->bootstrapWith(Array)
#16 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(136): Illuminate\Foundation\Http\Kernel->bootstrap()
#17 /home/billing1/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#18 /home/billing1/public_html/public/index.php(57): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#19 {main}

@david do you have any suggestions to debug the cross-account migration error?

I found this link which suggest changing to smtp in the .env file may help with the Mailer error.


mailer needs to be smtp / postmark / or something like that… mail is not a valid mailer.

cross account migration is when you attempt to migrate using different email addresses across systems. The email addresses need to be the same.

I can try that but the database wasn’t even created.

I’ll start it again topday and come back with any issues.

Thanks for your patience.

I just tried SMTP and got this: