The latest Mautic release update to 2.12 went seamlessly.  Like any system, however, you discover something that didn’t seem to cause a problem before.  This issue isn’t a bug, it’s just one of those snags you don’t catch until you get down to the level of testing you didn’t reach before.  The “Import Contacts” tool is one of those times when I discovered that if you select “Import in Background” instead of direct through the browser you will wait and nothing will import.  The reason isn’t obvious but I suspected it was because a CRON job was missing.

I assumed this was triggered simply when the user put the import task in the queue, but this is not the case.  For all the CRON jobs they recommend at this link, Mautic does not mention anything about scheduling imports.  You can simply go to your command line and type this to execute:

$ php /home/path/to/your/mautic/app/console mautic:import

Also, I set up a CRON job for this command to run every thirty minutes so this won’t happen to others in the future.  I do think CRON jobs have a place, but manually setting them up seems a little archaic, I think like WordPress they should be more automated, if nothing else to reduce the number of people who lack more web technical skills and just want to use the marketing automation system from scratching their heads or complaining.

Mautic is a great marketing automation tool, it comes in two flavors, the free Community Edition and the Enterprise Edition. It is quickly evolving into a stable and robust marketing automation system.  My favorite part is that Mautic is developed on the PHP Symfony framework, as an experienced PHP developer with decades of experience with different systems here in Jacksonville, Florida, I can say the past 4 years I have been watching Mautic grow that it is a very exciting time for small businesses and marketing departments that may not currently have a lot of resources or high budgets for higher cost platforms like SalesForce.  I can also speak from direct experience that it blows InfusionSoft out of the water with a lot more customization and capabilities.


Since 2.8.2, a bunch of Mautic forms were hanging on “Please wait…”, even though the form data was going through, this is not a good customer experience.  Here is the fix for it on Git Hub from the Mautic team.  It turns out, this issue only happened for Mautic instances running in a sub-directory.

I think it’s usually best to put Mautic on a site within a sub-directory, perhaps in “/marketing” to keep it out of the way and not conflicting with your site’s WordPress or Drupal CMS.

This fix just came off Git Hub from the Mautic marketing automation developers yesterday.  Inside your Mautic folder, go to /media/js and make this change to both files, “mautic-form-src.js” and “mautic-form.js”:

if (event.origin !== MauticDomain) return;

// Replace the above with these two lines in both files

var MauticDomainWithoutPath = MauticDomain.match(/https?:\/\/[^\/]*/);
if (event.origin != MauticDomainWithoutPath) return;

I can confirm that this patch to these two .js files fixes the problem of “Please wait…” upon form submission and the form will behave upon submission properly, whether to show a message or perform a redirect.

Besides being free, why choose Mautic for your organization’s marketing automation?

As a web PHP developer in Jacksonville with over 13 years experience integrating and developing from scratch different systems, I have seen the rise of Mautic as a free marketing automation platform that rivals much more expensive platforms.  I can’t say enough great things about Mautic marketing automation and one of the best things about it that other experienced web developers who appreciate the power of leverage PHP frameworks is the fact Mautic is built on Symfony, my preferred collaborative full stack development framework I’ve been using now for over four years.

The fact Mautic is built on Symfony means that it is fully extendable and since it is by nature modular by design, it is easy to create your own custom themes for brands, channels and create other behaviors that other marketing automation platforms don’t even allow your programmer’s to access because they are completely closed systems.  This usually means if you have the right web developers with the “programmer’s mentality“, there is nothing you can’t get Mautic to do for your organization!

A special thanks to John Linhart and Michael Van Laar, Mautic geniuses!  By the way, a special message to Mr. Linhart — thank you for all your hard work and competent development of Mautic, it’s tough to read some of the messages, so many people don’t understand how complex these things are because you make it look easy!  Keep up the great work (please)….  🙂


All experienced web developers know that before you run any updates to a system that you back up your database and files, and Mautic, the marketing automation platform, is no exception.  Mautic comes in two flavors and this only applies to the completely free community version, which in my opinion makes Mautic the best, most powerful and scalable free marketing automation system.  It comes with no strings attached!  I may be partial to Mautic because it’s built on Symfony, as an experienced Symfony PHP developer in Jacksonville, Florida, I can say it makes me feel better about its stability and it tells me that the people behind Mautic are serious about its future and success.  We’re talking about the platform’s code base, which is stable, secure, and strongly encourages best coding practices.

Also, Mautic under the hood is very easy to customize and extend.  It uses all of Symfony’s patterns and components, so it’s easy to create your own Twig templates for your company that can do some very intuitive things that you just can’t do in much more expensive marketing automation platforms like Hub Spot, Marketo, SharpSpring, and InfusionSoft.

The fact Mautic is built on a very familiar and stable PHP framework makes it very unique among the marketing automation systems out there and it is positioned to explode for businesses tired of paying thousands of dollars every month for software that locks them in.  Are any of these other marketing automation platforms developed in a major PHP framework?

Probably not, and this is an area of concern because if it’s all proprietary, these other MA’s (acronym for “Marketing Automation”) are reinventing the wheel with basic system functions, functions best left uncoupled to a framework so there’s parallel improvements to the system.  Symfony updates and improves the way code talks to the database while the Mautic magicians work on ways to improve Mautic.

Updating Mautic: The Two Golden Commands To Fix Your Marketing Automation Update

When you log into your Mautic, you will see update notification.  This always makes me a little anxious, especially knowing that it’s not a button click, there’s always something that needs to be done afterwards to make sure the update completes.  Usually, it hangs at the cache clearing stage during the automatic update, so it never actually reaches the part where it can update the database schema, so that’s where these two commands have saved the last three updates I’ve performed in Mautic since 2.7 all the way to 2.9.2, it’s most current available version.

First, “cd” into your Mautic directory in the command line, then type in the following:

app/console doctrine:migration:status
app/console doctrine:migration:migrate

Here’s something similar you should see after executing both commands.  Again, it hasn’t happened to me yet where I had to restore, but do not forget to make backups of your database and files!

$app/console doctrine:migration:status
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0

 == Configuration

    >> Name:                                               Mautic Migrations
    >> Database Driver:                                    pdo_mysql
    >> Database Name:                                      your_db
    >> Configuration Source:                               manually configured
    >> Version Table Name:                                 migrations
    >> Version Column Name:                                version
    >> Migrations Namespace:                               Mautic\Migrations
    >> Migrations Directory:                               /home/app/migrations
    >> Previous Version:                                   2016-09-26 00:00:00 (20160926000000)
    >> Current Version:                                    2016-09-26 00:00:01 (20160926000001)
    >> Next Version:                                       2016-09-26 18:28:07 (20160926182807)
    >> Latest Version:                                     2017-07-28 11:03:51 (20170728110351)
    >> Executed Migrations:                                46
    >> Executed Unavailable Migrations:                    0
    >> Available Migrations:                               89
    >> New Migrations:                                     43
[]$ php app/console doctrine:migration:migrate
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0

                    Mautic Migrations


WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)

Then don’t forget to clear the Mautic cache.  The standard Symfony “app/console ca:cl” always results in an error, so you have to cd to the app/console/cache directory and remove all the files manually with “rm -rf *”.

Setting up marketing automation requires a “Programmer’s Mentality”

As an experienced web developer, it’s almost a liability knowing so much about marketing and the business side.  It’s ironic, though because so much of marketing requires understanding of data and setting up systems to automatically do things properly based on logic.  This sounds familiar and much more complicated than “marketing” though, doesn’t it?  That’s why data, systems, logic, flow charts, and automation all require a programmer’s mentality to execute properly.  To set up a marketing automation system for any business so it succeeds and works properly is technical and complex.  Marketing automation requires more programmer’s skills than marketing knowledge, by far.

I have over 13 years experience in web development and media production and am currently a senior PHP developer in Jacksonville, Florida, specializing in the Symfony framework, LAMP stack development, database architecture and system design, among other things.  I have a “programmer’s mentality” and I know when I meet someone who does not.  Also, a few friends of mine interviewing around Jacksonville and elsewhere have shared with me a few stories lately (I’m perfectly happy where I am, despite the awful commute).  Here’s a little advice for those looking to hire any web developers:  Don’t look silly and naive when you try to pigeonhole experienced web developers by labeling them as just a “front-end” or a “back-end” web developer, we can be good at systems and databases and still know how to make the interfaces and web pages look as good as the system functions in the back-end.  People can have a strong business and marketing skill set and still be effective programmers.  This is just a pet peeve of mine, just because you may have only dealt with web developers in the past who are “strong in one area” doesn’t mean we’re all like that.  These days, web developers must have a diverse set of skills, just like all graphic designers should be able to build their own emails and web pages.


As a PHP web developer with over 13 years experience, I can say that Mautic is the best of all the free marketing automation platforms, by far.  Sugar CRM is good, for what it does, but that’s a CRM, not an MA (Marketing Automation).  Still, when you are updating Mautic, like you would WordPress, be sure to always back up your files and database!

Now, I will chronicle my latest experience updating Mautic from 2.8.3 and 2.9.1.  By clicking the update button beneath the bell icon, it take you to the update page where you have to click “Update”.  Then, the process unfolds, it seems to hang at clearing the cache on my server, but you have to logout then log back in.  Everything went fine, except when I went to “Emails” and “Focus Items” and it hung up.  In the logs, I saw the following entries:

mautic.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\InvalidFieldNameException: "An exception occurred while executing 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_10 FROM (SELECT e0_.is_published AS is_published_0, e0_.date_added AS date_added_1, e0_.created_by AS created_by_2, e0_.created_by_user AS created_by_user_3, e0_.date_modified AS date_modified_4, e0_.modified_by AS modified_by_5, e0_.modified_by_user AS modified_by_user_6, e0_.checked_out AS checked_out_7, e0_.checked_out_by AS checked_out_by_8, e0_.checked_out_by_user AS checked_out_by_user_9, e0_.id AS id_10, e0_.name AS name_11, e0_.description AS description_12, e0_.subject AS subject_13, e0_.from_address AS from_address_14, e0_.from_name AS from_name_15, e0_.reply_to_address AS reply_to_address_16, e0_.bcc_address AS bcc_address_17, e0_.template AS template_18, e0_.content AS content_19, e0_.utm_tags AS utm_tags_20, e0_.plain_text AS plain_text_21, e0_.custom_html AS custom_html_22, e0_.email_type AS email_type_23, e0_.publish_up AS publish_up_24, e0_.publish_down AS publish_down_25, e0_.read_count AS read_count_26, e0_.sent_count AS sent_count_27, e0_.revision AS revision_28, e0_.lang AS lang_29, e0_.variant_settings AS variant_settings_30, e0_.variant_start_date AS variant_start_date_31, e0_.dynamic_content AS dynamic_content_32, e0_.variant_sent_count AS variant_sent_count_33, e0_.variant_read_count AS variant_read_count_34 FROM emails e0_ LEFT JOIN categories c1_ ON e0_.category_id = c1_.id WHERE e0_.variant_parent_id IS NULL AND e0_.translation_parent_id IS NULL ORDER BY e0_.subject DESC) dctrn_result) dctrn_table':  SQLSTATE[42S22]: Column not found: 1054 Unknown column 'e0_.utm_tags' in 'field list'" at /home/marketingautomation/yourdirector/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php line 71 {"exception":"[object] (Doctrine\\DBAL\\Exception\\InvalidFieldNameException(code: 0): An exception occurred while executing 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_10 FROM (SELECT e0_.is_published AS is_published_0, e0_.date_added AS date_added_1, e0_.created_by AS created_by_2, e0_.created_by_user AS created_by_user_3, e0_.date_modified AS date_modified_4, e0_.modified_by AS modified_by_5, e0_.modified_by_user AS modified_by_user_6, e0_.checked_out AS checked_out_7, e0_.checked_out_by AS checked_out_by_8, e0_.checked_out_by_user AS checked_out_by_user_9, e0_.id AS id_10, e0_.name AS name_11, e0_.description AS description_12, e0_.subject AS subject_13, e0_.from_address AS from_address_14, e0_.from_name AS from_name_15, e0_.reply_to_address AS reply_to_address_16, e0_.bcc_address AS bcc_address_17, e0_.template AS template_18, e0_.content AS content_19, e0_.utm_tags AS utm_tags_20, e0_.plain_text AS plain_text_21, e0_.custom_html AS custom_html_22, e0_.email_type AS email_type_23, e0_.publish_up AS publish_up_24, e0_.publish_down AS publish_down_25, e0_.read_count AS read_count_26, e0_.sent_count AS sent_count_27, e0_.revision AS revision_28, e0_.lang AS lang_29, e0_.variant_settings AS variant_settings_30, e0_.variant_start_date AS variant_start_date_31, e0_.dynamic_content AS dynamic_content_32, e0_.variant_sent_count AS variant_sent_count_33, e0_.variant_read_count AS variant_read_count_34 FROM emails e0_ LEFT JOIN categories c1_ ON e0_.category_id = c1_.id WHERE e0_.variant_parent_id IS NULL AND e0_.translation_parent_id IS NULL ORDER BY e0_.subject DESC) dctrn_result) dctrn_table':\n\nSQLSTATE[42S22]: Column not found: 1054 Unknown column 'e0_.utm_tags' in 'field list' at /home/marketingautomation/yourdirectory/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:71, Doctrine\\DBAL\\Driver\\PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'e0_.utm_tags' in 'field list' at /home/marketingautomation/yourdirectory/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:106, PDOException(code: 42S22): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'e0_.utm_tags' in 'field list' at /home/marketingautomation/yourdirectory/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:104)"} []

So here’s what I did on the command line to force the Mautic update to finish:

$ app/console mautic:update:find -e prod
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0
Great! You are running the current version of Mautic.
$ php app/console doctrine:migration:status
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0

 == Configuration

    >> Name:                                               Mautic Migrations
    >> Database Driver:                                    pdo_mysql
    >> Database Name:                                      your_database_name
    >> Configuration Source:                               manually configured
    >> Version Table Name:                                 migrations
    >> Version Column Name:                                version
    >> Migrations Namespace:                               Mautic\Migrations
    >> Migrations Directory:                               /home/symfony/yourdirectory/app/migrations
    >> Previous Version:                                   2016-07-26 00:00:00 (20160726000000)
    >> Current Version:                                    2016-07-26 00:00:01 (20160726000001)
    >> Next Version:                                       2016-07-28 00:00:00 (20160728000000)
    >> Latest Version:                                     2017-07-25 15:50:53 (20170725155053)
    >> Executed Migrations:                                37
    >> Executed Unavailable Migrations:                    0
    >> Available Migrations:                               88
    >> New Migrations:                                     51
$ php app/console doctrine:migration:migrate
PHP Warning:  Module 'XCache' already loaded in Unknown on line 0

                    Mautic Migrations


WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)y
Migrating up to 20170725155053 from 20160726000001

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20160731000000

     -> update campaign_lead_event_log log inner join campaign_events events on log.event_id = events.id set log.metadata = 'a:0:{}' where events.type = 'email.send' and log.metadata = 'a:2:{s:6:"failed";i:1;s:6:"reason";s:50:"mautic.notification.campaign.failed.not_subscribed";}'

  ++ migrated (2.49s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20160926182807

     -> insert into companies (companyname, is_published) (SELECT DISTINCT TRIM(company), 1 from leads l left join companies c ON l.company = c.companyname where company IS NOT NULL and company <> '' and c.companyname is null)
     -> insert into companies_leads (company_id, lead_id, date_added, manually_added, manually_removed) SELECT c.id, l.id, '2017-07-30 12:30:05', 0, 0 from leads l join companies c on c.companyname = l.company ON DUPLICATE KEY UPDATE company_id = c.id;

  ++ migrated (4.85s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20161123225456

Migration 20161123225456 was executed but did not result in any SQL statements.

  ++ migrated (11.54s)

  ++ migrating 20161124145649

     -> ALTER TABLE lead_frequencyrules CHANGE `frequency_number` `frequency_number` SMALLINT DEFAULT NULL;
     -> ALTER TABLE lead_frequencyrules CHANGE `frequency_time` `frequency_time` VARCHAR(25) DEFAULT NULL;

  ++ migrated (2.38s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20170108012944

     -> ALTER TABLE push_notifications CHANGE button button LONGTEXT NULL
     -> ALTER TABLE dynamic_content_lead_data DROP FOREIGN KEY FK_515B221B55458D
     -> ALTER TABLE dynamic_content_lead_data CHANGE lead_id lead_id INT NOT NULL
     -> ALTER TABLE dynamic_content_lead_data ADD CONSTRAINT FK_515B221B55458D FOREIGN KEY (lead_id) REFERENCES leads (id) ON DELETE CASCADE

  ++ migrated (4.52s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20170216221648

     -> ALTER TABLE focus ADD editor LONGTEXT NULL
     -> ALTER TABLE focus ADD html_mode VARCHAR(255) DEFAULT NULL
     -> ALTER TABLE focus ADD html LONGTEXT NULL
     -> ALTER TABLE focus ADD utm_tags LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)';

  ++ migrated (12.38s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20170429092049

     -> ALTER TABLE emails ADD utm_tags LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)';
     -> ALTER TABLE push_notifications ADD utm_tags LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)';

  ++ migrated (4.45s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20170515222314

     -> CREATE TABLE imports (
    id INT AUTO_INCREMENT NOT NULL,
    is_published TINYINT(1) NOT NULL,
    date_added DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
    created_by INT DEFAULT NULL,
    created_by_user VARCHAR(255) DEFAULT NULL,
    date_modified DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
    modified_by INT DEFAULT NULL,
    modified_by_user VARCHAR(255) DEFAULT NULL,
    checked_out DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
    checked_out_by INT DEFAULT NULL,
    checked_out_by_user VARCHAR(255) DEFAULT NULL,
    dir VARCHAR(255) NOT NULL,
    file VARCHAR(255) NOT NULL,
    original_file VARCHAR(255) DEFAULT NULL,
    line_count INT NOT NULL,
    inserted_count INT NOT NULL,
    updated_count INT NOT NULL,
    ignored_count INT NOT NULL,
    priority INT NOT NULL,
    status INT NOT NULL,
    date_started DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
    date_ended DATETIME DEFAULT NULL COMMENT '(DC2Type:datetime)',
    object VARCHAR(255) NOT NULL,
    properties LONGTEXT DEFAULT NULL COMMENT '(DC2Type:json_array)',
    INDEX import_object (object),
    INDEX import_status (status),
    INDEX import_priority (priority),
    PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;

  ++ migrated (2.82s)

  ++ migrating 20170516000000

     -> INSERT INTO `lead_fields` (`is_published`, `label`, `alias`, `type`, `field_group`, `default_value`, `is_required`, `is_fixed`, `is_visible`, `is_short_visible`, `is_listable`, `is_publicly_updatable`, `is_unique_identifer`, `field_order`, `properties`, `object`)
VALUES (1, 'Points', 'points', 'number', 'core', '0', 0, 1, 1, 0, 0, 0, 0, 29, 'a:0:{}', 'lead');

  ++ migrated (2.09s)

  ++ migrating 20170517091309

     -> CREATE TABLE lead_event_log (
    id INT AUTO_INCREMENT NOT NULL,
    lead_id INT DEFAULT NULL,
    user_id INT DEFAULT NULL,
    user_name VARCHAR(255) DEFAULT NULL,
    bundle VARCHAR(255) DEFAULT NULL,
    object VARCHAR(255) DEFAULT NULL,
    action VARCHAR(255) DEFAULT NULL,
    object_id INT DEFAULT NULL,
    date_added DATETIME NOT NULL COMMENT '(DC2Type:datetime)',
    properties LONGTEXT DEFAULT NULL COMMENT '(DC2Type:json_array)',
    INDEX lead_id_index (lead_id),
    INDEX lead_object_index (object, object_id),
    INDEX lead_timeline_index (bundle, object, action, object_id),
    INDEX lead_date_added_index (date_added),
    PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
     -> ALTER TABLE lead_event_log ADD CONSTRAINT FK_753AF2E55458D FOREIGN KEY (lead_id) REFERENCES leads (id) ON DELETE SET NULL;

  ++ migrated (5.34s)

  ++ migrating 20170607150241

     -> ALTER TABLE webhook_logs ADD note VARCHAR(255) DEFAULT NULL

  ++ migrated (4.9s)

  ++ migrating 20170607155015

     -> ALTER TABLE webhook_logs ADD runtime DOUBLE PRECISION DEFAULT NULL

  ++ migrated (4.03s)

  SS skipped (Reason: Schema includes this migration)

  SS skipped (Reason: Schema includes this migration)

  ++ migrating 20170628191405

     -> CREATE TABLE plugin_crm_pipedrive_owners (
  id INT AUTO_INCREMENT NOT NULL,
  email VARCHAR(255) NOT NULL,
  owner_id INT DEFAULT NULL,
  INDEX email (email),
  INDEX owner_id (owner_id),
  PRIMARY KEY(id)
) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;

  ++ migrated (3.61s)

  ++ migrating 20170725155053

     -> ALTER TABLE companies CHANGE score score INT(11) NULL

  ++ migrated (6.32s)

  ------------------------

  ++ finished in 71.72s
  ++ 51 migrations executed
  ++ 23 sql queries

The strange thing is, Mautic says that there has been no database schema changes, except for updates older than 2.6, but I was updating Mautic from the most recent previous verison, 2.8.3.  Oh well, something was missed in translation, can’t really complain about free marketing automation if it has a few glitches once in a while.  I’ve never updated a version of Mautic that was completely smooth but there has always been a workaround.


Recently, I updated a few instances of Mautic from 1.9 and 2.8.1 to 2.8.2 and encountered the following error message:

It didn’t take long to realize for some reason the update was redirecting to a path and adding an additional forward slash before the “/s/update/” part of the URL.  Just manually remove the extra slash in the URL and force your browser to open that address and I have confirmed the update will continue.

Before doing any upgrades with Mautic, or ANY system for that matter, to make backups of your affected directories and database and NEVER update on a live site without the ability to roll back!

Some of you may encounter an error after that, just navigate back to your /s/login/ path and you should be fine!  To set up and run marketing automation, you don’t have to be a full-fledged PHP web developer, but it sure helps!

Mautic WordPress Plug-in

Mautic is an incredible Marketing Automation tool, their free community version has very powerful capabilities that many businesses pay thousands of dollars a month for with Hub Spot, Marketo, Pardot, InfusionSoft, etc.  Mautic also has a series of free WordPress plug-ins so you can integrate Mautic with your website with a simple click of the “Install Plug-in” button.  To try them out, just go to your WordPress Plug-in manager and type “mautic” to see the latest list.

The most indispensable Mautic plug-in is “WP Mautic“, which is made by Mautic and creates an interface for you to use short codes and embed your Mautic forms directly in your website.  I can say first hand that it is very reliable and easy to use.

There is one small catch — it doesn’t say anywhere in the instructions but when you install the WP Mautic plug-in, go to its settings where it asks you for the URL of where you log in to Mautic.  Be sure not to add a trailing slash at the end of it or it won’t connect to it!

More about Mautic, the powerful, free Marketing Automation Tool

To set up Mautic and connect it to your website you actually need very little or no actual coding knowledge!  So, if you want your website to limit how often you have a pop-up form bother someone, if you want to customize page content based on a particular visitor’s tracking info and previous historical data Mautic’s already collected, or perhaps you want to throw an exit intent pop-up to just make sure before they view a certain page you give them one last chance to think about it…. You can do all this by setting up Mautic and installing the WordPress plug-in.

The list of ways to make your website more powerful, smart, intuitive and maybe even less annoying, are all made possible through this plug-in and how well you set up your Mautic account to deal with all these conditions and behaviors.

You don’t need a web developer to set up Marketing Automation?!

The fact you can get a website up and running, install and set up your own marketing automation, and get your website and marketing automation to share data and work together all without knowing any code is good news for you, bad news for web developers, right?  Well, I contend that if you want Mautic set up right, you need more than someone who has a Marketing degree, you need someone who understands systems and how to convert business logic into reliable system actions.  It can get complicated fast so you need someone with a programmer’s mentality or you will likely end up with a poorly designed system that is inefficient to work with, update, and enhance later.

Here’s a typical boilerplate campaign set up in Mautic.  By the way, now Mautic can let customers decide how they prefer to be contacted so the same campaign can send an email, SMS text OR a twitter message all through the same workflow!

Even a simple boilerplate campaign could seem overwhelming, so just because you can set all this up yourself without knowing how to write code still doesn’t mean you won’t need to hire a PHP web developer who can help you design it to work so it’s future proof and adaptable.  I often find businesses expect WordPress to do everything for them, then, they run into a brick wall where their 50 plug-ins no longer update or work well with their current theme, etc.  By this time, they’ve wasted years of time stacking an ever higher house of cards that will take more time to redo right.

The definition of insanity is to do the same thing over and over again but expect a different result.  To really enhance your website and get it to do amazing things, not just normal things, if you need a website to do more than just be a glorified business card or blog repository, you will likely be looking for a competent web developer to make it happen.  No matter how easy the tools and integrations seem to be on the surface (think one-click plug-in installs), unless you keep things really simple and need to just do simple things, beware of not utilizing someone with a programmer’s mentality who can think far ahead of your current project scope.  Beware of relying one someone who doesn’t have the proven experience setting up business systems.

Your organization needs someone who has proven their competence working with data, system design, a variety of web systems.  You need a person who has programming experience who understands efficiency, code reusability and the importance of future-proof scalability.  Using the right system designer to spearhead your marketing automation project will save your organization years of headaches and possibly hundreds of thousands of dollars of wasted money thrown at amateurish attempts experimenting with your resources on your dime to only deliver you a system that won’t meet your marketing requirements.

If you are an organization in the Jacksonville Northeast Florida area looking for open source PHP web developers with experience in WordPress, Symfony, Drupal, Magento, or API integration experts, please drop me a note, I have a list of competent people who I can recommend here in Jacksonville, Southwest Florida, and throughout the US, Canada, UK, Australia, and Germany as temporary web development consultants or remote web developers!