diff --git a/lib/db-evo.js b/lib/db-evo.js
new file mode 100644
index 0000000..a7c6268
--- /dev/null
+++ b/lib/db-evo.js
@@ -0,0 +1,47 @@
+const mysql = require('mysql');
+
+const config = require('komodo-sdk/config');
+
+exports.ERROR_POOL_NOT_READY = new Error('DB-EVO: pool is not ready');
+
+exports.pool = config.mysql ? mysql.createPool({
+    host: config.mysql.evo.host || 'localhost',
+    database: config.mysql.evo.database || 'komodo',
+    user: config.mysql.evo.user || 'komodo',
+    password: config.mysql.evo.password,
+}) : null;
+
+exports.query = (query, values, cb) => {
+    // pool.query.apply(null, arguments);
+    if (!this.pool || !this.pool.query) {
+        if (typeof cb === 'function') {
+            cb(this.ERROR_POOL_NOT_READY);
+        }
+
+        return;
+    }
+
+    this.pool.query(query, values, cb);
+};
+
+exports.format = (sql, values, cb) => new Promise((resolve, reject) => {
+    if (!this.pool) {
+        reject(this.ERROR_POOL_NOT_READY);
+        if (typeof cb === 'function') cb(this.ERROR_POOL_NOT_READY);
+        return;
+    }
+
+    this.pool.getConnection((err, connection) => {
+        if (err) {
+            reject(err);
+            if (typeof cb === 'function') cb(err);
+            return;
+        }
+
+        const formatted = connection.format(sql, values);
+        connection.release();
+
+        resolve(formatted);
+        if (typeof cb === 'function') cb(null, formatted);
+    });
+});
diff --git a/lib/webservice/index.js b/lib/webservice/index.js
index cdafe83..df0710d 100644
--- a/lib/webservice/index.js
+++ b/lib/webservice/index.js
@@ -10,8 +10,10 @@ const app = express();
 const listenPort = config.webservice.port || config.webservice.listen_port;
 
 const routerPriceplan = require('./router/priceplan');
+const routerProduct = require('./router/product');
 
 app.use('/apikey/:apikey/priceplan', routerPriceplan);
+app.use('/apikey/:apikey/products', routerProduct);
 
 if (CLUSTER_MODE && cluster.isMaster) {
     logger.info(`Master ${process.pid} is running`);
diff --git a/lib/webservice/router/product.js b/lib/webservice/router/product.js
new file mode 100644
index 0000000..929f137
--- /dev/null
+++ b/lib/webservice/router/product.js
@@ -0,0 +1,30 @@
+const express = require('express');
+const logger = require('komodo-sdk/logger');
+const dbEvo = require('../../db-evo');
+
+const router = express.Router();
+module.exports = router;
+
+function pageJson(req, res) {
+    const query = `
+        SELECT
+            UPPER(service.keyword) AS name
+        FROM product
+        LEFT JOIN service ON service.svc_id = product.svc_id
+        WHERE
+            service.svc_cat IN (1, 6)
+        ORDER BY SOUNDEX(service.keyword), LENGTH(service.keyword), service.keyword;
+    `.trim();
+
+    dbEvo.query(query, [], (err, result) => {
+        if (err) {
+            logger.warn(`ROUTER-PRODUCTS: DB error. ${err.toString()}`);
+        }
+
+        const products = (result || []).map((item) => item.name);
+
+        res.json(products);
+    });
+}
+
+router.get('/json', pageJson);