Jacob Filipp

Category: Writing (page 2 of 3)

CanCon Treasures

“Can Con” is a Canadian system of quotas that require radio stations to set aside a percent of airtime towards playing Canadian-created music.

Because of this system, you sometimes get exposed to some unexpected acts here in Canada. Musicians that never made it big globally.

This is a collection of Canadian “Can Con” gems that I like.

Continue reading

6 Ways marketers can be productive despite their “bad data addiction”

Recently Jacques Corby-Tuech, a Marketing Technologist with skills and attitudes similar to my own, wrote a post about how Marketers are addicted to bad data (archive link).

Jacques showed some great examples where marketing data is seen as reliable – but is actually broken. Even the processes used for decision making around marketing data are often broken (ex: split tests and statistical significance)

Because I’m passionate about the topic of marketing data, I’d like to add 2 types of Bad Data to the original list and offer 7 tips for marketers to stay productive despite this issue:

Continue reading

Types of Monopolistic Behaviour

This is a short reference, initial listing is from the Wikipedia page on Anti-competitive prices.


Where a company sells a product in a competitive market at a loss. Though the company loses money for each sale, the company hopes to force other competitors out of the market, after which the company would be free to raise prices for a greater profit.

Ex: I believe this is how Uber and Lyft set their pricing, hoping to drive out traditional taxi services from the market. Once they do this, they’ll either be the only game in town (because nobody can ever start a brand new taxi service ever again, right?), or they’ll have a permanently low cost structure with driverless cars (spoiler: not happening).

Exclusive Dealing

Where a retailer or wholesaler is obliged by contract to only purchase from the contracted supplier.

Price Fixing

Where companies collude to set prices, effectively dismantling the free market.

Refusal to Deal

Two companies agree not to use a certain vendor

Dividing Territories

An agreement by two companies to stay out of each other’s way and reduce competition in the agreed-upon territories.

Limit Pricing

A limit price is a price, or pricing strategy, where products are sold by a supplier at a price low enough to make it unprofitable for other players to enter the market.


Where products that are not naturally related must be purchased together.

Resale Price Maintenance

Where resellers are not allowed to set prices independently.

Canadian Whack-A-Mole

The practice of creating the illusion of competition in an oligopolistic market, by creating subsidiaries and sub-brands.


Mobile Telecom

  • Rogers, Fido, Chatr
  • Telus, Koodo, Public Mobile
  • Bell, Virgin Mobile, Lucky Mobile
  • Shaw, Freedom Mobile

Jan, 2019 – Tefficient report shows Canada has world’s highest carrier revenue per SIM

Oct. 2019 – Tefficient removes Canada from mobile price ranking over industry pressure and CRTC’s delays in releasing information.

The 2019 Price Comparison Study of Telecommunications Services in Canada and with Foreign Jurisdictions, prepared by Wall Communications Inc.

International Comparison: Canada has the highest or second highest PPP-adjusted prices in all five Level baskets.

From the Executive Summary, Mobile Wireless section

Jul. 2019 – Rewheel research shows Canada carriers give you the fewest GB of data for 30 Euros, in the world.

2019 – Telus commissioned NERA study to rebut Rewheel report

Other people’s writing on the topic

Ishmael N. Daro – Canada has an oligopoly problem. This article makes a strong point that having a government-backed player in an oligopolistic market lowers prices for customers. It was interesting to consider that oligoplies exist in media, and that the “public option” CBC is under constant attack. I don’t find ishmael’s points about the big 5 banks convincing – how is that an oligopoly? How are they making life worse for Canadians?

Pardot: finding the Pardot asset when all you have is a landing page

In a situation where you only know a Pardot landing page’s public URL, and you want to open it for editing, here is what you do:

  1. Go to the landing page in your browser (works for forms, too)
  2. add the parameter ?PI_DEBUG_ENABLE=1 to the end of the URL. So
    will become
  3. Hit Enter to go to this new URL
  4. A direct link to the Pardot asset will appear on the upper right of the page. Click it to start editing your page/form right away:


You can create a button that does the above work for you, as a bookmarklet:



Credit for this goes to Cheshire Impact’s post on editing live Pardot pages. As far as I can tell, this is a completely undocumented server-side function.

Sync Outlook Calendar to Google Calendar using Microsoft Power Automate

Summary: getting Outlook events to show up in Google Calendar can be a challenge due to your workplace’s security settings. If you have access to Microsoft Power Automate (aka Flow), then you can use this .zip package to set up an integration.

This Flow is based on this Outlook to Google Calendar synch package by Alex Matulich. Thank you for laying the groundwork, Alex!

Why sync these calendars?

My personal calendar is in a Google account, and I access it with a Google app on my Android phone. My workplace calendar is in Office 365 Outlook on my work laptop.

I wanted the ability to see work events on my personal calendar/device without having to install the Outlook app on my phone. I did this because it’s a good idea to keep home & work accounts on separate devices. To keep work-time and personal-time fully apart.

Using Microsoft Flow to synch Outlook and Google Calendars

Microsoft Power Automate (aka Flow) is a service that lets you connect different applications and build connections between them. If you’ve heard of IFTTT or Zapier, Flow has the same concept.

Flow was a good option for this sync because it was free and available. The basic free version of Power Automate is already included in Office 365, and apparently allows 750 “runs” a month. This version is good enough for our purposes, although your company may have paid for a more advanced version.

Download your Power Automate .zip package below:

v2 of this flow added on Aug. 7, 2020. It no longer copies the event description to Google Calendar. Long event descriptions were cutting off the important Event ID/Master ID.

v3 of this flow was added on Nov. 17, 2020. It has 1 minute delays between repeated actions, to try and reduce rate limiting problems. Also, changed Outlook settings to look forward only 90 days, instead of 300.

Known issues: the Google Calendar steps error out because they hit rate-limiting limits (“rateLimitExceeded” message). I’ve also encountered lots of problems when making changes to recurring events. If you think of a fix, post it in the comments!

Screenshot of this Microsoft Power Automate Flow that copies Outlook calendar events into Google calendar.

This Flow will copy over new events from Outlook to Google Calendar. It also handles event updates and deletions, as well as supporting recurring events.

Installation Instructions

To get started, sign in at the Power Automate site and Import the .zip package by clicking the Import button at the top. Next, you will be prompted to connect your Office account and your Google account.

Remember, you will need to set up your own Office ID and your own Google Calendar ID within the Flow, in order to make it work with your accounts. Awesome commenter “justme” shows you how to find the Google Calendar ID in the comments below. They say:

If you go to the Settings and Sharing options of your google calendar you should see an ID, that’s a long list of random characters followed by @group.calendar.google.com. Copy that whole thing into the google calendar ID field in your flow.

You might run into an issue where your provided Google Calendar credentials are not automatically used in this Flow’s elements. The account might say the dummy value “your@googlecalendarusername.com”.

If this happens, then plase go through every instance where those credentials are used, and click on the dropdown to change the account to use your actual Google Account. There are currently 5 spots where that change has to be made. The highlighted parts of the Flow below show where to make the changes:

Credits for the MS Power Automate Flow

This flow is based on the one at Syncing Office 365 Outlook to Google calendar using Power Automate by Alex Matulich. I found it through his helpful question around special date formatting for Google Calendar in a Power Automate discussion thread.

(The date format ended up being “yyyy-MM-ddTHH:mm:ss-00:00” in your own time zone)

Thank you Alex!

My customized Flow is different from Alex’s in that it doesn’t require you to have access to an Excel Online / OneDrive account to keep track of event updates. In my organization, I was not able to make proper use of Excel Tables in the way that Alex’s Flow expected.

Other MS Flows that could be helpful:
Create new events on Google Calendar from Office 365
Copy new events in Office 365 to Google Calendar and send a notification
Update Google Calendar events previously created from Outlook.com

Trying to add Outlook Calendar to Google calendar

There are a few other documented ways to bring your Office 365 Outlook events into G Suite/Google Calendar.

One of them could work for you. It all depends on your employer’s security settings. For me, none of these methods worked. Only the Microsoft Flow method I describe above was effective.

Share calendar from Outlook 2016

You might be able to share your calendar through a “sharing invitation” email, found under the “share calendar” button.

At my organization, sharing a calendar with an external contact was blocked by the admins. A message like “Problem: Your organization’s policy does not allow you to share with this recipient.” comes up whenever you try to share your calendar with a Google account.

Publish to WebDAV server

One recommendation you’ll see for Outlook and Google calendar integration is to use the “Publish to WebDAV Server” option. This requires having an intermediary account on a server like iCal Exchange (accounts are free).

Here is a guide for setting up WebDAV publishing, from Ablebits.

Sync with Google Calendar from Outlook 365 Online

Another option for calendar sync is to go to Outlook 365 Online, then go to Settings -> Calendar -> Accounts.

There is a section there that says “To manage all your calendars in one place, connect your personal accounts with your work account. Details of personal events, like title or location, won’t be shown to other people.”.

Unfortunately, this turned out to be only a one-way sync that brings Google Calendar events into Outlook calendar (the opposite of what I wanted). As of now (July 2020) this also seems to be a feature that’s not available to everyone.

If you are looking to see your Google Calendar from within Outlook, you can try the above method or try this guide for setting up calendar sync on Outlook for desktop.

Thanks for reading and good luck with the setup!

Tool – convert HTML list to Plaintext

This tool will convert a list of HTML elements like a dropdown list of <option> elements, or <li> and <ol>, into plaintext. One item per line. This helps when you’re quickly copying a list of dropdown items (using Developer Tools) into Excel.

Limitation: the current versiont works when each element is on its own line. This isn’t necessarily always going to be the case with valid HTML, though.

How to make iFrames auto-resize to 100% height based on content

Do you need to ensure your iframe’s height is always set to 100% of the height of the content you are embedding? If so, keep on reading.

This page contains freely-usable code for responsive iFrames. iFrame height will adjust based on the height of the content in them. The code works for cross-domain iFrames and does not use any libraries like jQuery.

The problem

As a Marketing Operations professional, I often need to put marketing forms onto webpages. Normally, I would put code like this onto the page so the form appears in an iFrame:

 <iframe src="https://mydomain.com/the-form.html" style="width:1px; min-width:100%; border-width: 0px;" allowtransparency="true"></iframe> 

The problem with iFrames is that you don’t always know their full height. Also, their height can change unexpectedly.

Continue reading

How we did it: Top Tasks analysis on the LexisNexis website


Have you ever wondered if your website is truly helping your visitors accomplish their goals?

It is usually challenging to find out. Often, the opinions of your coworkers, managers, and complaining customers are the ones you hear the loudest. It is difficult to find out what the average site user thinks.

One way to find out is through a “Top Tasks” survey. This approach has been used by governments, health services, universities and software companies like Microsoft. At the core, this is a survey that reveals user’s basic needs by overwhelming their “thinking brain” with choice. The purpose of this document is to help you run your own Top Tasks survey. You will learn how to set up such a survey through a step-by-step case study of how I ran such a survey at LexisNexis Canada (a company that makes software for lawyers). You will discover surprising real-world insights that go beyond other published materials on Top Tasks.

Why is a Top Tasks survey special?

This type of survey is used to discover which end goals your website visitors value the most. It goes beyond “what information do visitors want?” towards answering “what action can I help them accomplish?”.

There is a twist: in this survey, the visitor is shown about 100 different tasks and urged to choose the top 5 quickly – in this way, we get a “gut reaction” choice rather than one that they had consciously thought about.

Continue reading

Default field mappings (Pardot and Salesforce integration)

Note: this information is from 2018 and was applicable to the v1 Pardot Connector. The new v2 connector mapping is likely different.

Here are some notes about the initial sync that occurs between Pardot and Salesforce (SFDC).

When you first enable and validate the Salesforce Connector in Pardot, a synch will begin automatically. You will not have a chance to define how fields sync between Pardot and Salesforce, and how data overrides work – you are at the mercy of the default mapping that’s been preset for you.

Here is the official document that explains how Pardot fields are mapped to Salesforce fields by default.

Don’t like how the default sync is set up? Want to have total control of the initial mapping between Pardot and Salesforce?I recommend that you do 3 things:

  1. Configure the connector so that Salesforce is prevented from creating new Pardot Prospect records (at least initially).
  2. Ensure that the Salesforce user who’s been set up as the Pardot Connector User is blind to all Leads and Contacts. Your Salesforce administrator will have to set this up prior to verifying and enabling the Pardot Connector.
  3. If you have any assigned Prospects in your Pardot instance, mark them as “Do Not Sync With CRM” using an automation rule. Anyone who’s assigned will be automatically created as a Lead in Salesforce when you verify the Connector (this will happen because step #2 ensures that Pardot will never find an existing Lead for an Assigned prospect – they’re all hidden. So it will attempt to create a new Lead).

These setting will ensure that no Prospects are synched initially. This gives you time to configure the kind of integration mapping that you desire.

Remember that you can do a “practice integration” by connecting Pardot to a Salesforce Sandbox, and even by getting a free Pardot Training Environment to protect your main Pardot during integration testing.

In addition, here is a table that shows field IDs for the default mapping for our organization. Some of these field types might depend on our specific Salesforce setup:

Pardot field namePardot field IDsalesforce.com Field NameTypeIn case of conflicting values:
Years In Businessyears_in_business Text 
WebsitewebsiteWebsiteTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Territoryterritory Text 
SourcesourceLeadSourceTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Scoring Category Last Scored Atlast_scored_atpi__Pardot_Last_Scored_At__cDateIf Pardot and Salesforce values differ when data sync occurs: Use Pardot’s value
SalutationsalutationSalutationDropdownIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
ProvincestateMailingStateTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Postal CodezipMailingPostalCodeTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
PhonephonePhoneTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Pardot Hard Bouncedpardot_hard_bouncedpi__pardot_hard_bounced__cCheckboxPardot is the master. Map this lead field to the contact field so the contact record pulls in the data. This field is hidden until a hard bounce. Even if the Do Not Email and Opted Out fields are cleared, the bounce history is retained on the prospect record and the Pardot Hard Bounced, Email Bounced Reason and Email Bounced Date fields are not cleared. If the hard bounce was the result of an invalid email address, adding a valid email address clears the Pardot Hard Bounced field.
Opted Outopted_outHasOptedOutOfEmailCheckboxMore about Opt-Out synch behaviour
Last Namelast_nameLastNameTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Job Titlejob_titleTitleTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
IndustryindustryIndustryTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
First Namefirst_nameFirstNameTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
FaxfaxFaxTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
EmployeesemployeesNumberOfEmployeesTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Email Bounced Reasonemail_bounced_reasonEmailBouncedReasonTextMore details in the official field mapping docs
Email Bounced Dateemail_bounced_dateEmailBouncedDateTextMore details in the official field mapping docs
EmailemailEmailTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value


Read more about how email address changes are synched

Do Not Emailis_do_not_email Checkbox 
Do Not Callis_do_not_call Checkbox 
DepartmentdepartmentDepartmentTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
CountrycountryMailingCountryTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
CompanycompanyCompanyTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Commentscomments Textarea 
CitycityMailingCityTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Annual Revenueannual_revenueAnnualRevenueTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Address Twoaddress_twoMailingStreetTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value
Address Oneaddress_oneStreetTextIf Pardot and Salesforce values differ when data sync occurs: Use Salesforce’s value

The Pardot documentation has more information about standard sync behaviours.

And, this document shows how to change the sync behaviour for a particular pair of fields. Keep in mind that data priorities between Pardot and Salesforce cannot be changed for certain fields (For example, the “Opted Out” field – although that field can be remapped). These special rules are explained in the official field mapping documentation.

Finally, you should be aware that – regardless of the sync behaviour you’ve set up – Pardot will never use a blank value to overwrite an existing field value. The nuances of how Pardot acts on blank values are explained in this post from The Spot for Pardot.

Search keywords n-gram analysis tool

This is an n-gram analysis tool for search keywords from Google Webmaster Console. Simply copy the query and frequency (of clicks, or impressions) into the “Input field”. What makes this tool unique is that it takes into account the weighed frequencies of a term’s appearance in your list.

For example, if you are calculating an n-gram of 2, and your query click counts are:

  • plumbers in Toronto (22 clicks)
  • plumbers in New York (11 clicks)

Then “plumbers in” will have a total weight of 33 clicks.

Your feedback is important to me – leave a comment if you run into a bug / have a killer feature request. For bugs, tell me what you did, how the tool responded, and what your ideal expected response was.

Olderposts Newerposts

Copyright © 2021 Jacob Filipp

Theme by Anders NorenUp ↑