diff --git a/docs/en/README.md b/docs/en/README.md
index 0767e2c12f..25f20367c3 100644
--- a/docs/en/README.md
+++ b/docs/en/README.md
@@ -225,6 +225,8 @@ If no matching results were found, the server returns only a HTTP status code `2
+
+
### Youtube
diff --git a/lib/router.js b/lib/router.js
index 3bf2652937..4f7aee8c71 100755
--- a/lib/router.js
+++ b/lib/router.js
@@ -258,6 +258,7 @@ if (config.twitter && config.twitter.consumer_key && config.twitter.consumer_sec
// Instagram
router.get('/instagram/user/:id', require('./routes/instagram/user'));
+router.get('/instagram/tag/:tag', require('./routes/instagram/tag'));
// Youtube
if (config.youtube && config.youtube.key) {
diff --git a/lib/routes/instagram/tag.js b/lib/routes/instagram/tag.js
new file mode 100644
index 0000000000..6e7bd29954
--- /dev/null
+++ b/lib/routes/instagram/tag.js
@@ -0,0 +1,109 @@
+const axios = require('../../utils/axios');
+const cheerio = require('cheerio');
+
+module.exports = async (ctx) => {
+ const tag = ctx.params.tag;
+
+ const response = await axios({
+ method: 'get',
+ url: `https://www.instagram.com/explore/tags/${tag}/`,
+ headers: {
+ Referer: `https://www.instagram.com/explore/tags/${tag}/`,
+ },
+ });
+
+ const data = JSON.parse(response.data.match(/