I am a true digital nomad, working from my home office. Cutting out commuting from my life proved to be an extremely rewarding experience. I can spend more time on things, that matter, giving all my attention to my clients.
I lived in Switzerland and the United States for couple of years, which experience helped me to perfect my inter-cultural communication skills. My family is bi-lingual, therefore English is my second native language. Besides Hungarian I also speak German and Latvian.
April 2020 – present
Friendly Automate is a professional Marketing solution based on Mautic.
Head of insights and delivery
April 2016 – April 2020
TitanExclusive works on a global scale, develops strategies to distribute its clients campaigns using a combination of its diverse network of affiliates, its advanced emailing marketing solution, and a surplus of quality traffic gained from its own web properties.
As head insights and delivery I have the opportunity to overview and manage campaign processes, improve delivery rates, and ensure the highest possible ROI for our advertisers.
Head of e-business and operations
January 2014 – present
Stenders is a global cosmetics brand developing a wide range products inspired by nature.
As head of e-business I’m coordinating the website development with our team abroad, marketing activities including promotions, newsletters and facebook presence.
We also aggregate data from our brick and mortar stores and web analytics tools to support decision making regarding inventory, staffing and marketing spending.
Baratikor.com / Draugiem.lv
August 2007 – January 2014
Baratikor.com was a social network, that florished in a Facebook dominated world. The site introduced various smart premium services, that created real value for its users.
As country manager I was responsible for setting up the customer support, sales and content management teams and launching the social network in Hungary. I supervised various projects creating real value for our advertisers and our users.
Check out my side projects
Created the local webstore for Visitbritain. I was also responsible about creataing online campaigns to support the launch.
Launched the Playforia Gaming Social Network in Hungary. I also set up the local content management and support team.
Riot Games USA
I’m currently involved into streamlining and local support team’s work by creating more effective communication with users.
My team creates custom modules for Unicenta POS software to enable better reporting and decision making for its users.
Malév Hungarian Airlines
May 2003 – August 2007
Malév Hungarian Airlines was a national carrier, member of the Oneworld Alliance. Malév’s booking website grew from 0 to over 10 million EUR turnover in just four years.
As e-business manager I coordinated the content development and technical development of the website. During my years the old non-functional website was transformed into a thriving travel portal becoming the highest grossing website in the country.
Get in touch with me!
Read my blog
Zapier is great if you want to create a proof of concept automation or test your workflows. However if you want to scale up your automation, Zapier can be super-expensive. And all it does is take data from one place and puts it into another place. If you use Zapier for couple of simple repetitive jobs, its better to cut out the middleman and use your own code.
This is what we gonna do
We will create few line of code, that captures the incoming data from a webhook, process it if needed, and post it to our Mautic using simple authentication. You can download the whole code (commented and everything) by entering your email and first name below, or follow me and build it together:
Understand the basics
You don’t need to be a programmer to do this, with the help of google and Stackoverflow you can write the script, that replaces Zapier.
Here are the key expressions you need to know. You need to know what you are using in order to research more, or if you don’t want to look stupid if you ask questions from others in the forums.
Here we go:
A webhook is like a package of information sent to your script over the internet. It can be different format or structure. The good thing, is that you know what to expect, when you write your code to receive it. Check the other party’s website to understand what form of data to expect.
Basic auth is the form of authentication we use to talk to our Mautic instance. It is super simple, just like a login, only with a line of code.
A Curl call is similar to a webhook. You can use it to post the data you to your Mautic.
API stands for Application Programming Interface, and in our case it is the part, that accepts our package and places the data in the right place.
All Zapier does is accept the webhook, and use basic auth to reach your Mautic via curl formatted according to the API docs.
Not rocket science.
Okay, before we get started, let’s turn on the API settings in Mautic. I’d create a new user called API as well, just to keep the simple login and programmatic login separate.
Post to Mautic via the API
What? Why to start from the last step?
Multiple reasons. I want to make sure the API works, and I also want to you to have instant success.
In this example we will crate a new contact and tag them. This is a great way to start a campaign for them.
Let’s declare our variables:
$loginname = 'apiuser'; // Loginname of your API user $password = 'yourpasswordhere'; // This is the password of the API user $siteurl = yoursiteurl.tld; // example: mymautic.com
The data you would like to transfer is called payload. We will set it for now, and later replace with the data we get from the webhook.
$email = '[email protected]'; $firstname = 'Jean-Luc'; $lastname = 'Pickard'; $tag = 'purchased';
This is our curl call:
$curl = curl_init(); // Set some options - we are passing in a user agent too here curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => "https://".$loginname.":".$password."@".$siteurl."/api/contacts/new", CURLOPT_USERAGENT => 'Mautic Connector', CURLOPT_POST => 1, // posting the payload CURLOPT_POSTFIELDS => array( 'firstname' => $firstname, 'lastname' => $lastname, 'email' => $email, 'tags' => $tag ) ));
Save the code in a php file, place it in your server (outside of your Mautic folders), and run it.
Our new contact will be placed into Mautic tagged with the appropriate tag.
Capture and process a webhook (woocommerce example)
Now I have a bad news and good news. The bad news is, that each service you want to connect with might have a different webhook structure. The good news is, that we need to build the interface only once. With a little practice and the help of the internet you’ll be able to catch any webhook payload in no time.
In our example we will capture a woocommerce webhook.
As a first step, you can should see how the payload looks like. You can do it in 3 easy steps:
- create a bin at https://postb.in/
- add the bin address as your webhook address
- Fire up the webhook. In our case that would be making a woocommerce order
If all goes fine, you’ll be able to see an incoming webhook payload in your bin.
We can capture the entire webhook’s payload with just one command.
// receive the webhook $HTTP_RAW_POST_DATA = file_get_contents('php://input');
The hard part is to make sense of this incoming data. Teaching you how to decode and loop through JSON content is beyond the scope of this tutorial, but I’ll show you how I did it with couple of commands in case of this woocommerce webhook:
// decode the incoming data $data = json_decode($HTTP_RAW_POST_DATA,true);
Now we can grab the different values. In case of woocommerce we will use the billing information:
$email = $data['billing']['email']; $firstname = $data['billing']['first_name']; $lastname = $data['billing']['last_name'];
Obviously this info comes to the front of our script, and replaces the payload we declared before. The tag is static, you don’t need to replace it. Maybe I’ll create a second part to this article where we tag our contact based on what they have purchased.
I am huge fan of logging, so why don’t you add a small logfile to your script. It makes debugging easier. Add this at the end of your code:
You can download the entire script here by adding your email and first name, or just follow the tutorial.
If you have questions, let me know in the comments.
The only way to frogleap your competition is to create relevant, quality and personalized content.
One aspect of this personalization is often under estimated.
And I don’t mean like ‘friendly’ or ‘professional’, when I say language I mean, that you try to speak to your contacts on the language they prefer.
With your previous tools you might have managed it by creating different lists and sending specific language content separately.
Friendly is brewed partially in Europe where we are happily embracing the multicultural environment, and adjust our tools to operate in this environment. If you want to be a truely european business with serving multiple markets on multiple langauges, than this tutorial will blow your mind away.
This could be your multi-lingual double opt-in:
But I hope it isn’t!
I hope it looks like this, and works on 4 languages at least:
To create a simple double opt-in as above, you’ll need to be familiar with a couple of concepts in Mautic:
Translation of another content
You can select a content to be a translation of another content.
This means, that you can group them together and they will shown to contacts with the matching preferred language setting.
This little icon will show you if a translation is available for a certain content:
Once you open it, all the translations are available to edit:
In the example above the German version is the main one, and if we send an email to the English speakers, then the English version will be used.
2. Hidden form elements
You can add additional information to the contacts who fill out specific forms with hidden form elements. By adding a hidden field, that describes the preferred language, you can set the langauge of communication with each of your contacts automatically.
Simply add a ‘hidden’ field to your form:
Set a name you’ll like (won’t be visible). Then add the default language version. Make sure you are using the ISO langauge code, when specifing a language.
You also have to connect it with the right field in the contact profile. Do it as follows:
3. Combine everything you just learned
Now that you learned some cool advanced tactics, it’s time to put everything together. The result should be a nice, simple multi-language double opt-in campaign with your emails and pages neatly organized.
Campaigns. Restarts. Campaignevent additions. Will they run? What does really happen?
Let’s reveil the mechanic turk inside of Mautic with some hands on tests and clear results.
This comes up awfully lot in different forums, tutorials, but there is little clearity behind what really happens. I’d like to clear it up everything in this post. If I wouldn’t be 100% clear about something, please drop me a line and I’ll extend this article.
Case Nr. 1.: Simple Campaign With restarting option
I created a simple campaign with sending out 2 emails sequentially. The source of the campaign is a segment, where contacts qualify based on a tag.
As the last step I created 2 contacts to qualify for the segment by adding a tag.
As you can see, all went well, contacts got into the segment, than into the campaign. Events went to pending state (grey) then executed properly. (yellow). All good.
I removed one of the tags and the contact left the campaign. The funny thing is: the email was already queued for this contact, and once I removed him from the segment, he disqualified to be a member of the campaign, so the email simply failed. This was immediatly represented in the campaign view:
Okay, great, now let’s re-add the contact to the campaign, and see what happens. Will he go to the unfinished step 2? Or he will try to continue the campaign? Or just start from the beginning? (Spoiler: restart means restart.)
This is the complete breakdown of the contact journey with explanations. Please see how he was added, removed and re-added to the campaign.
If your campaign can be restarted, and you disqualify a contact based on segment membership to be the member of a campaign, than the campaign will be started from step 1 once the contact requalifies to be the member of the campaign.
You might ask: okay, but after the last email is sent – is he still a member of this campaign? If yes, can I add further steps to the campaign and will they be executed?
The answer is YES. YES. NO. (Btw my favorite podcast has a yes-yes-no segment…)
The contacts will be member of the campaign:
And YES, you can add campaign steps, and they will show it the campaign action list.
But they won’t be executed, just hand in there 🙂 So if you ever wonder why you see pending actions hanging, this might be the reason:
Okay, great, so what happens if I add new people to this campaign? For them the third step would be there from the first moment.
The answer is: for them it will be business as usual, they will go through all 3 events:
Events are triggered when a contact enters the campaign and executed. If the contact reaches the last step of the campaign, they will be still member of the campaign, but newly added events are not executed for them.
Just for the sake of sanity, let’s see if a contact is re-added to a campaign, where turn off the ‘Contact can restart the campaign’ button.
I created a new contact, a new segment and a new campaign to test it. The campaign had a 2 email sequence.
The contact got the 2 emails.
In order to test the re-adding functionality, as a first step I removed the tag that qualifies the contact to be the segment member, and campaign member. The contact left the campaign as expected.
Once I re-added the tag, the contact was re-added to the segment, but not the campaign. So we got expected results.
Okay, one last thing to test: What happens if we add a new email?
To test this, I added a new contact to my ‘non-restartable’ segment by adding the neccessary tag. He nicely qualified into the campaign, and got the first 2 emails. Than the contact ‘finished’ the campaign as expected (and stayed a member).
I added the new email, and it was added as ‘pending’ to the list of actions. And the email was never sent, since the campaign was over for this person.
See detailed action list:
Regardless of the campaign restartability, you new actions after a campaign was once over for a contact will be not executed.