# Xenforo 2.3 Migration

**URL:** https://meta.discourse.org/t/xenforo-2-3-migration/327812
**Category:** Migration
**Tags:** xenforo
**Created:** [September 23, 2024, 7:10pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812 "2024-09-23T19:10:04Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![Chadi](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/chadi/32/199851_2.png) [@Chadi](https://meta.discourse.org/u/Chadi)
#### Post date: [September 23, 2024, 7:10pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/1 "2024-09-23T19:10:04Z")

</div>

Hey people, looking to migrate from Xenforo 2.3 to Discourse. I need to be careful of this process and wanted to ask a few questions before giving it a shot. I did a few searches about migrating from XF here before posting, but most threads were a few years old. I didn’t actually see any official migration documenation.

1. Is there an official migration tool for XF built-in Discourse?
2. If there is any migration tool available, what does and does not get migrated?
3. Required software? I’m using AlmaLinux 8x (cPanel server) with LiteSpeed.
4. What happens to things like private messages, passwords, banned emails?

Thanks in advance.

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [September 23, 2024, 7:25pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/2 "2024-09-23T19:25:24Z")

</div>

I think this is _the_ xenforo migration topic.

> [@Migrate a XenForo forum to Discourse](https://meta.discourse.org/t/migrate-a-xenforo-forum-to-discourse/45232):
>
> Hey guys so after trying for a week or so I decided to import the database on docker app which I hoped it will succeed without any issues. TBH I got some issues at first but it turned to be all easy to solve. Now I would recommend doing this only once before you deploy your production site, after importing everything take a Discourse backup, wipe everything out and install new Discourse instance then restore the imported db. Ok let’s begin: First lets backup your old database from your old …

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [September 23, 2024, 8:04pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/3 "2024-09-23T20:04:14Z")

</div>

The script is [here](https://github.com/discourse/discourse/blob/main/script/import_scripts/xenforo.rb). It works just like the others.

> [@Chadi](#):
>
> I didn’t actually see any official migration documenation.

Here are some instructions.

> [@Migrate a XenForo forum to Discourse](https://meta.discourse.org/t/migrate-a-xenforo-forum-to-discourse/45232):
>
> Hey guys so after trying for a week or so I decided to import the database on docker app which I hoped it will succeed without any issues. TBH I got some issues at first but it turned to be all easy to solve. Now I would recommend doing this only once before you deploy your production site, after importing everything take a Discourse backup, wipe everything out and install new Discourse instance then restore the imported db. Ok let’s begin: First lets backup your old database from your old …

> [@Chadi](#):
>
> most threads were a few years old

That’s because not much has changed. I suspect that no news is good news.

> [@Chadi](#):
>
> I’m using AlmaLinux 8x (cPanel server) with LiteSpeed.

It will be hard to make it work with cPanel. I recommend either a local development environment or a virtual machine that can run docker and has nothing else running on it. It might be possible to make Discourse work with your current server, but that’s a separate issue from running the import.

> [@Chadi](#):
>
> What happens to things like private messages, passwords, banned emails?

> <https://github.com/discourse/discourse/blob/main/script/import_scripts/xenforo.rb#L41-L47>

It looks like it skips banned users, but does not import banned emails, so I suppose if those banned people find your new forum, you’ll need to ban them again or modify the script to do that; I’m not aware of any scripts that do that, so you’ll need to look in the Discourse source to see how to ban them on the Discourse side and find where those email addresses are in your database.

It doesn’t look like the migrate password hashes plugin supports Zenforo. There’s a chance that it works anyway (if it happens to use the same hash as some other forum).

> <https://github.com/communiteq/discourse-migratepassword/blob/master/plugin.rb#L10-L20>

---

<div class="post-metadata">

### Author: ![David\_Ghost](https://avatars.discourse-cdn.com/v4/letter/d/c37758/32.png) [@David\_Ghost](https://meta.discourse.org/u/David_Ghost)
#### Post date: [September 23, 2024, 8:23pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/4 "2024-09-23T20:23:09Z")

</div>

> [@pfaffman](#):
>
> That’s because not much has changed. I suspect that no news is good news.

true. I have migrated my xf 2.2 to discourse in the past and it worked very well. Not sure but i think I just needed to change the images/avatars path in the config file.

---

<div class="post-metadata">

### Author: ![moshbit](https://avatars.discourse-cdn.com/v4/letter/m/ac8455/32.png) [@moshbit](https://meta.discourse.org/u/moshbit)
#### Post date: [November 16, 2024, 5:54pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/5 "2024-11-16T17:54:26Z")

</div>

just my two cents here, since it will vastly differ from what most people are saying.

despite contributing quite a bit to the big xenforo thread folks have linked to (see my posts and screenshots there), i was NOT able to get the xenforo importer to work, despite testing across multiple versions and even with a vanilla install of a fresh xenforo system. while i’m not a ruby programmer, it’s pretty obvious the importer is broken, and no one is willing to work on fixing it.

i gave up because despite my extensive input, the consensus was ‘pay someone to do it’ rather than anyone volunteering to fix the importer and take my input seriously.

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [November 16, 2024, 5:59pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/6 "2024-11-16T17:59:57Z")

</div>

> [@moshbit](#):
>
> take my input seriously.

hmmm, maybe I am missing something, but I think being able to pay for something vs asking for free work likely doesn’t have anything to do with how serious your input is being taken. People have successfully migrated Xenforo to Discourse.

---

<div class="post-metadata">

### Author: ![moshbit](https://avatars.discourse-cdn.com/v4/letter/m/ac8455/32.png) [@moshbit](https://meta.discourse.org/u/moshbit)
#### Post date: [November 16, 2024, 6:04pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/7 "2024-11-16T18:04:53Z")

</div>

I’m perfectly willing to pay for the work, but you’re lumping in two different subjects that are going on in that thread. I don’t see trying to contribute to the importer as asking for ‘free work’. I’m putting in 40+ hours of testing and documentation, and frankly, the response I’ve gotten from the community, much like your post, has largely been overly defensive, rather than productive.

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [November 16, 2024, 6:14pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/8 "2024-11-16T18:14:35Z")

</div>

I saw that you [posted in marketplace about this](https://meta.discourse.org/t/migrating-xenforo-2-2-to-discourse/221596) - were you able to get a fix?

also, you clearly said “volunteering” which I interpreted as free work. maybe try posting in #Marketplace again if you are willing to pay for more work?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [November 16, 2024, 8:13pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/9 "2024-11-16T20:13:42Z")

</div>

> [@moshbit](#):
>
> it’s pretty obvious the importer is broken, and no one is willing to work on fixing it.

Only someone who has access to a Xenforo database can work to fix it. Saying that it’s broken, and even exactly how, isn’t enough for anyone to use your information to fix the script.

It’s pretty obvious that the script worked for whoever it was that submitted it and that Xenforo has changed since then.

The set of people on the planet who care about any import script is very, very small, typically only one (or one community) at any given instant. That is, people who care Xenforo don’t care about Discourse, and people who care about Discourse don’t care about Xenforo.

Looks like I last did a Xenforo import in April 2023. Glancing at the diff, it looks like I didn’t do much but change the name of the user(s) table. I see code that does something about attachments and a gallery, and I sort of remember doing something about those attachments, as the site has a bunch of images. As I recall, it was pretty good and the client was very happy with it.

If you’re still working on it and don’t have a budget, I can send you the file in a gist or something.

---

<div class="post-metadata">

### Author: ![SubStrider](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/substrider/32/512604_2.png) [@SubStrider](https://meta.discourse.org/u/SubStrider)
#### Post date: [December 30, 2024, 6:08am UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/10 "2024-12-30T06:08:32Z")

</div>

What is usually a budget for getting the migration done or the migration issues troubleshooting done? Asking so that I can take a decision if I have the appetite for it.

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [December 30, 2024, 1:30pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/11 "2024-12-30T13:30:42Z")

</div>

> [@SubStrider](#):
>
> or the migration issues troubleshooting done?

It completely depends on what needs to be fixed. It could take hours or days of work.

---

<div class="post-metadata">

### Author: ![SubStrider](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/substrider/32/512604_2.png) [@SubStrider](https://meta.discourse.org/u/SubStrider)
#### Post date: [December 30, 2024, 2:13pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/12 "2024-12-30T14:13:40Z")

</div>

OK maybe I should have asked, what is typically a per hour/day charge for such services.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [December 30, 2024, 9:26pm UTC](https://meta.discourse.org/t/xenforo-2-3-migration/327812/13 "2024-12-30T21:26:03Z")

</div>

My rate is $300/hour. I usually can provide an estimate for a migration, but not until I’ve seen and done some tests on the database. Even for a well-maintained import script, it’s not uncommon for their to be site-specific issues (plugins, strange formatting habits and expectations of the community, and a bunch of other stuff) that make importing a particular database troublesome.

If the database isn’t too big and the changes are not too many $1500 is a wild guess.

> **[Discourse Migration](https://www.literatecomputing.com/services/discourse-migration/)**
>
> We have years of experience migrating users, topics, and categories to Discourse. Whether you are coming from a well-known platform with a mature script or need a custom job for your bespoke forum, we can help make the transition as easy as possible...
