Introduction

Many business owners hire freelance programmers to help them integrate, configure and set up online ecommerce websites. But there are at least 3 key questions that need to be answered along the way:

  • Which ecommerce solution should I use ?
  • Which payment gateway/service should I use ?
  • How should I promote/advertise my ecommerce website ?

This blogpost will focus on answering those questions using data from 336,067 freelance job ads collected over the course of 1 year and 2 months.

Ecommerce platforms

You can split ecommerce platforms into two categories:

  • SaaS solutions
  • selfhosted

The first type, SaaS solutions are centrally hosted, they can be less flexible and customizable but you have the advantage that someone else is taking care of the hosting, reliability, infrastructure. Some examples of SaaS solutions are shopify and bigcommerce.

The selfhosted solutions are very flexible, you can customize/modify/tune/integrate if you're experienced with that particular solution but you also have to take care of installing it, maintainance, monitoring, security, scalability. Some examples of selfhosted solutions are magento, prestashop or woocommerce.

Another aspect is if you're able to export the data. Some of the SaaS solutions make it harder to export data than others (it may be that at some point you'll want to migrate from a SaaS to a selfhosted solution)

WITH classes(label, re1, re2) AS (
    VALUES
    ('magento'      , 'magento'                              , NULL       ),
    ('prestashop'   , 'prestashop|presta shop|presta-shop'   , NULL       ),
    ('woocommerce'  , 'woocommerce|woo-commerce|woo commerce', NULL       ),
    ('bigcommerce'  , 'bigcommerce'                          , NULL       ),
    ('shopify'      , 'shopify'                              , NULL       ),
    ('zencart'      , 'zen cart|zencart'                     , NULL       ),
    ('sharetribe'   , 'sharetribe'                           , NULL       ),
    ('oscommerce'   , 'oscommerce'                           , NULL       ),
    ('nopcommerce'  , 'nopcommerce'                          , NULL       ),
    ('lemonstand'   , 'lemonstand.com'                       , NULL       ),
    ('squarespace'  , 'squarespace'                          , 'commerce' ),
    ('nopcommerce'  , 'nopcommerce'                          , NULL       ),
    ('volusion'     , 'volusion'                             , NULL       ),
    ('wix'          , 'www.wix.com| wix.com| wix '           , NULL       ),
    ('3dcart'       , '3dcart'                               , NULL       ),
    ('shoprocket'   , 'shoprocket'                           , NULL       ),
    ('jigoshop'     , 'jigoshop'                             , NULL       ),
    ('ecwid'        , 'ecwid'                                , NULL       ),
    ('pimcore'      , 'pimcore'                              , NULL       )
), jobs AS (
    SELECT 
    job_id,
    LOWER(job_title || ' ' || snippet) AS jdata
    FROM odesk_job
)
SELECT
c.label AS ecommerce_solution, COUNT(j.job_id) AS cnt
FROM classes c
LEFT JOIN jobs j ON (
    j.jdata ~ ('(' || c.re1 || ')') AND
    (
     CASE WHEN c.re2 IS NULL THEN true
     ELSE (j.jdata ~ ('(' || c.re2 || ')'))
     END
    )
)
GROUP BY c.label
ORDER BY cnt DESC;

Ecommerce marketing/advertising solutions

WITH classes(label, re1, re2) AS (
    VALUES
    ('google adwords'       , 'adwords|google adwords|google.com/adwords|adwords.com'                                 , NULL       ),
    ('facebook ads'         , 'ads manager|facebook.com/business|facebook ads'                                        , NULL       ),
    ('google merchant'      , 'google merchant|google.com/retail/merchant'                                            , NULL       ),
    ('pinterest ads'        , 'ads.pinterest.com|pinterest ads'                                                       , NULL       ),
    ('bing ads'             , 'bingads|bing ads'                                                                      , NULL       ),
    ('twitter ads'          , 'twitter ads|ads.twitter.com'                                                           , NULL       ),
    ('amazon advertising'   , 'amazon sponsored links|advertising.amazon.com|amazon ppc|amazon ads|amazon advertising', NULL       )
), jobs AS (
    SELECT 
    job_id,
    LOWER(job_title || ' ' || snippet) AS jdata
    FROM odesk_job
    WHERE LOWER(job_title || ' ' || snippet) ~ '(commerce|webstore|web store|online shop|[^a-zA-Z]eshop|[^a-zA-Z]e-shop)'
)
SELECT
c.label AS advertising_solution, COUNT(j.job_id) AS cnt
FROM classes c
LEFT JOIN jobs j ON (
    j.jdata ~ ('(' || c.re1 || ')') AND
    (
     CASE WHEN c.re2 IS NULL THEN true
     ELSE (j.jdata ~ ('(' || c.re2 || ')'))
     END
    )
)
GROUP BY c.label
ORDER BY cnt DESC;

Ecommerce payment solutions

WITH classes(label, re1, re2) AS (
    VALUES
    ('skrill'             , 'skrill|moneybookers'                   , NULL),
    ('payoneer'           , 'payoneer'                              , NULL),
    ('amazon'             , 'amazon payments|payments.amazon.com'   , NULL),
    ('paypal'             , 'paypal'                                , NULL),
    ('google wallet'      , 'google wallet|google.com/wallet'       , NULL),
    ('ukash'              , 'ukash'                                 , NULL),
    ('intuit'             , 'intuit payments|payments.intuit.com'   , NULL),
    ('2checkout'          , '2checkout'                             , NULL),
    ('square'             , 'square'                                , NULL),
    ('stripe'             , 'stripe'                                , NULL),
    ('network merchants'  , ' nmi.com|network merchants'            , NULL)
), jobs AS (
    SELECT 
    job_id,
    LOWER(job_title || ' ' || snippet) AS jdata
    FROM odesk_job
    WHERE LOWER(job_title || ' ' || snippet) ~ '(payment)'
)
SELECT
c.label AS payment_solution, COUNT(j.job_id) AS cnt
FROM classes c
LEFT JOIN jobs j ON (
    j.jdata ~ ('(' || c.re1 || ')') AND
    (
     CASE WHEN c.re2 IS NULL THEN true
     ELSE (j.jdata ~ ('(' || c.re2 || ')'))
     END
    )
)
GROUP BY c.label
ORDER BY cnt DESC;

Conclusion

At the time of writing this, it seems that magento + google adwords + paypal is a good combination of solutions to use when building an ecommerce website.