CRFT by Maki

Digesting business requirements and challenges, and developing solutions specifically for WordPress.


CRFT by Maki wanted to sync their WooCommerce store products, with their Facebook Shop Product Catalogue, but the official Facebook for Woocommerce plugin was not generating the correct syncing data. The issues were:

  • Parent products that have child variations were shown as separate products.
  • Only the first product image was included on child variations.
  • Product naming was inconsistent, because child variations were named differently.

Existing Product Feed Plugins.

For Facebook Shops specifically, there were only paid-alternatives to the official plugin, and even then there was no guarantee that it would fit CRFT by Maki's use case.


In this case, I settled on the solution below because it:

  • Allowed me the most control over the outcome, for the amount of time spent.
  • Requires very little maintenance, if any.
  • Can be easily adjusted to suit future requirements, without having to look for another plugin.
  • Isn't coupled to the WordPress environment, so it doesn't incur that development overhead.
  • Works within Google and AWS' free service tiers, so there's no additional hosting costs.
  • Allowed me to write a Serverless function for the first time, which is cool.

I found a plugin that generated a CSV feed of WooCommerce product data in specific time intervals, that was as close to Facebook's requirements as possible. I then wrote a serverless Google Cloud Function that consumed this feed to produce the desired result.

The resultant CSV file is then uploaded to AWS S3, and read by Facebook's Product Catalogue Manager. Instead of using Google's Cloud Pub/Sub, the Cloud Function is triggered by a cron job on one of my existing servers.

The reason why I used AWS S3 instead of Google Cloud Storage, was because the storage library for streaming uploads (boto) doesn't work with Python 3.7.x (and that's the only version Google Cloud Function supports, go figure).